新手必看:ms-swift微调框架快速部署与LoRA合并教程

张开发
2026/4/30 11:39:42 15 分钟阅读

分享文章

新手必看:ms-swift微调框架快速部署与LoRA合并教程
新手必看ms-swift微调框架快速部署与LoRA合并教程1. 引言如果你正在寻找一个能轻松上手、功能强大的大模型微调工具那么ms-swift绝对是你的不二之选。想象一下你手头有一个不错的模型但想让它在特定任务上表现更好——比如让模型学会你的产品知识或者理解你的业务逻辑。传统微调方法动辄需要几十GB显存对硬件要求极高让很多开发者望而却步。ms-swift的出现彻底改变了这个局面。这个由魔搭社区推出的微调框架最大的特点就是简单易用和资源友好。它支持LoRA等轻量微调技术让你用一张消费级显卡比如RTX 3090就能完成大模型的个性化训练。更棒的是它提供了完整的训练、推理、评测、部署全链路支持从开始到落地一气呵成。在这篇教程里我会手把手带你完成两件最重要的事快速部署ms-swift环境和掌握LoRA权重合并技巧。无论你是刚接触大模型的新手还是有一定经验的开发者都能跟着步骤轻松上手。我们以Qwen2.5-7B-Instruct模型为例让你在10分钟内看到实际效果。2. 环境准备与快速安装2.1 硬件与系统要求在开始之前我们先看看需要准备什么。ms-swift对硬件的要求相当友好显卡至少8GB显存推荐12GB以上支持NVIDIA RTX系列、A10/A100/H100、T4/V100等内存建议16GB以上存储至少50GB可用空间用于存放模型和数据集系统Linux推荐Ubuntu 20.04或CentOS 7、macOS、WindowsWSL2Python3.8-3.11版本如果你用的是RTX 309024GB这样的消费级显卡完全够用。我就是在双卡RTX 4090的环境下测试的但单卡也完全没问题。2.2 三种安装方式任选其一ms-swift提供了多种安装方式你可以根据喜好选择方式一pip直接安装最推荐这是最简单快捷的方式一行命令搞定# 创建虚拟环境可选但推荐 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/swift.git cd swift # 安装开发版本 pip install -e .[llm] -i https://pypi.tuna.tsinghua.edu.cn/simple方式三Docker方式适合快速部署如果你熟悉Docker也可以用官方镜像docker pull registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope:ubuntu20.04-cuda11.8.0-py38-torch2.1.2-tf2.14.0-1.11.0安装完成后验证一下是否成功# 查看版本 swift --version # 或者运行帮助命令 swift --help如果看到版本信息和帮助文档说明安装成功了。2.3 额外依赖按需安装根据你要使用的功能可能需要安装一些额外依赖# 如果需要vLLM加速推理 pip install vllm # 如果需要LMDeploy部署 pip install lmdeploy # 如果需要使用Web-UI界面 pip install gradio这些都不是必须的你可以根据实际需求选择安装。3. 快速体验10分钟完成模型微调3.1 理解LoRA微调的核心思想在深入操作之前我们先花2分钟理解一下LoRALow-Rank Adaptation到底是什么。想象一下你要教一个已经读过很多书的大学生预训练大模型学习一门新技能你的特定任务。传统方法是让他重新学习所有知识这既费时又费力。而LoRA就像给他一本薄薄的补充教材——只学习新知识相关的部分原有知识基本不动。LoRA的三大优势显存占用少通常只需原模型1%的参数量训练速度快只训练新增的小参数效果接近全参数微调在很多任务上能达到90%以上的效果ms-swift默认就使用LoRA进行微调这对我们普通开发者太友好了。3.2 单命令启动微调现在我们来实际操练一下。用Qwen2.5-7B-Instruct模型做个自我认知微调让模型知道自己是swift-robot# 单卡3090/4090就能运行显存约22GB 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指定要微调的模型这里用Qwen2.5-7B-Instruct--train_type lora使用LoRA微调方式--dataset训练数据集这里混合了中英文指令数据和自我认知数据--lora_rank 8LoRA的秩值越小参数量越少--output_dir output输出目录训练结果会保存到这里运行这个命令后你会看到训练进度条。在RTX 3090上大约需要6-7分钟就能完成。训练完成后在output目录下会生成类似这样的检查点output/ └── vx-xxx/ └── checkpoint-xxx/ ├── adapter_model.safetensors # LoRA权重文件 ├── args.json # 训练参数 ├── README.md # 模型卡片 └── ...3.3 使用自定义数据集如果你想用自己的数据训练也很简单。首先准备数据集格式参考// train.json [ { instruction: 解释什么是人工智能, input: , output: 人工智能是... }, { instruction: 将以下英文翻译成中文, input: Hello, world!, output: 你好世界 } ]然后修改--dataset参数指向你的数据文件swift sft \ --model Qwen/Qwen2.5-7B-Instruct \ --train_type lora \ --dataset /path/to/your/train.json \ # ... 其他参数保持不变4. LoRA权重合并的两种方法训练完成后我们得到了LoRA权重文件。但这时候模型还不能直接使用需要把LoRA权重合并到原始模型中。ms-swift提供了两种合并方式都很简单。4.1 方法一推理时自动合并推荐给新手这是最简单的方式在推理时自动完成合并。适合想快速测试效果的场景。# 使用vLLM加速推理同时合并LoRA权重 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关键参数说明--adapters指定LoRA权重目录--merge_lora true启用权重合并--infer_backend vllm使用vLLM加速推理--stream true流式输出可以看到生成过程运行后你会看到合并过程[INFO:swift] Merge LoRA... [INFO:swift] Saving merged weights... [INFO:swift] Successfully merged LoRA and saved in /data/model/sft/qwen2-7b-instruct-sft/qwen2-7b-instruct/v1-20240901-141800/checkpoint-873-merged.合并后的模型会保存在checkpoint-xxx-merged目录中包含完整的模型权重。4.2 方法二单独合并权重适合生产部署如果你需要把合并后的模型部署到生产环境或者分享给他人使用建议用这种方式单独合并。# 专门执行合并操作 swift export \ --ckpt_dir /data/model/sft/qwen2-7b-instruct-sft/qwen2-7b-instruct/v1-20240901-141800/checkpoint-873 \ --merge_lora true这个命令会做三件事加载原始模型和LoRA权重将两者合并保存完整的模型到新目录合并完成后你会得到这样的目录结构checkpoint-873-merged/ ├── config.json ├── generation_config.json ├── model.safetensors ├── special_tokens_map.json ├── tokenizer.json ├── tokenizer_config.json └── ...现在这个就是完整的、可以直接使用的模型了。4.3 两种方法的对比与选择为了帮你更好地选择我整理了一个对比表格特性推理时合并单独合并使用场景快速测试、临时使用生产部署、模型分享执行速度每次推理都需要合并一次合并多次使用磁盘空间需要保留原始模型LoRA权重只需要合并后的完整模型易用性最简单一条命令搞定需要额外执行合并命令推荐给初学者、快速验证需要部署的正式项目我的建议如果你是第一次尝试用方法一快速看到效果如果效果满意需要长期使用用方法二生成完整模型团队协作时分享方法二生成的完整模型更方便5. 合并后的模型使用与验证5.1 加载合并后的模型进行推理合并完成后我们可以用多种方式使用新模型方式一使用swift直接推理# 使用合并后的完整模型 CUDA_VISIBLE_DEVICES0 \ swift infer \ --model /path/to/merged-model \ --stream true \ --max_new_tokens 2048方式二使用原生PyTorch加载如果你想在自己的代码中使用from transformers import AutoModelForCausalLM, AutoTokenizer # 加载合并后的模型 model_path /path/to/checkpoint-873-merged model AutoModelForCausalLM.from_pretrained(model_path, torch_dtypetorch.bfloat16) tokenizer AutoTokenizer.from_pretrained(model_path) # 推理 input_text 你是谁 inputs tokenizer(input_text, return_tensorspt) outputs model.generate(**inputs, max_new_tokens100) response tokenizer.decode(outputs[0], skip_special_tokensTrue) print(response)方式三使用vLLM加速服务对于生产环境推荐使用vLLM部署# 启动API服务 python -m vllm.entrypoints.openai.api_server \ --model /path/to/merged-model \ --served-model-name qwen2.5-7b-instruct-lora \ --port 8000 # 然后就可以通过OpenAI兼容的API调用了 curl http://localhost:8000/v1/completions \ -H Content-Type: application/json \ -d { model: qwen2.5-7b-instruct-lora, prompt: 你是谁, max_tokens: 100 }5.2 验证微调效果训练和合并完成后最重要的一步是验证效果。我们可以问模型几个问题# 启动交互式对话 CUDA_VISIBLE_DEVICES0 \ swift infer \ --model /path/to/merged-model \ --stream true # 然后输入问题测试 用户 你是谁 模型 我是swift-robot一个由swift开发的AI助手... 用户 你的作者是谁 模型 我的作者是swift...如果模型能正确回答我是swift-robot和作者是swift说明自我认知微调成功了。5.3 常见问题排查在实际操作中你可能会遇到一些问题。这里我总结了一些常见情况和解决方法问题1显存不足CUDA out of memory解决减小--per_device_train_batch_size比如从2改为1或者使用--gradient_checkpointing true启用梯度检查点。问题2合并时找不到模型Error: Model path does not exist解决检查--ckpt_dir路径是否正确确保目录下有adapter_model.safetensors文件。问题3推理速度慢生成很慢等待时间长解决使用--infer_backend vllm启用vLLM加速或者使用--infer_backend lmdeploy。问题4合并后的模型太大磁盘空间不足解决可以使用量化减小模型大小swift export \ --model /path/to/merged-model \ --quant_bits 4 \ --quant_method awq \ --output_dir qwen2.5-7b-instruct-awq6. 进阶技巧与最佳实践6.1 LoRA参数调优指南LoRA的效果很大程度上取决于参数设置。这里给你一些实践经验rank秩的选择rank8通用推荐平衡效果和效率rank16需要更好效果时使用参数量增加但效果提升rank4显存紧张时使用效果可能略有下降rank32追求极致效果但参数量大幅增加alpha参数alpha32通常设置为rank的2-4倍公式缩放因子 alpha / rank如果rank8alpha32那么缩放因子就是4target_modules选择all-linear作用于所有线性层效果最好但参数量最大q_proj,v_proj只作用于注意力层的Q、V投影参数量减少约一半根据任务复杂度选择简单任务用后者即可6.2 多卡训练配置如果你有多张显卡可以加速训练过程# 使用2张显卡训练 CUDA_VISIBLE_DEVICES0,1 \ NPROC_PER_NODE2 \ swift sft \ --model Qwen/Qwen2.5-7B-Instruct \ --train_type lora \ --dataset your-dataset \ --deepspeed zero2 \ # ... 其他参数或者使用Megatron并行技术获得更大加速# 使用Megatron加速 NPROC_PER_NODE2 \ CUDA_VISIBLE_DEVICES0,1 \ megatron sft \ --model Qwen/Qwen2.5-7B-Instruct \ --dataset your-dataset \ --train_type lora \ --save output \ # ... 其他参数6.3 模型推送与分享训练好的模型可以推送到ModelScope或HuggingFace方便团队共享# 推送到ModelScope swift export \ --adapters output/vx-xxx/checkpoint-xxx \ --push_to_hub true \ --hub_model_id your-username/your-model-name \ --hub_token your-token # 或者推送到HuggingFace swift export \ --adapters output/vx-xxx/checkpoint-xxx \ --push_to_hub true \ --hub_model_id your-username/your-model-name \ --hub_token your-hf-token \ --use_hf true6.4 Web-UI界面操作如果你不喜欢命令行ms-swift还提供了图形界面# 启动Web-UI swift web-ui然后在浏览器打开http://localhost:7860就可以通过界面进行训练、推理等操作了特别适合不熟悉命令行的用户。7. 总结通过这篇教程我们完整走了一遍ms-swift的微调流程。从环境安装、模型训练到LoRA权重合并再到最终的使用验证每个步骤都有详细的操作指南。关键要点回顾ms-swift安装极其简单一行pip命令就能搞定对新手非常友好LoRA微调大幅降低资源需求用消费级显卡就能训练大模型权重合并有两种方式推理时合并适合快速测试单独合并适合生产部署整个流程自动化程度高大部分工作ms-swift都帮你处理好了丰富的进阶功能支持多卡训练、量化、Web-UI等满足不同需求给新手的建议第一次尝试时先用官方示例跑通整个流程理解每个参数的作用不要盲目复制命令训练前先用小批量数据测试确认没问题再全量训练合并后的模型一定要验证效果确保微调成功ms-swift的强大之处在于它把复杂的大模型微调变得如此简单。无论你是想做个智能客服、内容生成助手还是专业领域的问答系统都可以用这个框架快速实现。现在就去试试吧让你的大模型真正为你所用获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章