在本篇博客中,我将记录自己使用 MS-Swift 框架微调 mPLUG-Owl3-7B 模型的全过程。
mPLUG官方提供的微调文档并不可行,存在问题。
环境搭建
创建虚拟环境
1 | conda create -n ms-swift python=3.10 |
安装 MS-Swift
因为涉及自定义数据集等各种开发工作,所以使用源码安装。
1 | git clone https://github.com/modelscope/ms-swift.git |
下面是 ms-swift 官方提供的环境建议:
范围 | 推荐 | 备注 | |
---|---|---|---|
python | >=3.9 | 3.10 | |
cuda | cuda12 | 使用cpu、npu、mps则无需安装 | |
torch | >=2.0 | ||
transformers | >=4.33 | 4.49 | |
modelscope | >=1.19 | ||
peft | >=0.11,<0.15 | ||
trl | >=0.13,<0.17 | 0.15 | RLHF |
deepspeed | >=0.14 | 0.14.5 | 训练 |
vllm | >=0.5.1 | 0.7.3 | 推理/部署/评测 |
lmdeploy | >=0.5 | 0.7.1 | 推理/部署/评测 |
evalscope | >=0.11 | 评测 |
注意⚠️⚠️
如果我们想要微调、推理 mPlug-Owl3 模型,transformers 的版本不能为 4.49,需要使用更低的版本:
1 | conda list |
安装其他依赖
1 | pip install decord icecream |
数据集准备
建议直接使用的数据集格式:
1 | { |
注意:system部分是可选的。数据集中的system优先级高于命令行传入的--system
,最后是定义在template中的default_system
。
处理成这种格式之后,就可以直接在命令行使用参数 --dataset <dataset_path1>
接入。
更多的数据集格式可以参考:数据集格式
模型微调
可行的命令:
1 | CUDA_VISIBLE_DEVICES=0,1,2,3 NPROC_PER_NODE=4 swift sft \ |
训练参数解析
参数 | 含义 |
---|---|
CUDA_VISIBLE_DEVICES=0,1,2,3 | 指定使用 4 张 GPU 进行训练 |
NPROC_PER_NODE=4 | 训练时每个节点的进程数 |
–train_type lora | 采用 LoRA 微调,减少计算资源消耗 |
–dataset /test/test2.json | 训练数据集路径 |
–deepspeed zero2 | 采用 DeepSpeed ZeRO-2 来优化多 GPU 训练 |
–output_dir output | 训练结果(模型权重、日志等)存放路径 |
–num_train_epochs 5 | 训练 5 个 Epoch |
更多参数选择参考:训练参数
如果提前下载了模型,参数 --model
后面的内容可以替换为模型路径。
一些可行的命令合集
简单推理:
1 | CUDA_VISIBLE_DEVICES=0 swift infer \ |
1 | CUDA_VISIBLE_DEVICES=0 \ |
更多的 MS-Swift 使用方法:https://github.com/modelscope/ms-swift/blob/main/README_CN.md
存在问题的 mPlug 官方微调文档:https://github.com/modelscope/ms-swift/issues/1969