小白也能学会!ms-swift一键微调Qwen2-7B全流程
1. 引言:为什么选择 ms-swift 进行大模型微调?
在当前大模型快速发展的背景下,如何高效、低成本地对大型语言模型进行微调成为开发者关注的核心问题。传统全参数微调方式资源消耗巨大,而参数高效微调(PEFT)技术如 LoRA 的出现极大降低了训练门槛。然而,从环境配置、数据准备到训练部署的完整链路仍存在诸多工程挑战。
ms-swift是魔搭社区推出的一站式大模型微调与部署框架,支持超过600+ 纯文本模型和300+ 多模态模型的训练、推理、评测、量化与部署。其核心优势在于:
- ✅极简命令行接口:一行命令即可完成微调、推理、合并与导出
- ✅广泛的硬件兼容性:支持 A10/A100/H100、RTX 系列、T4/V100、CPU、MPS 及国产 Ascend NPU
- ✅轻量级微调支持:内置 LoRA、QLoRA、DoRA 等主流 PEFT 方法,7B 模型仅需 9GB 显存即可训练
- ✅全流程覆盖:从训练 → 推理 → 量化 → 部署提供端到端解决方案
- ✅Web UI 支持:无需代码基础,通过图形界面完成全部操作
本文将以Qwen2-7B-Instruct模型为例,手把手带你使用ms-swift完成从环境搭建、LoRA 微调、权重合并到推理部署的完整流程,即使是初学者也能轻松上手。
2. 环境准备与依赖安装
2.1 硬件与系统要求
推荐配置如下:
| 组件 | 推荐配置 |
|---|---|
| GPU | NVIDIA A10 / A100 / 3090 / V100(至少 24GB 显存) |
| CPU | 8 核以上 |
| 内存 | ≥32GB |
| 存储 | ≥100GB SSD(用于缓存模型和数据集) |
| 操作系统 | Ubuntu 20.04 / CentOS 7 / macOS(M系列芯片) |
💡 提示:若显存不足 24GB,可使用 QLoRA + 4-bit 量化进一步降低资源占用。
2.2 创建 Conda 虚拟环境
# 创建 Python 3.10 环境 conda create -n swift python=3.10 -y conda activate swift2.3 安装 ms-swift 框架
推荐使用 pip 安装官方发布的最新版本:
pip install 'ms-swift[all]' -U -i https://pypi.tuna.tsinghua.edu.cn/simple📌 注意:
[all]表示安装所有可选依赖(包括 vLLM、LMDeploy、deepspeed 等),若只需基础功能可替换为[llm]。
验证是否安装成功:
swift --help如果输出帮助信息,则说明安装成功。
3. 使用 ms-swift 微调 Qwen2-7B-Instruct
我们将使用 LoRA 对Qwen2-7B-Instruct模型进行指令微调,目标是让模型具备“自我认知”能力(即能正确回答关于自身身份的问题)。
3.1 启动 LoRA 微调任务
执行以下命令开始训练:
CUDA_VISIBLE_DEVICES=0 \ swift sft \ --model Qwen/Qwen2-7B-Instruct \ --train_type lora \ --dataset 'AI-ModelScope/alpaca-gpt4-data-zh#500' \ 'AI-ModelScope/alpaca-gpt4-data-en#500' \ 'swift/self-cognition#500' \ --torch_dtype bfloat16 \ --num_train_epochs 1 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --learning_rate 1e-4 \ --lora_rank 8 \ --lora_alpha 32 \ --target_modules all-linear \ --gradient_accumulation_steps 16 \ --eval_steps 50 \ --save_steps 50 \ --save_total_limit 2 \ --logging_steps 5 \ --max_length 2048 \ --output_dir output \ --system 'You are a helpful assistant.' \ --warmup_ratio 0.05 \ --dataloader_num_workers 4 \ --model_author swift \ --model_name swift-robot3.2 关键参数解析
| 参数 | 说明 |
|---|---|
--model | 指定预训练模型 ID,支持 ModelScope 或 Hugging Face 路径 |
--train_type lora | 使用 LoRA 进行参数高效微调 |
--dataset | 指定多个数据集并采样数量(#500表示每个数据集取 500 条) |
--lora_rank,--lora_alpha | LoRA 的秩和缩放系数,控制微调强度 |
--target_modules all-linear | 将所有线性层纳入 LoRA 微调范围 |
--gradient_accumulation_steps 16 | 累积梯度以模拟更大 batch size |
--output_dir output | 训练结果保存路径 |
--model_author,--model_name | 仅当包含swift/self-cognition数据集时生效,用于定义模型人设 |
3.3 训练过程监控
训练过程中会输出类似以下日志:
Train: 100%|██████████| 873/873 [09:34<00:00, 1.69it/s] {'eval_loss': nan, 'eval_acc': 0.0232, 'epoch': 0.92, 'global_step/max_steps': '800/873'} [INFO:swift] Saving model checkpoint to output/checkpoint-873 ... {'train_loss': 0.0, 'epoch': 1.0, 'global_step/max_steps': '873/873'}训练完成后,模型权重将保存在output/目录下,结构如下:
output/ ├── checkpoint-873/ # 第873步的检查点 │ ├── adapter_config.json # LoRA 配置文件 │ ├── adapter_model.bin # LoRA 权重 │ └── args.json # 训练参数快照 └── last_checkpoint # 指向最后一个检查点4. 模型推理与交互测试
训练结束后,我们可以通过swift infer命令加载 LoRA 权重进行推理。
4.1 加载 LoRA 权重进行推理
CUDA_VISIBLE_DEVICES=0 \ swift infer \ --adapters output/checkpoint-873 \ --stream true \ --temperature 0 \ --max_new_tokens 2048🔍 说明:
--adapters指向训练生成的 LoRA 检查点目录,swift会自动读取其中的args.json恢复模型配置。
启动后进入交互模式:
User: 你是谁? Assistant: 我是 swift-robot,由 swift 团队微调的 Qwen2-7B-Instruct 模型。可以看到模型已具备“自我认知”能力。
4.2 使用 vLLM 加速推理(推荐)
为了提升推理速度,可以启用vLLM引擎并合并 LoRA 权重:
# 先安装 vLLM pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple # 使用 vLLM + 合并 LoRA 推理 CUDA_VISIBLE_DEVICES=0 \ swift infer \ --adapters output/checkpoint-873 \ --merge_lora true \ --infer_backend vllm \ --vllm_max_model_len 8192 \ --stream true \ --temperature 0 \ --max_new_tokens 2048⚡ 效果:vLLM 可显著提升吞吐量(TPS),尤其适合高并发场景。
5. 模型权重合并与导出
若需将 LoRA 权重合并到原始模型中,以便独立部署或上传至 ModelScope,可使用swift export命令。
5.1 单独执行权重合并
swift export \ --ckpt_dir output/checkpoint-873 \ --merge_lora true \ --merge_device_map auto \ --save_safetensors true该命令会:
- 加载原始 Qwen2-7B-Instruct 模型
- 注入 LoRA 权重并合并
- 保存为标准格式模型(默认路径为
checkpoint-873-merged)
合并完成后,得到一个完整的、无需额外依赖 LoRA 的模型目录:
checkpoint-873-merged/ ├── config.json ├── model.safetensors ├── tokenizer.json ├── generation_config.json └── ...5.2 推送模型至 ModelScope
将合并后的模型推送到 ModelScope 平台共享:
swift export \ --ckpt_dir output/checkpoint-873 \ --merge_lora true \ --push_to_hub true \ --hub_model_id your-username/qwen2-7b-instruct-swift \ --hub_token YOUR_HUB_TOKEN \ --use_hf false🔐 注意:
hub_token可在 ModelScope 个人设置 中获取。
6. Web UI 图形化操作(零代码入门)
对于不熟悉命令行的用户,ms-swift 提供了基于 Gradio 的 Web UI 界面,实现“零代码”微调与部署。
6.1 启动 Web UI 服务
swift web-ui启动后访问http://localhost:7860打开界面:
6.2 功能概览
Web UI 支持以下功能:
- 🧪模型选择:下拉菜单选择 Qwen、Llama、InternLM 等主流模型
- 📊数据集管理:上传本地数据集或选择内置数据集
- ⚙️训练配置:可视化设置 LoRA rank、batch size、学习率等超参
- ▶️一键训练:点击按钮启动训练任务
- 💬在线推理:实时测试模型输出
- 📦模型导出:图形化完成合并与推送
非常适合教学演示、快速原型验证等场景。
7. 总结
本文详细介绍了如何使用ms-swift框架完成 Qwen2-7B-Instruct 模型的全流程微调实践,涵盖环境搭建、LoRA 微调、推理测试、权重合并与部署发布等关键环节。
核心收获
- 极简命令行 API:
swift sft/infer/export三大命令覆盖主要场景 - 低门槛微调方案:LoRA 技术使 7B 级模型可在单卡上高效训练
- 灵活的推理策略:支持原生 PyTorch、vLLM、LMDeploy 多种后端
- 完整的生产闭环:从训练到部署一体化支持,便于模型落地
- Web UI 友好体验:非技术人员也可参与模型定制
下一步建议
- 尝试使用自定义数据集进行领域适配(参考 自定义数据集文档)
- 探索 QLoRA + 4-bit 量化进一步降低显存需求
- 使用
swift eval对微调前后模型进行性能对比评测 - 结合 vLLM 或 LMDeploy 实现高并发 API 服务部署
ms-swift 正在持续迭代中,未来将支持更多先进训练技术(如 GRPO、MoE 并行等),值得长期关注。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。