当前位置: 首页 > news >正文

ms-swift微调框架实战:10分钟搞定Qwen2.5-7B模型LoRA微调与合并

ms-swift微调框架实战:10分钟搞定Qwen2.5-7B模型LoRA微调与合并

1. 前言

在当今大模型技术快速发展的背景下,如何高效地对大型语言模型进行微调成为了许多开发者和研究者的关注焦点。本文将介绍如何使用ms-swift框架,在单卡环境下快速完成Qwen2.5-7B模型的LoRA微调与权重合并。

ms-swift是魔搭社区提供的大模型微调部署框架,支持600+纯文本大模型和300+多模态大模型的训练、推理、评测、量化与部署全流程。通过本文的实战指南,您将掌握:

  • 使用ms-swift进行LoRA微调的基本流程
  • 微调后模型的权重合并方法
  • 实际部署和推理的技巧

2. 环境准备

2.1 硬件要求

  • GPU: NVIDIA Tesla V100 32GB或同等性能显卡
  • 显存: 至少22GB可用显存
  • CUDA版本: 12.2或更高

2.2 软件安装

首先创建并激活conda环境:

conda create --name swift python=3.10 conda activate swift

然后安装ms-swift框架:

pip install 'ms-swift[all]' -U -i https://pypi.tuna.tsinghua.edu.cn/simple

2.3 模型下载

从ModelScope或Hugging Face下载Qwen2.5-7B-Instruct模型:

# ModelScope下载 git clone https://www.modelscope.cn/qwen/Qwen2.5-7B-Instruct.git # 或Hugging Face下载 git lfs install git clone https://huggingface.co/Qwen/Qwen2.5-7B-Instruct

3. LoRA微调实战

3.1 微调命令

使用以下命令启动LoRA微调:

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' \ --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

3.2 参数说明

  • --model: 指定基础模型路径
  • --train_type lora: 使用LoRA微调方法
  • --dataset: 使用的训练数据集
  • --lora_rank--lora_alpha: LoRA相关参数
  • --target_modules all-linear: 对所有线性层应用LoRA
  • --gradient_accumulation_steps 16: 梯度累积步数,有效增大batch size

3.3 微调过程监控

微调过程中会输出类似以下日志:

Train: 100%|██████████| 873/873 [09:34<00:00, 1.69it/s] {'eval_loss': nan, 'eval_acc': 0.023, 'eval_runtime': 1.64, 'epoch': 0.92}

训练完成后,模型权重会保存在output目录下。

4. 模型权重合并

4.1 推理时合并

在推理时直接合并LoRA权重:

CUDA_VISIBLE_DEVICES=0 \ swift infer \ --ckpt_dir output/vx-xxx/checkpoint-xxx \ --merge_lora true \ --infer_backend vllm \ --max_model_len 8192

此方法会在内存中合并权重,不会保存合并后的模型。

4.2 单独合并并保存

如果需要保存合并后的模型,使用export命令:

swift export \ --ckpt_dir output/vx-xxx/checkpoint-xxx \ --merge_lora true

合并后的模型会保存在checkpoint-xxx-merged目录中。

4.3 合并过程解析

合并过程主要完成以下工作:

  1. 加载基础模型和LoRA适配器权重
  2. 将LoRA权重合并到基础模型中
  3. 保存合并后的完整模型

合并后的模型目录包含:

  • config.json: 模型配置文件
  • model.safetensors: 合并后的模型权重
  • generation_config.json: 生成配置

5. 模型部署与推理

5.1 使用vLLM加速推理

安装vLLM依赖:

pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple

启动推理服务:

CUDA_VISIBLE_DEVICES=0 \ swift deploy \ --model output/vx-xxx/checkpoint-xxx-merged \ --infer_backend vllm

5.2 Web界面交互

启动Web UI:

swift web-ui \ --model output/vx-xxx/checkpoint-xxx-merged

5.3 Python API调用

from swift.llm import PtEngine engine = PtEngine(model_id_or_path="output/vx-xxx/checkpoint-xxx-merged") response = engine.chat("你好,你是谁?") print(response)

6. 总结

通过本文的实战指南,我们完成了:

  1. 使用ms-swift框架对Qwen2.5-7B模型进行LoRA微调
  2. 将微调后的LoRA权重与基础模型合并
  3. 部署合并后的模型并进行推理

ms-swift框架的优势在于:

  • 支持多种微调方法(LoRA/QLoRA/DoRA等)
  • 提供从训练到部署的全流程支持
  • 优化显存使用,单卡即可完成7B模型微调
  • 支持多种推理后端(vLLM/LMDeploy等)

对于想要尝试大模型微调的开发者,ms-swift提供了简单高效的解决方案,大大降低了技术门槛。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

http://www.jsqmd.com/news/664228/

相关文章:

  • 如何彻底解决AutoCAD字体缺失问题:FontCenter字体管理插件终极指南
  • 三步实现百度网盘Mac版免费高速下载:告别龟速的终极指南
  • 智能生成代码的“遗传缺陷”大起底:基于17万行LLM生成代码的演化熵值分析,立即自查你的CI流水线!
  • 用嘎嘎降AI处理后如何与导师确认修改:验收流程完整教程
  • Uni-App开发者必看:隐私政策弹窗别再自己写了!用官方方案轻松过审华为、小米应用市场
  • 免费vs付费降AI率工具排行大PK,结果出乎意料
  • AI编程革命:告别重复造轮子
  • Wan2.2-I2V-A14B问题解决:显存不足优化技巧与参数调整
  • 告别IPv4地址焦虑:手把手教你用Ubuntu搭建DHCPv6服务器(附完整配置文件)
  • 别只调API!深入理解ESP32 BLE安全的三个阶段:配对、绑定与加密到底在干啥?
  • “回滚建议不是可选项——是生存线”:奇点大会联合IEEE发布的首份《AI原生开发回滚建议强制实施框架(v1.0)》深度解读
  • BilibiliUploader:Python自动化B站视频投稿终极指南
  • JetBrains IDE试用期重置终极指南:告别评估到期烦恼 [特殊字符]
  • 从HashMap到ConcurrentHashMap:深入理解Java 8 computeIfAbsent的线程安全陷阱与最佳实践
  • 从按键到启动:Rockchip RK3588双系统切换的硬件与软件协同设计
  • 无需代码!用LongCat-Image-Edit V2快速制作节日海报
  • 避坑指南:MaixPy K210模型从训练到部署,我踩过的那些‘坑’(数据集、烧录、运行)
  • SpringBoot 整合 MinIO:分布式文件存储上传下载
  • AI代码翻译已突破92.7%语义保真度:2026奇点大会披露LLM+符号推理双引擎架构
  • RexUniNLU中文NLP分析系统实战:电商评论情感分析全流程解析
  • SQL视图能否用于数据仓库模型_雪花模型与视图构建
  • WSL Ubuntu 24.04 GPU 加速环境完整安装指南
  • Pandas 中使用交叉表为分类列生成计数型宽表结构
  • CVPR 2024最佳学生论文Mip-Splatting保姆级环境配置(避坑NumPy版本冲突)
  • ARM Watchdog模块寄存器与测试机制解析
  • 【代码健康度红皮书】:用AST+规则引擎实现毫秒级异味拦截,已验证提升CI通过率47%
  • 如何免费绕过iOS 15-16激活锁:applera1n完整指南
  • Layui弹出层layer.tab如何监听标签页切换的具体序号
  • STM32F407的USART DMA+空闲中断接收HC-05数据,这样写代码更稳定(附手机蓝牙助手通信协议解析)
  • 完整解锁ComfyUI-Impact-Pack图像增强功能的终极指南