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

ms-swift实战:从微调到合并,一站式搞定大模型训练

ms-swift实战:从微调到合并,一站式搞定大模型训练

1. 引言

在人工智能领域,大模型训练一直是技术门槛较高的任务。传统的大模型微调方法往往需要大量计算资源和复杂的配置过程,让许多开发者和研究者望而却步。ms-swift框架的出现,彻底改变了这一局面。

ms-swift是魔搭社区提供的大模型与多模态大模型微调部署框架,支持600+纯文本大模型与300+多模态大模型的训练、推理、评测、量化与部署全流程。本文将带您从零开始,使用ms-swift完成Qwen2-7B-Instruct模型的微调与合并全过程。

2. 环境准备与快速部署

2.1 基础环境配置

在开始之前,我们需要准备以下环境:

  • 操作系统:推荐使用Linux系统(如CentOS 7)
  • GPU硬件:至少一张NVIDIA RTX 3090(24GB显存)或更高配置
  • CUDA版本:12.2或更高

2.2 安装ms-swift

ms-swift提供两种安装方式:

命令行安装(推荐)

conda create --name swift python=3.10 conda activate 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

2.3 下载模型

我们需要下载Qwen2-7B-Instruct模型,可以通过以下两种方式:

从ModelScope下载

git clone https://www.modelscope.cn/qwen/Qwen2-7B-Instruct.git

从Hugging Face下载

git lfs install git clone https://huggingface.co/Qwen/Qwen2-7B-Instruct

3. 模型微调实战

3.1 LoRA微调简介

LoRA(Low-Rank Adaptation)是一种高效的微调技术,它通过引入低秩矩阵来调整模型权重,而不是直接修改原始参数。这种方法显著减少了需要训练的参数数量,同时保持了模型性能。

3.2 单卡微调命令

使用以下命令在单卡3090上对Qwen2-7B-Instruct进行微调:

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.3 微调参数解析

  • --model: 指定要微调的模型路径或ID
  • --train_type: 指定训练类型(lora表示使用LoRA微调)
  • --dataset: 指定训练数据集,可以指定多个
  • --lora_rank: LoRA矩阵的秩,影响参数数量和效果
  • --lora_alpha: LoRA缩放系数
  • --target_modules: 指定应用LoRA的模块类型

4. 模型合并技术

4.1 为什么需要合并模型

LoRA微调后,我们得到的是原始模型+适配器权重的组合。为了部署和使用方便,通常需要将LoRA权重合并到原始模型中,形成一个完整的新模型。

4.2 推理时合并

在推理时可以直接合并LoRA权重并保存:

swift infer \ --ckpt_dir /path/to/checkpoint-873 \ --load_dataset_config true \ --merge_lora true \ --infer_backend vllm \ --max_model_len 8192

4.3 单独合并命令

也可以使用专门的导出命令进行合并:

swift export \ --ckpt_dir /path/to/checkpoint-873 \ --merge_lora true

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

5. 模型部署与使用

5.1 使用vLLM加速推理

合并后的模型可以使用vLLM进行高效推理:

CUDA_VISIBLE_DEVICES=0 swift infer \ --model /path/to/merged-model \ --stream true \ --infer_backend vllm \ --max_new_tokens 2048

5.2 Web界面推理

ms-swift还提供了基于Gradio的Web界面:

swift app \ --model /path/to/merged-model \ --stream true \ --infer_backend pt \ --max_new_tokens 2048 \ --lang zh

6. 总结与进阶

通过本文,我们完成了从模型微调到权重合并的全流程。ms-swift框架的强大之处在于:

  1. 广泛的模型支持:支持600+纯文本和300+多模态模型
  2. 高效的训练技术:集成LoRA、QLoRA等参数高效微调方法
  3. 全流程工具链:覆盖训练、推理、评测、量化、部署全流程
  4. 灵活的部署选项:支持PyTorch、vLLM、LMDeploy等多种推理后端

对于想要进一步探索的读者,可以尝试:

  • 使用Megatron并行技术加速大规模训练
  • 尝试GRPO族强化学习算法进行对齐训练
  • 探索多模态模型的训练与部署

获取更多AI镜像

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

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

相关文章:

  • Flutter OH 框架介绍
  • 从SD卡槽到多功能扩展:SDIO接口的另类玩法大全(GPS/蓝牙/摄像头实测)
  • 结合传统算法:在DAMOYOLO-S检测后使用OpenCV进行目标跟踪与轨迹分析
  • Flowable流程引擎深度清理:构建自定义函数实现流程实例与项目数据的精准清除
  • GLM-Image惊艳效果展示:‘青铜器纹样+赛博格’东西方文明碰撞AI艺术
  • Nuke视觉特效师的终极武器:一站式200+专业工具集完整指南
  • 一键部署StructBERT:可视化中文句子相似度比对工具
  • Fish-Speech-1.5情感语音合成效果展示
  • Z-Image-Turbo效果对比:不同采样步数下的质量差异
  • 计算机视觉必备:HPatches数据集终极使用指南
  • 从芯片内部到LCD驱动:手把手拆解迪克森电荷泵的升压原理(附波形分析)
  • 告别预训练!用MT-UNet在单张1080Ti上搞定医学图像分割(附代码解读)
  • 中小企业如何低成本搞定等保测评?5个必备安全措施清单
  • Maxwell仿真直线电机空载反电动势仿真+直线电机推力输出仿真+直线电机磁阻力、端部力、齿槽力仿真(附有平板型直线电机仿真说明)
  • AI能否取代人?这是个什么问题?
  • 嵌入式虚拟触摸抽象层:多点触控事件建模与跨平台分发
  • 回归分析实战指南:从原理到Python实现
  • GitHub开源项目协作利器:Cosmos-Reason1-7B智能分析Issue与PR
  • Qwen1.5-1.8B-GPTQ-Int4部署教程:Kubernetes集群中vLLM服务编排实践
  • AutoDL文件解压全攻略:解决unzip报错/rar无法解压的3种终极方案
  • Ollama部署translategemma-12b-it:面向开发者的企业级多语种AI翻译底座
  • SpringBoot项目Swagger2接口文档不显示?试试这个注解修复方案
  • MATLAB高阶谱分析工具箱详解:cum3x与cum3est函数的使用技巧与避坑指南
  • Flink新手避坑指南:Java版WordCount程序从开发到部署的8个常见问题
  • 算法训练营Day41 - 动态规划part10
  • ClawTeam:让 AI 代理组成集群,实现全自动化工作流
  • 智能基线校正:用airPLS算法解决信号处理中的背景干扰难题
  • Qwen2.5-72B-Instruct-GPTQ-Int4实战教程:vLLM API封装为REST服务
  • 【一文吃透】FreeRTOS之优先级反转
  • 万般开头难