ms-swift快速入门:从安装到微调,手把手教你训练自己的AI助手

想训练一个专属于你的AI助手,但又觉得大模型微调门槛太高?面对动辄几十GB的显存需求和复杂的分布式配置,是不是感觉无从下手?

今天,我要给你介绍一个能让你在单张消费级显卡上,用10分钟就能完成大模型微调的神器——ms-swift。这是魔搭社区推出的一站式大模型微调框架,它把那些复杂的训练流程、显存优化、分布式部署都封装成了简单的命令行工具。

无论你是想给模型注入专业知识,还是调整它的回答风格,ms-swift都能帮你轻松实现。接下来,我就带你从零开始,一步步完成你的第一个AI助手训练项目。

1. 为什么选择ms-swift?

在开始动手之前,我们先简单了解一下ms-swift到底能帮你解决什么问题。

1.1 大模型微调到底有多难?

传统的大模型微调,你需要面对几个头疼的问题:

  • 显存要求高:一个7B参数的模型,全参数微调可能需要40GB以上的显存
  • 环境配置复杂:PyTorch版本、CUDA驱动、各种依赖库,配置起来就是一场噩梦
  • 代码门槛高:需要理解分布式训练、梯度同步、优化器配置等底层细节
  • 流程不统一:训练、推理、评测、部署每个环节都要用不同的工具

这些问题让很多想尝试大模型微调的开发者望而却步。

1.2 ms-swift的解决方案

ms-swift把这些难题都解决了:

  • 极低的显存需求:通过LoRA、QLoRA等技术,7B模型训练只需要9GB显存
  • 一键式安装部署:几条命令就能完成环境搭建
  • 命令行驱动:不需要写复杂的Python代码,用命令行就能完成训练
  • 全流程覆盖:从训练、推理到评测、部署,一个框架全搞定
  • 丰富的模型支持:支持600+纯文本模型和300+多模态模型

最重要的是,ms-swift提供了Web-UI界面,让你可以像使用普通软件一样训练大模型,真正做到了零门槛。

2. 环境准备与快速安装

2.1 硬件要求

在开始之前,我们先看看需要什么样的硬件环境:

硬件配置最低要求推荐配置
GPU显存8GB24GB以上
系统内存16GB32GB
存储空间50GB100GB以上
操作系统Ubuntu 20.04+Ubuntu 22.04

如果你有一张RTX 3090(24GB显存),那就可以轻松运行大部分7B模型的微调任务。即使是RTX 3060(12GB)也能通过QLoRA技术训练7B模型。

2.2 安装步骤

ms-swift的安装非常简单,我们通过Docker来确保环境一致性:

# 1. 拉取官方镜像
docker pull registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py3.10-torch2.3.0

# 2. 启动容器
docker run -it --gpus all --name swift-train \
    -v /your/local/path:/workspace \
    registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py3.10-torch2.3.0 \
    bash

# 3. 在容器内安装ms-swift
pip install ms-swift -U

如果你不想用Docker,也可以直接在本机安装:

# 创建Python虚拟环境
conda create -n swift python=3.10
conda activate swift

# 安装ms-swift
pip install ms-swift -U

# 验证安装
swift --version

安装完成后,你会看到类似这样的输出:

ms-swift version: 1.10.0

2.3 快速验证

为了确保一切正常,我们先运行一个简单的测试:

# 测试命令行工具是否可用
swift --help

# 测试模型下载(这里我们下载一个小模型测试)
swift download --model_id_or_path Qwen/Qwen2.5-0.5B-Instruct

如果能看到模型下载进度,说明环境配置成功了。

3. 你的第一个微调项目:让AI认识自己

现在,我们来完成一个实际的任务:训练一个知道自己身份的AI助手。这个任务在技术上叫做"自我认知微调",就是让模型记住自己的身份信息。

3.1 准备训练数据

ms-swift内置了很多数据集,我们可以直接使用。对于自我认知任务,框架已经准备好了专门的数据集:

# 查看可用的数据集
swift dataset list | grep self-cognition

你会看到swift/self-cognition这个数据集,它就是专门用于自我认知训练的。

3.2 开始训练

这是最激动人心的部分——用一条命令开始训练。我们以Qwen2.5-7B-Instruct模型为例:

# 在单卡3090上训练(需要约22GB显存)
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

让我解释一下这些参数的含义:

  • --model:指定要微调的模型,这里用的是通义千问7B指令版
  • --train_type lora:使用LoRA微调方法,只训练少量参数
  • --dataset:训练数据集,我们混合了中英文指令数据和自我认知数据
  • --lora_rank 8:LoRA的秩,这个值越小参数越少,训练越快
  • --model_author--model_name:设置AI助手的作者和名称

训练开始后,你会看到类似这样的输出:

[INFO] Loading model...
[INFO] Model loaded: Qwen/Qwen2.5-7B-Instruct
[INFO] Loading dataset...
[INFO] Start training...
Epoch: 0%|          | 0/100 [00:00<?, ?it/s]

训练过程大概需要10-30分钟,具体取决于你的显卡性能。在这个过程中,ms-swift会自动:

  1. 下载模型和数据集
  2. 准备训练环境
  3. 开始微调训练
  4. 定期保存检查点
  5. 输出训练日志

3.3 训练过程中的小技巧

如果你在训练中遇到显存不足的问题,可以尝试这些优化:

# 使用QLoRA进一步降低显存(只需要9GB显存)
CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model Qwen/Qwen2.5-7B-Instruct \
    --train_type lora \
    --quantization_bit 4 \  # 4-bit量化
    --dataset 'swift/self-cognition#500' \
    --output_dir output_q \
    ...  # 其他参数保持不变

或者使用更小的模型:

# 使用0.5B小模型,显存需求更低
CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model Qwen/Qwen2.5-0.5B-Instruct \  # 改为0.5B模型
    --train_type lora \
    --dataset 'swift/self-cognition#500' \
    --output_dir output_small \
    ...

4. 测试训练效果

训练完成后,我们来测试一下效果。训练好的模型会保存在output目录下。

4.1 使用命令行测试

# 使用交互式命令行进行推理
CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --adapters output/vx-xxx/checkpoint-xxx \  # 替换为你的checkpoint路径
    --stream true \  # 流式输出
    --temperature 0 \  # 确定性输出
    --max_new_tokens 2048

运行后,你会进入一个交互式对话界面。试着问它:

你是谁?

如果训练成功,它会回答:

我是swift-robot,由swift开发的AI助手。

再问一些其他问题,看看它是否还记得自己的通用能力:

帮我写一个Python函数计算斐波那契数列

它应该能正常回答技术问题,这说明微调没有破坏模型的原有能力。

4.2 使用vLLM加速推理

如果你想要更快的推理速度,可以合并LoRA权重并使用vLLM加速:

# merge-lora并使用vLLM进行推理加速
CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --adapters output/vx-xxx/checkpoint-xxx \
    --stream true \
    --merge_lora true \  # 合并LoRA权重到原模型
    --infer_backend vllm \  # 使用vLLM后端
    --vllm_max_model_len 8192 \
    --temperature 0 \
    --max_new_tokens 2048

vLLM能显著提升推理速度,特别是在批量处理请求时。

4.3 使用Web界面测试

如果你更喜欢图形界面,ms-swift也提供了Web-UI:

# 启动Web界面
CUDA_VISIBLE_DEVICES=0 swift app \
    --model Qwen/Qwen2.5-7B-Instruct \
    --adapters output/vx-xxx/checkpoint-xxx \
    --stream true \
    --lang zh  # 中文界面

然后在浏览器中打开http://localhost:7860,你就能看到一个类似ChatGPT的聊天界面,可以直接在网页上和你的AI助手对话。

5. 使用自己的数据训练

刚才我们用了内置的数据集,现在来学习如何用你自己的数据训练模型。

5.1 准备自定义数据集

ms-swift支持多种数据格式,最简单的是JSON格式。创建一个my_data.json文件:

[
  {
    "instruction": "翻译以下英文句子为中文",
    "input": "Hello, how are you?",
    "output": "你好,最近怎么样?"
  },
  {
    "instruction": "总结文章的主要内容",
    "input": "人工智能是当前科技发展的热点...",
    "output": "本文主要讨论了人工智能的发展现状和未来趋势..."
  },
  {
    "instruction": "写一首关于春天的诗",
    "input": "",
    "output": "春风拂面花香浓,燕子归来筑巢忙..."
  }
]

如果你有对话数据,可以使用这种格式:

[
  {
    "conversations": [
      {
        "role": "user",
        "content": "推荐几本好看的小说"
      },
      {
        "role": "assistant", 
        "content": "我推荐《三体》、《活着》、《平凡的世界》..."
      }
    ]
  }
]

5.2 开始训练自定义数据

# 使用自定义数据集训练
CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model Qwen/Qwen2.5-7B-Instruct \
    --train_type lora \
    --dataset ./my_data.json \  # 使用本地文件
    --output_dir my_output \
    ...  # 其他参数与之前类似

5.3 处理大规模数据

如果你的数据量很大,可以考虑这些优化:

# 使用流式加载,避免内存溢出
CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model Qwen/Qwen2.5-7B-Instruct \
    --dataset ./large_data.json \
    --streaming true \  # 启用流式加载
    --num_workers 8 \   # 多进程加载
    --preprocessing_num_workers 8 \
    ...

6. 进阶技巧:让训练效果更好

掌握了基础用法后,我们来看看如何提升训练效果。

6.1 调整LoRA参数

LoRA有几个关键参数会影响训练效果:

# 调整LoRA配置
CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model Qwen/Qwen2.5-7B-Instruct \
    --train_type lora \
    --lora_rank 16 \      # 增加秩,提升表达能力
    --lora_alpha 64 \     # 调整alpha值
    --lora_dropout 0.1 \  # 添加dropout防止过拟合
    --target_modules q_proj,k_proj,v_proj,o_proj \  # 只训练注意力层
    ...

6.2 使用更好的优化策略

# 使用AdamW优化器,配合学习率调度
CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model Qwen/Qwen2.5-7B-Instruct \
    --optim adamw_8bit \  # 8-bit AdamW,节省显存
    --lr_scheduler_type cosine \  # 余弦退火学习率
    --warmup_ratio 0.1 \  # 10%的步骤用于warmup
    --weight_decay 0.01 \  # 权重衰减
    ...

6.3 多轮对话训练

如果你的数据包含多轮对话,需要特殊处理:

# 处理多轮对话数据
CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model Qwen/Qwen2.5-7B-Instruct \
    --dataset ./multi_turn_data.json \
    --chat_template qwen \  # 使用Qwen的对话模板
    --max_length 4096 \     # 增加最大长度
    --packing true \        # 启用数据packing,提升训练效率
    ...

7. 模型部署与分享

训练好的模型,你可能会想要部署使用或者分享给他人。

7.1 本地部署为API服务

# 部署为OpenAI兼容的API服务
CUDA_VISIBLE_DEVICES=0 swift deploy \
    --model Qwen/Qwen2.5-7B-Instruct \
    --adapters output/vx-xxx/checkpoint-xxx \
    --infer_backend vllm \
    --port 8000 \
    --api_key your_api_key_here

启动后,你就可以用curl或者Python客户端调用:

import openai

client = openai.OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="your_api_key_here"
)

response = client.chat.completions.create(
    model="qwen",
    messages=[
        {"role": "user", "content": "你是谁?"}
    ]
)
print(response.choices[0].message.content)

7.2 分享到ModelScope社区

如果你想分享模型,可以推送到ModelScope:

# 首先登录ModelScope(如果没有token,需要先注册)
pip install modelscope
from modelscope import login
login()  # 按照提示输入token

# 推送模型
CUDA_VISIBLE_DEVICES=0 \
swift export \
    --adapters output/vx-xxx/checkpoint-xxx \
    --push_to_hub true \
    --hub_model_id 'your-username/your-model-name' \
    --hub_token '<your-sdk-token>'

7.3 模型量化(减小体积)

如果要在资源受限的环境部署,可以对模型进行量化:

# 使用AWQ量化到4-bit
CUDA_VISIBLE_DEVICES=0 swift export \
    --model Qwen/Qwen2.5-7B-Instruct \
    --adapters output/vx-xxx/checkpoint-xxx \
    --quant_bits 4 \
    --quant_method awq \
    --dataset AI-ModelScope/alpaca-gpt4-data-zh \
    --output_dir qwen-7b-awq

量化后的模型体积会大大减小,推理速度也会提升。

8. 常见问题与解决方案

在实际使用中,你可能会遇到一些问题,这里我总结了一些常见问题的解决方法。

8.1 显存不足怎么办?

问题:训练时出现CUDA out of memory错误。

解决方案

  1. 使用QLoRA(4-bit量化):
--quantization_bit 4 --train_type lora
  1. 减小批次大小和序列长度:
--per_device_train_batch_size 1 --gradient_accumulation_steps 16 --max_length 1024
  1. 使用梯度检查点:
--gradient_checkpointing true

8.2 训练速度太慢怎么办?

问题:训练一个epoch需要很长时间。

解决方案

  1. 启用FlashAttention加速:
--use_flash_attn true
  1. 使用bf16混合精度:
--torch_dtype bfloat16
  1. 增加数据加载进程:
--dataloader_num_workers 8 --preprocessing_num_workers 8

8.3 模型过拟合怎么办?

问题:在训练集上表现很好,但在新数据上表现差。

解决方案

  1. 增加Dropout:
--lora_dropout 0.1
  1. 使用更小的学习率:
--learning_rate 5e-5
  1. 早停策略:
--eval_steps 100 --save_steps 100 --early_stopping_patience 3

8.4 如何监控训练过程?

ms-swift支持多种监控方式:

# 1. 使用TensorBoard
tensorboard --logdir output/runs

# 2. 使用WandB(需要先注册)
pip install wandb
wandb login
# 在训练命令中添加
--report_to wandb

9. 总结

通过这篇文章,我们完整走过了使用ms-swift进行大模型微调的全过程。从环境安装、数据准备,到训练调优、部署分享,每一步都有具体的代码示例。

让我总结一下ms-swift的核心优势:

  1. 简单易用:命令行驱动,无需编写复杂代码
  2. 资源友好:小显存也能训大模型
  3. 功能全面:训练、推理、评测、部署一站式解决
  4. 生态丰富:支持600+模型和300+多模态模型
  5. 生产就绪:支持分布式训练、模型量化、API部署

无论你是AI初学者,还是有经验的开发者,ms-swift都能大大降低大模型微调的门槛。它把那些复杂的底层细节都封装好了,让你可以专注于数据和业务逻辑。

下一步建议

  1. 从简单的自我认知任务开始,熟悉整个流程
  2. 尝试用你自己的数据训练一个专业领域的助手
  3. 探索ms-swift的高级功能,如多模态训练、强化学习
  4. 将训练好的模型部署到实际应用中

大模型微调不再是大公司的专利,现在每个人都可以训练自己的AI助手。ms-swift让这个梦想变得触手可及。


获取更多AI镜像

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

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐