ms-swift LoRA 微调全流程

约 50 分钟L2T1T2

课程来源

[来源]《ModelScope Cookbook · 魔搭紫皮书》第 13 章〈快速用 ms-swift,完成开源模型的轻量微调〉 · ModelScope ms-cookbook 团队与共建者著

原文:github.com/modelscope/ms-cookbook(Apache License 2.0)

[收录说明] 本课为蒸馏改编收录(非全文照录),面向 FDE 培训场景重构结构与补充决策树;命令与参数以原著及 ms-swift 当前文档为准。

本课目录(5 节)

ms-swift LoRA 微调全流程

通用模型聊起你的业务头头是道,但真要用:信息不能漏、字段要统一、格式要稳定——这就是微调的入场时机。这一课用电商实体识别任务,把 ms-swift 从数据到部署整条流程跑通。

一、微调到底在改什么

微调不是重新训练,而是在模型已有能力上做针对性调整,数据和算力需求远小于预训练。最常见的路线是 SFT(监督微调):每条数据 = 输入 + 期望输出,让模型学会"给定这个输入,应该生成什么样的结果"。适合样本明确的任务:分类、信息抽取、问答、固定格式生成。

SFT 之上的进阶是强化学习(RL):不直接给标准答案,用奖励信号评价生成好坏并持续调整。SFT 和 RL 都属于**后训练(Post-training)**阶段——先 SFT 学会按指令完成任务,再用 RL 优化回答质量,是主流模型的通行组合。

二、三种微调方式:一张决策表

方式更新什么显存特征适用
全参数微调全部参数最高,成本大资源充足 + 需要充分调整
LoRA冻结原权重,只训注入各层的低秩矩阵 A/B低;Adapter 文件小,便于保存多数任务的首选
QLoRALoRA + 基础模型量化到 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 配哪个基座"记错就是生产事故。

本课自测

  1. SFT 和强化学习分别解决什么问题?它们属于训练的哪个阶段?
  2. 什么信号说明该从 LoRA 升级到 QLoRA?什么情况下不必上全参数微调?
  3. LoRA 的"低秩"体现在哪里?训练产物是什么形态的文件?
  4. ms-swift 训练完成后的推理和部署分别用什么命令?

随堂测

逐题作答,即时反馈

0 / 3 已作答
  1. 1. LoRA 微调『低秩』体现在哪里?训练产物是什么形态?

  2. 2. 什么信号说明该从 LoRA 升级到 QLoRA?

  3. 3. ms-swift 完成训练后,推理和部署成 OpenAI 兼容服务分别用什么命令?