
SwanLab 大模型微调可视化实战2 个场景跑通 loss 曲线与调参决策【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/datawhalechina/self-llm你刚跑完一次大模型微调关掉终端后却说不清它到底学到了什么loss 降没降、该不该再训一个 epoch、学习率调没调对全凭感觉。SwanLab 是一款开源的 AI 训练跟踪与可视化工具能自动记录超参数、实时画出 loss 曲线还支持把模型生成结果存进面板做主观评测。本文基于 self-llm 仓库的两个真实案例带你 2 个场景跑通微调加可视化的完整流程并学会依据曲线做调参与早停决策。项目定位让训练过程可追踪、可比对self-llm 是《开源大模型食用指南》教程仓库覆盖从部署到 LoRA/全参微调的完整路径SwanLab 在其中承担实验看板的角色。核心能力包括全程追踪超参数、train loss、learning rate、梯度范数自动入档曲线对比多条实验的指标可叠加到同一张图文本记录用 swanlab.Text 把每轮推理输出存进面板供肉眼验收框架集成与 Transformers Trainer 通过 report_toswanlab 或 SwanLabCallback 两行接入快速上手两行代码接入可视化装好环境# 清华源加速降低下载超时概率 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 版本组合来自仓库医学微调案例已验证可复现 pip install swanlab0.5.7 modelscope1.22.0 transformers4.50.0 datasets3.2.0 accelerate peft0.11.1硬件与环境要求显存LoRA 微调 24GB 起步如 24GB 的 40901.7B 级全参微调建议 32GBPython 3.8–3.11已装好 PyTorch 与 CUDA首次使用云端面板需在 swanlab.cn 注册账号并复制 API Key训练启动时会提示粘贴不配也能在本地目录记录日志跑通最小示例接入只需两行TrainingArguments 里加 report_toTrainer 里加 callback。import swanlab from transformers import TrainingArguments, Trainer from swanlab.integration.transformers import SwanLabCallback args TrainingArguments( output_dir./output, num_train_epochs1, report_toswanlab, # 让 Trainer 自动上报指标 ) trainer Trainer( modelmodel, argsargs, train_datasettrain_dataset, callbacks[SwanLabCallback()], # 自动记录 loss、学习率等 ) trainer.train() swanlab.finish()loss 收敛曲线 这类曲线训练全程自动更新无需手写任何 logging 代码。实战把一次真实微调跑通场景 1Qwen3-1.7B 医学问答全参微调数据准备仓库案例使用 delicate_medical_r1_data 数据集2000 余条医学问答含 question/think/answer 三列目标是让模型学会输出带 think 思考过程的回答。随机打乱后按 9:1 拆分为 train.jsonl 与 val.jsonl。关键代码模型经 modelscope 下载后加载训练前缀部分在 labels 里填 -100只对回答部分计算损失from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer tokenizer AutoTokenizer.from_pretrained(model_dir, use_fastFalse, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained( model_dir, device_mapauto, torch_dtypetorch.bfloat16) model.enable_input_require_grads() # 开启梯度检查点时需要 # 关键指令前缀对应位置填 -100损失只计算回答部分 labels [-100] * len(instruction[input_ids]) response[input_ids]训练参数与 SwanLab 项目名完整 process_func 见仓库源码约 40 行os.environ[SWANLAB_PROJECT] qwen3-sft-medical # SwanLab 项目名 args TrainingArguments( output_dir./output/Qwen3-1.7B, per_device_train_batch_size1, # 32GB 显存全参保守取值 gradient_accumulation_steps4, # 等效 batch size 4 eval_strategysteps, eval_steps100, num_train_epochs2, learning_rate1e-4, gradient_checkpointingTrue, # 以算力换显存 report_toswanlab, run_nameqwen3-1.7B, )输出解读训练结束前把验证集前 3 条的推理结果作为文本记入面板与 loss 曲线互相印证swanlab.log({Prediction: [swanlab.Text(response_text)]}) # 记录生成文本 swanlab.finish()面板里同时挂了三样东西train/eval loss 两条曲线、学习率调度、以及带 think 标签的医学问答生成文本训练结束即可肉眼验收。场景 2Phi-4 LoRA 微调医疗实体识别数据准备few_shot_ner_sft 数据集的 cmeee 子集取前 5000 条每条中文医疗文本带 9 类实体标注dis 疾病、sym 临床表现、bod 身体部位、dru 药物等完整数据加载与 prompt 拼接逻辑见仓库 NER 教程。关键代码LoRA 只训练低秩旁路参数冻结原权重显存占用显著低于全参config LoraConfig( task_typeTaskType.CAUSAL_LM, target_modules[q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj], r64, # LoRA 秩 lora_alpha16, lora_dropout0.1, ) model get_peft_model(model, config) args TrainingArguments( per_device_train_batch_size4, gradient_accumulation_steps4, num_train_epochs1, learning_rate1e-4, gradient_checkpointingTrue, report_tonone, # 指标改由 SwanLabCallback 上报 ) swanlab_callback SwanLabCallback( projectPhi-4-NER-fintune, experiment_namephi-4, config{lora_rank: 64, lora_alpha: 16}, # 超参一并入档 )输出解读训练面板自动画出 4 张图训练损失在 120 步内从 3.4 降到 0.33 附近梯度范数稳定在 0.5 以下学习率曲线呈线性衰减。更关键的是面板里的 Prediction 文本区基座模型对由于迷走神经、舌咽神经核及舌下神经核受损伤可发生呼吸肌及吞咽肌痉挛这类句子只识别出 1 个实体微调后的 Phi-4 输出了迷走神经舌咽神经呼吸肌吞咽肌bod 身体部位与痉挛sym 临床表现等多个正确实体效果可直接肉眼对比。用数据说话看曲线决定何时停训两个案例的关键指标放在一起均取自 SwanLab 面板读数实验配置关键读数结论Qwen3-1.7B 全参2 epochlr1e-4step 500train loss 1.2042 / eval loss 1.1426第 2 个 epoch 后 train loss 跌破 0.6eval loss 从 1.12 反弹到 1.2 附近典型过拟合2000 条数据全参只训 1 个 epoch 足够Phi-4 LoRA NER1 epoch120 步train loss 3.4 → 0.3287grad norm 峰值 0.3958单 epoch 收敛平稳无过拟合迹象怎么依据曲线做决策判断过拟合看两条曲线的剪刀口。eval loss 比 train loss 持续高出 0.3 以上且掉头向上就停训回取分离前的 checkpoint。控制训练量小数据千条级配全参微调1 个 epoch 通常是上限多训只会变差。验证调度面板里的 learning rate 曲线能直接核对你的调度策略linear/cosine是否生效loss 震荡时优先换调度、加大 warmup。别只看数字每 epoch 记录 3–5 条模型输出swanlab.Textloss 低不代表回答对。避坑手册五个高频问题现象CUDA out of memory。原因batch 过大或显存不足1.7B 全参约需 32GB。解法batch_size 降到 1加 gradient_checkpointingTrue或改用 LoRA/4bit 量化。现象警告use_cacheTrue is incompatible with gradient checkpointing。原因Trainer 与梯度检查点默认行为冲突transformers 会自动关闭缓存。解法训练阶段属正常提示可忽略纯推理时需手动model.config.use_cacheTrue。现象loss 大幅震荡不收敛。原因学习率偏大或缺少 warmup。解法lr 降到 5e-5增加 warmup_steps如 100后重跑。现象train loss 一路降、eval loss 反升。原因过拟合见用数据说话一节。解法减少 epochLoRA 场景把 lora_dropout 提到 0.2 或降低 r。现象SwanLab 云端看不到实验数据。原因API Key 未配置或未登录。解法日志始终保存在本地 ./swanlog可用swanlab watch ./swanlog离线查看下次启动时再完成登录。小结与进阶接入 SwanLab 只需 report_toswanlab 加一个 callback两行代码别手写 logging停训依据两条曲线的分离程度eval loss 反超即停取最佳 checkpoint用 swanlab.Text 每轮记几条推理输出比单看 loss 更可靠超参数写进 SwanLabCallback 的 config下次复现直接对照面板训练前先定好判停规则而不是训完再找理由进阶方向GRPO 强化学习微调仓库提供 Qwen3-8B 完整 Notebook、EvalScope 并发压测、QLoRA 4bit 量化进一步压显存。仓库内相关案例医学问答全参微调09-Qwen3-1.7B-医学推理式对话微调 及 SwanLab 可视化记录.md法律问答 LoRA 微调05-Qwen2.5-Coder-7B-Instruct Lora 微调 SwanLab 可视化记录版.md医疗 NER LoRA 微调05-Phi-4-Lora 微调 命名实体识别.mdGRPO 强化学习10-Qwen3-8B GRPO微调及通过swanlab可视化.md执行git clone https://gitcode.com/datawhalechina/self-llm获取全部案例挑一个场景今天就跑起来。【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/datawhalechina/self-llm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考