TellWorldAI 世界档案
问档案English

首页›实践›实践

实践

ms-swift 微调大模型快速上手

ms-swift 微调框架快速上手:十分钟单卡完成自我认知微调,LoRA 参数逐条拆解,从推理验证到 merge-lora 加速再到推送到 ModelScope。

微调框架的选择标准很简单:模型覆盖够不够广、显存门槛够不够低、从训练到部署链路够不够完整。ms-swift 是魔搭社区给出的一份答卷——支持 600+ 纯文本大模型与 400+ 多模态大模型的训练、推理、评测、量化与部署,热门模型 Day0 支持 [1]。这篇以官方最经典的例子开路:10 分钟、单卡 RTX 3090,给 Qwen3-4B-Instruct-2507 做自我认知微调 [1]。

能力全景

先看这个框架到底覆盖多少东西 [1]。训练侧:轻量微调方式有 LoRA、QLoRA、DoRA、LoRA+、LLaMAPro、LongLoRA、LoRA-GA、ReFT、RS-LoRA、Adapter、LISA 一整排;偏好学习任务有 DPO、KTO、RM、CPO、SimPO、ORPO;还有 Embedding、Reranker 和序列分类任务。强化学习侧内置了丰富的 GRPO 族算法——GRPO、DAPO、GSPO、SAPO、CISPO、CHORD、RLOO、Reinforce++,配同步和异步 vLLM 引擎做推理加速,奖励函数、多轮调度器、环境都能用插件扩展 [1]。

规模化训练有两条路:一条是常规分布式——DDP、device_map 简易模型并行、DeepSpeed ZeRO2/ZeRO3、FSDP/FSDP2;另一条是 Megatron 并行——TP/PP/SP/CP/ETP/EP/VPP 策略,对 MoE 模型训练提速明显,支持 300+ 文本模型和 100+ 多模态模型的全参和 LoRA 训练 [1]。显存优化工具箱里放着 GaLore、Q-GaLore、UnSloth、Liger-Kernel、Flash-Attention 2/3 和 Ulysses、Ring-Attention 序列并行,长文本训练的显存占用压得下来 [1]。

硬件覆盖也算得上宽:NVIDIA 全系(CUDA)、AMD(ROCm)、华为昇腾 NPU、摩尔线程 MetaX GPU、Apple MPS 乃至纯 CPU 都能跑 [1]。量化模型直接训练支持 BNB、AWQ、GPTQ、AQLM、HQQ、EETQ 六种格式,7B 模型 9GB 资源就能训 [1]。多模态侧还有 packing 技术把训练速度提升 100% 以上,文本、图像、视频、语音混合数据,vit/aligner/llm 三个组件可单独控制 [1]。

数据集免自备:内置 150+ 预训练、微调、对齐、多模态各类数据集,自定义数据集按文档格式组织后 --dataset 传路径即可 [1]。训练之外的全链路同样齐备:推理加速有 Transformers、vLLM、SGLang、LmDeploy 四个引擎和 OpenAI 接口;评测以 EvalScope 为后端、100+ 数据集;量化导出 AWQ、GPTQ、FP8、BNB 四种格式,导出的模型直接接 vLLM/SGLang/LmDeploy 推理 [1]。不想碰命令行还有 Web-UI 把全流程包起来 [1]。

十分钟自我认知微调

自我认知微调是最能直观验证训练效果的任务:让模型知道「我是谁」。官方示例给 Qwen3-4B-Instruct-2507 换上自定义身份,单卡 3090、约 13GB 显存、十分钟量级 [1]:

# 13GB
CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model Qwen/Qwen3-4B-Instruct-2507 \
    --tuner_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 \
    --warmup_ratio 0.05 \
    --dataloader_num_workers 4 \
    --model_author swift \
    --model_name swift-robot

数据集混排的设计值得注意:中英文各 500 条通用指令数据打底,self-cognition 数据 500 条负责注入身份——纯身份数据训出来的模型容易「只会自我介绍」,通用能力垫底数据是防止灾难性遗忘的常规手段 [1]。几个小贴士:--model_author 和 --model_name 只有在数据集包含 swift/self-cognition 时才生效;换模型只改 --model 参数;下载默认走 ModelScope,--use_hf true 切到 HuggingFace [1]。

训练参数逐条看

这组参数就是一份 LoRA 微调的基线模板,值得逐条理解 [1]。tuner_type lora 配 rank 8、alpha 32,target_modules all-linear 把所有线性层纳入训练——rank 8 是小预算,alpha/rank 比例 4 倍给了适配器足够的缩放空间。学习率 1e-4 对 LoRA 来说偏常规,比全参微调高一个量级是常态。batch size 1 加梯度累积 16,等效 batch 16,单卡小显存的标准玩法。num_train_epochs 1 对自我认知这类注入型任务足够,多了反而过拟合。save_steps 50 配 save_total_limit 2,磁盘上永远只留最近两个检查点;max_length 2048 限制序列长度,直接决定显存占用 [1]。

推理验证与部署

训练完成后用 swift infer 验证效果,--adapters 指向训练产出的 last checkpoint 文件夹 [1]:

# 使用交互式命令行进行推理
CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --adapters output/vx-xxx/checkpoint-xxx \
    --stream true \
    --temperature 0 \
    --max_new_tokens 2048

这里有个省心的设计:adapters 文件夹里带着训练参数文件 args.json,--model、--system 都会自动读取,不用重复指定;要关掉这个行为设 --load_args false [1]。temperature 0 是验证任务的正确姿势——要的是确定性输出,问一句「你是谁」就能看出微调是否生效 [1]。

要上生产,先 merge_lora 把适配器合并进基座权重,再换 vLLM 推理后端提速 [1]:

# merge-lora并使用vLLM进行推理加速
CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --adapters output/vx-xxx/checkpoint-xxx \
    --stream true \
    --merge_lora true \
    --infer_backend vllm \
    --vllm_max_model_len 8192 \
    --temperature 0 \
    --max_new_tokens 2048

合并后推理不再有 LoRA 的额外计算开销,vLLM 后端把吞吐拉起来,vllm_max_model_len 8192 给上下文留出余量 [1]。

最后一步,把成果推送到 ModelScope 仓库 [1]:

CUDA_VISIBLE_DEVICES=0 \
swift export \
    --adapters output/vx-xxx/checkpoint-xxx \
    --push_to_hub true \
    --hub_model_id '<your-model-id>' \
    --hub_token '<your-sdk-token>' \
    --use_hf false

训练、验证、部署、发布四步走完,整条链路没有离开过 swift 命令行 [1]。这条十分钟的示例跑通之后,换数据集、换模型、换训练任务都只是改参数的事——框架的价值就在这里:把微调从「写训练脚本」变成「调命令行参数」。

本文改编自 ModelScope ms-swift 文档的快速开始一节[1],原文以 Apache-2.0 许可证发布。

来源

  1. 1
    快速开始 | ms-swift docsModelScope ms-swift docs (Apache-2.0)

引用本页: ms-swift 微调大模型快速上手. TellWorld, https://www.tellworld.net/zh/practice/practice-ms-swift-quickstart. 更新于 2026-11-14

相关动态