ms-swift LoRA 微调全流程
通用模型聊起你的业务头头是道,但真要用:信息不能漏、字段要统一、格式要稳定——这就是微调的入场时机。这一课用电商实体识别任务,把 ms-swift 从数据到部署整条流程跑通。
一、微调到底在改什么
微调不是重新训练,而是在模型已有能力上做针对性调整,数据和算力需求远小于预训练。最常见的路线是 SFT(监督微调):每条数据 = 输入 + 期望输出,让模型学会"给定这个输入,应该生成什么样的结果"。适合样本明确的任务:分类、信息抽取、问答、固定格式生成。
SFT 之上的进阶是强化学习(RL):不直接给标准答案,用奖励信号评价生成好坏并持续调整。SFT 和 RL 都属于**后训练(Post-training)**阶段——先 SFT 学会按指令完成任务,再用 RL 优化回答质量,是主流模型的通行组合。
二、三种微调方式:一张决策表
| 方式 | 更新什么 | 显存特征 | 适用 |
|---|---|---|---|
| 全参数微调 | 全部参数 | 最高,成本大 | 资源充足 + 需要充分调整 |
| LoRA | 冻结原权重,只训注入各层的低秩矩阵 A/B | 低;Adapter 文件小,便于保存 | 多数任务的首选 |
| QLoRA | LoRA + 基础模型量化到 4bit(NF4 + 双重量化 + 分页优化器) | 进一步降低 | 模型大、显存有限的场景 |
原理一句话:预训练矩阵的更新量 ΔW 用两个小矩阵的乘积 BA 近似(秩 r 远小于原维度),训练只动 A 和 B。使用时基础模型 + Adapter 一起加载。
选法口诀:先 LoRA 起步;模型大到 LoRA 也装不下 → QLoRA;LoRA 已达预期就没有必要为"更新更多参数"上全参数。先用低成本验证,再加投入。
三、ms-swift:一条命令封装整条流水线
ms-swift(Scalable lightWeight Infrastructure for Fine-Tuning)是 ModelScope 社区的训练部署框架,支持 Qwen/DeepSeek/Llama/GLM/InternLM 及多模态模型,训完可直接 swift infer 推理、swift deploy 起OpenAI 兼容服务,配合 vLLM/SGLang 加速——训练、推理、部署一套工具闭环,对驻场环境特别友好。
实战:电商实体识别。任务:从商品文本中识别四类实体——HCCX 商品名、HPPX 品牌名、XH 型号、MISC 其他,输出 (类型,实体,起始位置)。数据 5400 条训练 + 600 条验证,messages 格式(system 里写死输出格式要求)。
pip install ms-swift
CUDA_VISIBLE_DEVICES=0 swift sft \
--model Qwen/Qwen3-0.6B \
--dataset data/train.jsonl \
--val_dataset data/val.jsonl \
--tuner_type lora \
--target_modules all-linear \
--lora_rank 16 --lora_alpha 32 --lora_dropout 0.05 \
--torch_dtype bfloat16 \
--num_train_epochs 2
流程五步:装包 → 数据准备(jsonl)→ swift sft 启动 LoRA 训练 → 合并 LoRA 权重 → 加载推理/swift deploy 上服务。0.6B 模型 LoRA,消费级 GPU 就能跑完。
四、FDE 视角:微调交付的三条纪律
- 先问"要不要微调":提示词 + RAG 能解决的不要上微调——微调适合"任务和输出格式已明确 + 有整理好的示例数据"的场景(呼应技术实战线的评估方法论);
- 基线先行:训练前先把基础模型在同一验证集上的分数测出来,训完对比才有"提升了多少"的答案(下一课展开);
- 产物管理:LoRA Adapter 小,但要和基础模型版本配对存档——"哪个 Adapter 配哪个基座"记错就是生产事故。
本课自测
- SFT 和强化学习分别解决什么问题?它们属于训练的哪个阶段?
- 什么信号说明该从 LoRA 升级到 QLoRA?什么情况下不必上全参数微调?
- LoRA 的"低秩"体现在哪里?训练产物是什么形态的文件?
- ms-swift 训练完成后的推理和部署分别用什么命令?
随堂测
逐题作答,即时反馈
1. LoRA 微调『低秩』体现在哪里?训练产物是什么形态?
2. 什么信号说明该从 LoRA 升级到 QLoRA?
3. ms-swift 完成训练后,推理和部署成 OpenAI 兼容服务分别用什么命令?