【大模型】MS-SWIFT : 高效、灵活的大模型微调框架
MS-SWIFT : 高效、灵活的大模型微调框架
- 一、项目下载
- 二、环境准备
- 三、模型文件准备
- 四、数据准备
- 五、微调命令及参数说明
- SFT 微调
- LoRA 微调
- Full 微调
- 六、可能会遇到的报错及解决方法
- 七、相关论文信息
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 微调方法的原理和优势。