MS-SWIFT : 高效、灵活的大模型微调框架
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 微调方法的原理和优势。