【图像大模型】ms-swift 深度解析:一站式多模态大模型微调与部署框架的全流程使用指南
ms-swift
是由 ModelScope 社区推出的 轻量级、可扩展的大模型微调与部署框架,支持对超过 500 个大语言模型(LLM)和 200 多个多模态大模型(MLLM)进行高效微调、推理、评估、量化和部署。其设计目标是提供一个“开箱即用”的全流程工具链,涵盖从数据准备到模型发布的完整 pipeline。
论文地址 : https://arxiv.org/pdf/2408.05517
ms-swift 深度解析:一站式多模态大模型微调与部署框架的全流程使用指南
- 一、框架概览
- ✅ 核心能力
- 📌 官方定位
- 二、脚本启动逻辑(CLI 模式)
- 1. 主要命令结构
- 2. 启动流程示例(SFT 微调)
- 🔍 启动逻辑解析:
- 三、微调样本如何准备
- 1. 支持的数据格式
- ✅ 方式一:使用 ModelScope/HuggingFace 数据集
- ✅ 方式二:自定义本地数据集
- 示例 JSONL 格式(单轮对话):
- 多轮对话格式(支持 chat template):
- 2. 数据预处理流程
- 3. 数据增强与采样
- 四、数据量级建议
- 五、代码框架如何进行参数优化
- 1. 轻量化训练策略(PEFT)
- 2. 分布式训练优化
- 3. 学习率与优化器调优
- 六、启动运行的资源需求
- 1. 单卡微调资源需求(以 Qwen2.5-7B 为例)
- 2. 多卡训练配置(8*A100 80G)
- 3. 推理资源需求
- 七、高级特性与最佳实践
- 1. Web UI 零代码训练
- 2. 模型评估(EvalScope)
- 3. 模型量化导出
- 4. 模型上传 ModelScope
- 八、总结:ms-swift 的核心优势
- 九、适用人群推荐
- 参考资料
一、框架概览
✅ 核心能力
- 支持多种训练模式:全参数微调(Full-parameter)、LoRA、QLoRA、DoRA、LISA、ReFT、GaLore 等轻量化方法。
- 支持多种训练任务:
- CPT(Continual Pre-training)
- SFT(Supervised Fine-Tuning)
- DPO / GRPO / KTO / ORPO / SimPO / CPO(人类偏好对齐)
- RM(Reward Modeling)
- PPO(Reinforcement Learning)
- 多模态支持:图像、音频、视频等模态的 VQA、Captioning、OCR 等任务。
- 推理加速:集成 vLLM、SGLang、LMDeploy,支持 OpenAI 兼容 API。
- 评估系统:内置 EvalScope,支持 100+ 数据集评测。
- 量化导出:支持 GPTQ、AWQ、BNB、FP8 等低比特量化。
- Web UI:Gradio 可视化界面,无需编码即可完成训练与部署。
- 分布式训练:支持 DeepSpeed ZeRO、FSDP、Megatron-LM 并行训练。
📌 官方定位
“A Scalable lightWeight Infrastructure for Fine-Tuning” —— 可扩展的轻量级微调基础设施
论文已被 AAAI 2025 接收,表明其在学术与工程上的双重认可。
二、脚本启动逻辑(CLI 模式)
ms-swift
提供了高度封装的命令行接口(CLI),用户只需调用 swift <task>
即可启动不同任务。
1. 主要命令结构
swift [subcommand] [arguments]
常用子命令包括:
命令 | 功能 |
---|---|
swift sft | 监督微调 |
swift pt | 继续预训练 |
swift rlhf | 偏好对齐训练(DPO/GRPO等) |
swift infer | 推理 |
swift deploy | 部署服务 |
swift eval | 模型评估 |
swift export | 导出/上传模型 |
swift sample | 采样生成 |
swift web-ui | 启动 Web 界面 |
2. 启动流程示例(SFT 微调)
CUDA_VISIBLE_DEVICES=0 swift sft \--model Qwen/Qwen2.5-7B-Instruct \--train_type lora \--dataset 'AI-ModelScope/alpaca-gpt4-data-zh#500' \'AI-ModelScope/alpaca-gpt4-data-en#500' \'swift/self-cognition#500' \--num_train_epochs 1 \--per_device_train_batch_size 1 \--learning_rate 1e-4 \--lora_rank 8 \--lora_alpha 32 \--target_modules all-linear \--gradient_accumulation_steps 16 \--output_dir output \--max_length 2048
🔍 启动逻辑解析:
-
环境初始化:
- 加载 PyTorch、Transformers、PEFT、Deepspeed 等依赖。
- 自动检测 GPU/NPU/MPS 设备。
-
模型加载:
- 通过
--model
指定 HuggingFace 或 ModelScope 上的模型 ID。 - 使用
modelscope
或transformers
下载模型权重。
- 通过
-
适配器注入:
- 若
--train_type=lora
,自动使用peft.LoraConfig
注入 LoRA 模块。 - 支持
all-linear
自动识别线性层。
- 若
-
数据加载与处理:
- 根据
--dataset
自动下载或加载本地数据集。 - 使用预定义模板(如
qwen
)进行 prompt formatting。 - 调用
EncodePreprocessor
将文本编码为 token IDs。
- 根据
-
训练器构建:
- 使用
Seq2SeqTrainer
或自定义SwiftTrainer
。 - 集成日志、检查点保存、评估回调。
- 使用
-
训练执行:
- 执行训练循环,支持梯度累积、混合精度(AMP)、学习率调度。
-
结果输出:
- 保存 LoRA 权重至
output/
目录。 - 可选合并 LoRA 到基础模型。
- 保存 LoRA 权重至
三、微调样本如何准备
1. 支持的数据格式
ms-swift
支持两种方式加载数据:
✅ 方式一:使用 ModelScope/HuggingFace 数据集
--dataset AI-ModelScope/alpaca-gpt4-data-en#1000
#1000
表示采样前 1000 条。- 支持多个数据集拼接,用空格分隔。
✅ 方式二:自定义本地数据集
支持以下格式:
- JSONL(推荐)
- CSV
- TXT(纯文本)
- Parquet
示例 JSONL 格式(单轮对话):
{"instruction": "介绍一下你自己", "input": "", "output": "我是通义千问,由阿里云研发的语言模型。"}
多轮对话格式(支持 chat template):
{"messages": [{"role": "user", "content": "你好"},{"role": "assistant", "content": "你好!有什么我可以帮助你的吗?"},{"role": "user", "content": "请介绍一下你自己"},{"role": "assistant", "content": "我是通义千问,由阿里云研发的语言模型。"}]
}
2. 数据预处理流程
-
字段映射:
- 自动识别
instruction/input/output
或messages
字段。 - 可通过
--prompt_template
指定模板(如alpaca
,qwen
,llama3
)。
- 自动识别
-
Prompt 构造:
- 使用内置
Template
类(如QwenTemplate
)格式化 prompt。 - 示例输出:
<|im_start|>system You are a helpful assistant.<|im_end|> <|im_start|>user 介绍一下你自己<|im_end|> <|im_start|>assistant 我是通义千问...
- 使用内置
-
Tokenization:
- 使用 tokenizer 编码为
input_ids
,labels
。 labels
中仅保留 assistant 回复部分用于计算 loss。
- 使用 tokenizer 编码为
3. 数据增强与采样
- 支持
#N
语法进行随机采样。 - 支持
--streaming true
流式加载超大数据集(TB 级)。
四、数据量级建议
训练类型 | 推荐数据量 | 说明 |
---|---|---|
LoRA 微调 | 1k ~ 50k | 小样本即可生效,适合领域适配 |
全参数微调 | 50k ~ 500k+ | 需要更大数据量才能稳定收敛 |
DPO/GRPO | 1k ~ 10k 偏好对 | 偏好数据质量比数量更重要 |
继续预训练(CPT) | 10M+ tokens | 用于领域知识注入 |
多模态训练 | 10k ~ 100k 图文对 | 视觉-语言对齐任务 |
💡 实践建议:LoRA 在 500~1000 条高质量指令数据上即可取得不错效果。
五、代码框架如何进行参数优化
1. 轻量化训练策略(PEFT)
方法 | 特点 | 适用场景 |
---|---|---|
LoRA | 冻结主干,只训练低秩矩阵 | 通用微调 |
QLoRA | LoRA + 4-bit 量化 | 显存受限(如 24GB GPU) |
DoRA | 分解权重更新为幅度+方向 | 提升收敛速度 |
ReFT | Representation Finetuning | 控制特定表示空间 |
Lora+ | 动态调整 LoRA 学习率 | 提升训练稳定性 |
UnSloth | 内核优化加速 LoRA | 显著提升训练速度(最高 2x) |
Liger Kernel | 替换 FlashAttention 实现 | 更高吞吐、更低显存 |
配置方式:
--train_type lora
--lora_rank 64
--lora_alpha 128
--target_modules all-linear # 或手动指定 q_proj,v_proj 等
--use_dora true # 启用 DoRA
--enable_unsloth true # 启用 UnSloth 加速
2. 分布式训练优化
技术 | 配置参数 | 显存节省 | 速度提升 |
---|---|---|---|
DeepSpeed ZeRO-2/3 | --deepspeed zero2 | 高 | 中 |
FSDP | --fsdp 'full_shard' | 高 | 中 |
Megatron-LM | --megatron_parallel_size 8 | 高 | 高(尤其 MoE 模型) |
vLLM 推理加速 | --infer_backend vllm | 降低推理显存 | 提升吞吐 3-5x |
3. 学习率与优化器调优
- 默认使用 AdamW。
- 支持
--learning_rate 1e-4
、--weight_decay 0.01
。 - 支持
--warmup_ratio 0.05
线性预热。 - 可结合
--lr_scheduler_type cosine
使用余弦退火。
六、启动运行的资源需求
1. 单卡微调资源需求(以 Qwen2.5-7B 为例)
配置 | 显存占用 | 是否可行 | 备注 |
---|---|---|---|
Full-tuning | > 80GB | ❌ | 不推荐 |
LoRA 微调 | ~22GB | ✅ | RTX 3090/4090/A6000 可行 |
QLoRA(4-bit) | ~10GB | ✅✅ | 24GB 显存可跑大 batch |
LoRA + Gradient Checkpointing | ~18GB | ✅ | 减少显存但降低速度 |
示例:
Qwen2.5-7B-Instruct
+ LoRA + bf16 + batch_size=1 + seq_len=2048 ≈ 22GB
2. 多卡训练配置(8*A100 80G)
NPROC_PER_NODE=8 CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 swift pt \--model Qwen/Qwen2.5-7B \--dataset swift/chinese-c4 \--train_type full \--deepspeed zero3 \--per_device_train_batch_size 2 \--gradient_accumulation_steps 4
- 支持 多节点多卡 训练。
- 结合
DeepSpeed
或FSDP
实现显存切分。 - Megatron 支持 tensor parallelism,适合 MoE 模型(如 Qwen3-MoE)。
3. 推理资源需求
模型 | 显存(FP16) | vLLM 显存 | 支持设备 |
---|---|---|---|
Qwen2.5-7B | ~14GB | ~8GB | 单卡 |
Qwen2.5-72B | ~140GB | ~60GB | 多卡(TP=4/8) |
Llama3-8B | ~16GB | ~9GB | 单卡 |
多模态模型(Qwen2-VL) | ~18GB | ~10GB | 支持图像编码 |
✅ 支持 CPU 推理(慢)、NPU(Ascend)、MPS(Mac)
七、高级特性与最佳实践
1. Web UI 零代码训练
SWIFT_UI_LANG=zh swift web-ui
- 提供图形化界面配置训练参数。
- 支持一键启动训练、推理、部署。
2. 模型评估(EvalScope)
swift eval \--model Qwen/Qwen2.5-7B-Instruct \--eval_dataset MMLU \--infer_backend vllm
- 支持 MMLU、CEval、GSM8K、HumanEval、MMMU 等基准测试。
3. 模型量化导出
swift export \--model Qwen/Qwen2.5-7B-Instruct \--quant_bits 4 \--quant_method awq \--output_dir ./qwen-awq
- 导出后可用 vLLM/AWQ 推理引擎部署。
4. 模型上传 ModelScope
swift export \--adapters output/checkpoint-100 \--push_to_hub true \--hub_model_id my-qwen-lora \--hub_token YOUR_TOKEN
- 自动合并 LoRA 并上传为新模型。
八、总结:ms-swift 的核心优势
优势 | 说明 |
---|---|
开箱即用 | CLI 命令简洁,无需写训练脚本 |
全流程覆盖 | 训练 → 推理 → 评估 → 量化 → 部署 |
生态丰富 | 支持 500+ LLMs,200+ MLLMs |
性能强大 | 支持 Megatron、vLLM、UnSloth 加速 |
灵活扩展 | 支持自定义模型、数据集、loss、callback |
中文友好 | 文档、社区、数据集均支持中文 |
九、适用人群推荐
用户类型 | 是否推荐 | 原因 |
---|---|---|
研究者 | ✅✅✅ | 支持最新算法(GRPO、DPO、ReFT) |
工程师 | ✅✅✅ | 快速部署、Web UI、API 服务 |
学生/初学者 | ✅✅ | 教程丰富,CLI 简单易上手 |
企业用户 | ✅✅✅ | 支持私有化部署、模型上传、安全合规 |
参考资料
- GitHub: https://github.com/modelscope/ms-swift
- 中文文档: https://swift.readthedocs.io/zh-cn/latest/
- 论文: https://arxiv.org/abs/2408.05517
- Web UI 演示:
swift web-ui