【大模型】MS-SWIFT : 高效、灵活的大模型微调框架

发布于:2025-05-12 ⋅ 阅读:(12) ⋅ 点赞:(0)

在这里插入图片描述


MS-SWIFT 是一个高效、灵活的大模型微调框架,支持多种微调方法,包括 SFT、LoRA、Full 等,旨在帮助用户快速、便捷地对大语言模型进行微调,以适应特定任务和应用场景。

一、项目下载

可以通过以下命令从对应的源下载 MS-SWIFT 项目:

https://github.com/modelscope/ms-swift.git

二、环境准备

本次部署选用 Ubuntu 22.04 操作系统,搭配 Python 3.10 与 PyTorch 2.1.2。计算硬件为一块 NVIDIA GeForce RTX 4090D GPU,显存 24GB,同时安装 Cuda 11.8,确保环境稳定高效,满足运行需求。

conda create --name MS-SWIFT python=3.10
conda activate MS-SWIFT
pip install torch==2.1.2+cu118 torchvision==0.16.1+cu118 torchaudio==2.1.2 --extra-index-url https://download.pytorch.org/whl/cu118

三、模型文件准备

以微调 Qwen2.5-7B-Instruct 模型为例,可从 ModelScope 等平台下载模型文件。下载完成后,需验证模型是否正常工作,可通过以下命令进行推理验证:

CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --model /root/autodl-tmp/Qwen2.5-7B-Instruct \
    --infer_backend pt \
    --stream true

若模型能正常输出合理回答,说明模型文件完整且配置正确。

四、数据准备

数据集需提前准备并置于合适路径,例如 /root/autodl-tmp/datasets/trainTest.json,可在数据集文件路径后加 #500 来指定使用 500 条记录。数据集格式一般需符合特定要求,如包含输入、输出等字段。

{
  "instruction": "介绍人工智能的发展历程",
  "input": "",
  "output": "人工智能的发展历程可以追溯到 20 世纪中叶,当时科学家们开始探索如何使机器模拟人类智能。1956 年,达特茅斯会议的召开标志着人工智能学科的正式诞生。在接下来的几十年里,人工智能经历了多次起伏,包括专家系统的兴起与衰落、机器学习的崛起等。近年来,随着深度学习技术的突破,人工智能迎来了新的发展高潮,自然语言处理、计算机视觉等领域取得了显著的成果。"
}

五、微调命令及参数说明

以下是使用 MS-SWIFT 进行 SFT、LoRA、Full 微调的命令及关键参数说明:

SFT 微调

CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model /root/autodl-tmp/Qwen2.5-7B-Instruct \
    --train_type sft \
    --dataset /root/autodl-tmp/datasets/trainTest.json#500 \
    --torch_dtype bfloat16 \
    --num_train_epochs 1 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --learning_rate 1e-4 \
    --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

关键参数说明:

  • --train_type sft:指定微调类型为 SFT。
  • --target_modules all-linear:指定对所有线性层进行微调。

LoRA 微调

CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model /root/autodl-tmp/Qwen2.5-7B-Instruct \
    --train_type lora \
    --dataset /root/autodl-tmp/datasets/trainTest.json#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

关键参数说明:

  • --train_type lora:指定微调类型为 LoRA。
  • --lora_rank 8:设置 LoRA 微调中的秩为 8,与 alpha 一起影响微调参数分布。
  • --lora_alpha 32:设置 LoRA 微调中的 alpha 值为 32。

Full 微调

CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model /root/autodl-tmp/Qwen2.5-7B-Instruct \
    --train_type full \
    --dataset /root/autodl-tmp/datasets/trainTest.json#500 \
    --torch_dtype bfloat16 \
    --num_train_epochs 1 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --learning_rate 1e-4 \
    --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

关键参数说明:

  • --train_type full:指定微调类型为 Full。

六、可能会遇到的报错及解决方法

  • CUDA 相关报错 :如显存不足,可通过减小 per_device_train_batch_size 或增加 gradient_accumulation_steps 来解决。
  • 数据格式错误 :需检查数据集文件是否符合要求,确保数据格式正确。
  • 模型加载失败 :需检查模型文件路径是否正确,文件是否完整。
  • loss 不下降或 nan loss :可尝试调整学习率,检查数据质量。

七、相关论文信息

MS-SWIFT 涉及的微调方法如 LoRA 等,相关论文有《Low-Rank Adaptation of Large Language Models》等,详细介绍了 LoRA 微调方法的原理和优势。


网站公告

今日签到

点亮在社区的每一天
去签到