ms-swift微调框架实战:10分钟在单卡3090上微调Qwen2.5-7B,新手也能快速上手

张开发
2026/4/5 10:47:04 15 分钟阅读

分享文章

ms-swift微调框架实战:10分钟在单卡3090上微调Qwen2.5-7B,新手也能快速上手
ms-swift微调框架实战10分钟在单卡3090上微调Qwen2.5-7B新手也能快速上手想给大模型“教点新东西”让它更懂你的业务但又担心门槛太高、成本太大今天我来带你体验一个“傻瓜式”的微调方案。只用一张消费级显卡比如RTX 3090花10分钟左右的时间就能让Qwen2.5-7B-Instruct模型学会新的知识或技能。整个过程就像搭积木一样简单不需要你懂复杂的分布式训练也不需要你写大段代码。这个神奇的工具就是ms-swift一个由魔搭社区推出的轻量级大模型微调框架。它把那些复杂的训练流程都打包好了你只需要准备数据、敲几行命令就能开始训练。1. 为什么选择ms-swift在开始动手之前我们先看看ms-swift到底有什么过人之处能让我们如此轻松地微调大模型。1.1 对新手极度友好如果你之前尝试过微调大模型可能会被各种环境配置、参数调整、显存不足等问题劝退。ms-swift的设计理念就是“开箱即用”它帮你解决了几个核心痛点一键安装一条pip命令就能装好所有依赖不用折腾各种版本兼容问题。命令行驱动大部分操作通过简单的命令行参数就能完成不需要写复杂的Python脚本。自动适配框架会自动检测你的硬件配置选择合适的训练策略比如用LoRA还是全参数微调。内置数据集提供了150多个预置数据集覆盖各种任务场景直接就能用。1.2 硬件要求亲民很多大模型微调教程动不动就要A100、H100让个人开发者望而却步。ms-swift对硬件的要求非常友好单卡就能跑像Qwen2.5-7B这样的模型用一张24GB显存的RTX 3090就能微调。支持多种硬件除了NVIDIA显卡还支持CPU、MPS苹果芯片甚至国产的Ascend NPU。显存优化到位集成了GaLore、Flash-Attention等显存优化技术让训练更省资源。1.3 功能全面强大别看它简单易用ms-swift的功能可一点都不弱支持600模型从Qwen、ChatGLM到Llama、Mistral主流模型基本都支持。多种训练方式除了基础的指令微调还支持预训练、强化学习DPO、KTO等、Embedding训练等。全链路支持从训练、推理到评测、部署一条龙服务。Web界面如果你不喜欢命令行它还提供了图形化界面点点鼠标就能训练模型。2. 环境准备5分钟搞定好了理论说再多不如动手试试。我们先来搭建环境整个过程大概5分钟就能完成。2.1 基础环境检查首先确认你的机器满足以下条件操作系统Linux推荐Ubuntu 20.04或macOSWindows用户可以用WSL。Python版本Python 3.8-3.11推荐3.10。CUDA版本11.8或12.1根据你的显卡驱动选择。显存至少24GBRTX 3090/4090或同级别显卡。检查你的CUDA是否可用nvidia-smi python -c import torch; print(torch.cuda.is_available())2.2 安装ms-swift安装ms-swift非常简单推荐使用conda创建独立环境# 创建并激活conda环境 conda create -n swift python3.10 conda activate swift # 安装ms-swift包含所有功能 pip install ms-swift[all] -U -i https://pypi.tuna.tsinghua.edu.cn/simple如果你遇到网络问题也可以从源码安装git clone https://github.com/modelscope/ms-swift.git cd ms-swift pip install -e .[llm] -i https://pypi.tuna.tsinghua.edu.cn/simple注意ms-swift依赖torch1.13推荐使用torch2.0.0。安装时会自动处理这些依赖。2.3 准备模型和数据ms-swift支持从ModelScope或HuggingFace下载模型。我们以Qwen2.5-7B-Instruct为例# 从ModelScope下载国内推荐 git clone https://www.modelscope.cn/qwen/Qwen2.5-7B-Instruct.git # 或者从HuggingFace下载 # git clone https://huggingface.co/Qwen/Qwen2.5-7B-Instruct对于数据ms-swift内置了很多数据集我们这次用它的自我认知数据集做演示。如果你想用自己的数据格式也很简单[ { conversations: [ { from: human, value: 你是谁 }, { from: gpt, value: 我是小蜜一个由ms-swift微调的AI助手。 } ], system: 你是一个有用的助手。 } ]3. 实战10分钟微调Qwen2.5-7B环境准备好了现在进入最激动人心的部分——实际微调。我会带你一步步操作确保你能成功运行。3.1 最简单的微调命令打开终端进入你的工作目录然后运行下面这条命令CUDA_VISIBLE_DEVICES0 \ 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 \ --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-robot让我解释一下这些参数都是干什么的--model Qwen/Qwen2.5-7B-Instruct指定要微调的模型--train_type lora使用LoRA微调这是目前最流行的轻量微调方法--dataset指定训练数据集这里用了三个数据集每个取500条样本--torch_dtype bfloat16使用bfloat16精度节省显存--gradient_accumulation_steps 16梯度累积步数相当于batch_size16--output_dir output训练结果保存到output目录3.2 训练过程监控命令运行后你会看到类似这样的输出[INFO:swift] Dataset Token Length: 623.427262±104.695225, min387.000000, max1866.000000, size873 Train: 0%| | 0/873 [00:00?, ?it/s] Train: 11%|█▏ | 100/873 [00:4705:43, 2.25it/s] {loss: 1.50913131, acc: 0.60340315, grad_norm: 1.11961412, learning_rate: 1.9e-07, memory(GiB): 18.21, train_speed(iter/s): 0.482103, epoch: 0.0}这里有几个关键信息需要关注loss损失值训练损失一般会逐渐下降稳定在较低水平就说明训练有效acc准确率训练准确率会逐渐上升memory(GiB)显存使用量RTX 3090上大概在18-30GB之间train_speed(iter/s)训练速度每秒处理的样本数在RTX 3090上整个训练过程大概需要7-10分钟。你可以泡杯咖啡回来就看到训练完成了。3.3 训练结果解读训练完成后output目录下会生成检查点文件output/ ├── checkpoint-100/ │ ├── adapter_model.bin │ ├── args.json │ └── ... ├── checkpoint-200/ ├── ... └── checkpoint-873/ # 最后一个检查点每个检查点包含adapter_model.binLoRA权重文件只有几十MBargs.json训练参数配置其他训练状态文件小贴士训练过程中loss值会波动下降acc会波动上升这都是正常现象。只要整体趋势是loss下降、acc上升就说明训练有效。4. 测试微调效果模型训练好了我们来看看效果如何。ms-swift提供了几种测试方式。4.1 命令行交互测试用训练好的LoRA权重进行推理# 使用交互式命令行进行推理 CUDA_VISIBLE_DEVICES0 \ swift infer \ --adapters output/vx-xxx/checkpoint-xxx \ --stream true \ --temperature 0 \ --max_new_tokens 2048这里的--adapters需要替换成你实际生成的checkpoint路径。运行后会进入交互模式请输入内容 (输入exit退出, 输入clear清空历史): 你是谁 我是小蜜一个由ms-swift微调的AI助手。4.2 合并LoRA权重并加速推理如果你想获得更快的推理速度可以合并LoRA权重到原模型# merge-lora并使用vLLM进行推理加速 CUDA_VISIBLE_DEVICES0 \ 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使用vLLM后端后推理速度会有明显提升特别适合批量处理。4.3 效果对比为了直观感受微调效果我们对比一下微调前后的回答问题微调前原模型微调后我们的模型你是谁我是通义千问由阿里云开发的大语言模型...我是小蜜一个由ms-swift微调的AI助手。你和模型什么关系我就是这个模型本身...其实我也不是无所不知但如果能和你多聊几句我情愿绞尽脑汁。可以看到微调后的模型已经学会了我们期望的“人设”和回答风格。5. 进阶技巧与问题解决掌握了基础用法后我们来看看一些实用技巧和常见问题的解决方法。5.1 使用自定义数据集如果你想用自己的数据微调只需要准备符合格式的数据集[ { conversations: [ {from: human, value: 用户问题}, {from: gpt, value: 期望回答} ], system: 系统提示可选 } ]然后创建一个数据集描述文件custom_dataset_info.json{ my_dataset: { dataset_path: /path/to/your/data.json } }训练时指定你的数据集swift sft \ --model Qwen/Qwen2.5-7B-Instruct \ --dataset my_dataset \ --custom_dataset_info /path/to/custom_dataset_info.json \ ... # 其他参数5.2 调整关键参数根据你的硬件和数据可能需要调整这些参数batch_size相关--per_device_train_batch_size 2 # 增大batch size加快训练 --gradient_accumulation_steps 8 # 减小累积步数学习率相关--learning_rate 2e-4 # 增大学习率收敛更快 --warmup_ratio 0.1 # 增加warmup比例LoRA配置--lora_rank 16 # 增大rank增强微调能力 --lora_alpha 64 # 增大alpha --lora_dropout 0.1 # 添加dropout防止过拟合5.3 常见问题解决问题1显存不足如果遇到OOM内存不足错误可以尝试# 使用QLoRA4bit量化 --train_type qlora # 使用更小的batch size --per_device_train_batch_size 1 --gradient_accumulation_steps 32 # 启用梯度检查点 --gradient_checkpointing true问题2训练速度慢# 使用flash attention加速 --use_flash_attn true # 增加数据加载线程 --dataloader_num_workers 8 # 使用bf16混合精度如果显卡支持 --bf16 true问题3RTX 4000系列显卡报错如果使用RTX 4090等40系显卡可能会遇到NCCL通信问题# 在训练前设置环境变量 export NCCL_IB_DISABLE1 export NCCL_P2P_DISABLE1 # 或者直接写在命令前 NCCL_IB_DISABLE1 NCCL_P2P_DISABLE1 swift sft ...6. 更多实用功能ms-swift不仅仅能做基础微调还有很多高级功能值得探索。6.1 Web界面训练如果你不喜欢命令行ms-swift还提供了Web界面swift web-ui --host 0.0.0.0 --port 7860然后在浏览器打开http://localhost:7860就能看到图形化界面。你可以在这里选择模型和数据集配置训练参数监控训练进度在线测试模型效果6.2 模型部署与分享训练完成后你可以把模型分享给其他人# 推送到ModelScope swift export \ --adapters output/vx-xxx/checkpoint-xxx \ --push_to_hub true \ --hub_model_id your-username/your-model-name \ --hub_token your-token6.3 其他训练任务除了指令微调ms-swift还支持强化学习DPO、KTO、PPO等预训练继续训练基础模型多模态训练图文、视频模型Embedding训练生成文本向量比如用DPO进行偏好对齐swift rlhf \ --rlhf_type dpo \ --model Qwen/Qwen2.5-7B-Instruct \ --dataset your-preference-data \ --train_type lora \ --output_dir dpo_output7. 总结通过今天的实战你应该已经掌握了用ms-swift微调大模型的基本流程。我们来回顾一下关键点ms-swift的核心优势简单易用命令行驱动参数清晰新手友好资源友好单卡3090就能跑7B模型显存优化到位功能全面支持多种训练任务和模型类型生态丰富内置大量数据集社区活跃给新手的建议从小开始先用小数据集、少轮次测试确认流程没问题监控显存训练时用nvidia-smi监控显存使用避免OOM保存检查点多保存几个检查点方便回滚和选择最佳模型测试验证训练后一定要测试确保模型学到了你想要的东西下一步可以尝试用你自己的业务数据微调尝试不同的LoRA配置rank、alpha等探索其他训练任务比如DPO偏好对齐使用Web界面体验更直观的训练过程大模型微调并没有想象中那么难。有了ms-swift这样的工具个人开发者、小团队也能轻松定制自己的AI模型。关键是动手尝试在实践中学习。希望这篇教程能帮你迈出大模型微调的第一步。如果在实践中遇到问题ms-swift的GitHub仓库和文档都有详细的说明和社区支持。祝你训练顺利获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章