指令监督微调训练任务
Step1 上传训练权重文件和数据集
如果在准备代码和数据阶段已经上传权重文件、自定义数据集,可以忽略此步骤。
- 未上传训练权重文件,具体参考上传代码和权重文件到工作环境。
- 使用自定义数据集训练未上传自定义数据集。具体参考上传自定义数据到指定目录章节并更新dataset_info.json 文件。
Step2 修改训练yaml文件配置
LlamaFactroy配置文件为yaml文件,启动训练前需修改yaml配置文件,yaml配置文件在代码目录下的{work_dir}/llm_train/LLaMAFactory/demo.yaml。修改详细步骤如下所示:
- 选择指令微调类型
- sft,复制sft_yaml样例模板内容覆盖demo.yaml文件内容。
- lora,复制lora_yaml样例模板内容覆盖demo.yaml文件内容。
- 修改yaml文件(demo.yaml)的参数如表1所示
表1 修改重要参数 参数
示例值
参数说明
model_name_or_path
/home/ma-user/ws/tokenizers/Qwen2-72B
必须修改。加载tokenizer与Hugging Face权重时存放目录绝对或相对路径。请根据实际规划修改。
template
qwen
必须修改。用于指定模板。如果设置为"qwen",则使用Qwen模板进行训练,模板选择可参照表1中的template列
output_dir
/home/ma-user/ws/Qwen2-72B/sft-4096
必须修改。指定输出目录。训练过程中生成的模型参数和日志文件将保存在这个目录下。用户根据自己实际要求适配。
per_device_train_batch_size
1
指定每个设备的训练批次大小
gradient_accumulation_steps
8
指定梯度累积的步数,这可以增加批次大小而不增加内存消耗。可根据自己要求适配
num_train_epochs
5
表示训练轮次,根据实际需要修改。一个Epoch是将所有训练样本训练一次的过程。可根据自己要求适配
cutoff_len
4096
文本处理时的最大长度,此处为4096,用户可根据自己要求适配。
dataset
identity,alpaca_en_demo
【可选】指定用于训练的数据集,数据集都放置在此处为identity,alpaca_en_demo表示使用了两个数据集,一个是 identity,一个是alpaca_en_demo。如选用定义数据请参考准备数据(可选)配置dataset_info.json文件
dataset_dir
/home/ma-user/ws/LLaMAFactory/LLaMA-Factory/data
【可选】自定义数据集dataset_info.json配置文件绝对路径;如使用自定义数据集,yaml配置文件需添加此参数。
- 是否选择加速深度学习训练框架Deepspeed,可参考表1选择不同的框架
- 是,选用ZeRO (Zero Redundancy Optimizer)优化器
- ZeRO-0,配置以下参数
deepspeed: examples/deepspeed/ds_z0_config.json
- ZeRO-1,配置以下参数,并复制ds_z1_config.json样例模板至工作目录/home/ma-user/LLaMAFactory/LLaMA-Factory/examples/deepspeed
deepspeed: examples/deepspeed/ds_z1_config.json
- ZeRO-2,配置以下参数
deepspeed: examples/deepspeed/ds_z2_config.json
- ZeRO-3,配置以下参数
deepspeed: examples/deepspeed/ds_z3_config.json
- ZeRO-0,配置以下参数
- 否,默认选用Accelerate加速深度学习训练框架,注释掉deepspeed参数。
- 是,选用ZeRO (Zero Redundancy Optimizer)优化器
- 是否使用固定句长
- 是,配置以下参数
packing: true
- 否,默认使用动态句长,注释掉packing参数。
- 是,配置以下参数
- 选用数据精度格式,以下参数二选一。
- bf16,配置以下参数
bf16: true
- fp16,配置以下参数
fp16: true
- bf16,配置以下参数
- 是否使用自定义数据集
- 如需其他配置参数,可参考表1按照实际需求修改
Step3 启动训练脚本
- 启动训练前需修改启动训练脚本demo.sh 内容。具体请参考•修改启动脚本。
- 对于falcon-11B训练任务开始前,需手动替换tokenizer中的config.json,具体请参见falcon-11B模型。
修改完yaml配置文件后,启动训练脚本;模型不同最少npu卡数不同,npu卡数建议值可参考模型NPU卡数取值表。
进入代码目录{work_dir}/llm_train/LLaMAFactory 下修改启动脚本,其中{work_dir}为容器挂载路径;修改demo.sh 最后一行代码:
将demo.yaml配置文件路径修改为自己实际绝对路径:{work_dir}/llm_train/LLaMAFactory/demo.yaml,例如将以下命令:
FORCE_TORCHRUN=1 llamafactory-cli train /data/openllm_gy1/user/lmz/poc_package/LLaMAFactory/demo.yaml
修改为:
FORCE_TORCHRUN=1 llamafactory-cli train /home/ma-user/ws/llm_train/LLaMAFactory/demo.yaml
- 多机启动
多台机器执行训练启动命令如下。
多机执行命令为:sh demo.sh <MASTER_ADDR=xx.xx.xx.xx> <NNODES=4> <NODE_RANK=0> 示例: #第一台节点 sh demo.sh xx.xx.xx.xx 4 0 # 第二台节点 sh demo.sh xx.xx.xx.xx 4 1 # 第三台节点 sh demo.sh xx.xx.xx.xx 4 2 # 第四台节点 sh demo.sh xx.xx.xx.xx 4 3
以上命令多台机器执行时,只有${NODE_RANK}的节点ID值不同,其他参数都保持一致。其中MASTER_ADDR、 NODE_RANK、 NODE_RANK为必填。
- 单机启动
一般小于等于14B模型可选择单机启动,操作过程与多机启动相同,只需修改对应参数即可,可以选用单机启动。
进入代码目录/home/ma-user/ws/llm_train/LLaMAFactory下执行启动脚本,先修改以下命令中的参数,再复制执行。
# 单机执行命令为:sh demo.sh <MASTER_ADDR=localhost> <NNODES=1> <NODE_RANK=0> sh demo.sh localhost 1 0
单机如需指定训练卡数训练可使用ASCEND_RT_VISIBLE_DEVICES变量指定挂载到容器里面的卡的索引,使用执行命令如下:
ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 sh demo.sh localhost 1 0
其中ASCEND_RT_VISIBLE_DEVICES=0,1,2,3指使用0-3卡执行训练任务
- 训练成功标志
“***** train metrics *****”关键字打印
训练完成后,请参考查看日志和性能章节查看指令微调的日志和性能。
1、如训练过程中遇到“NPU out of memory”“Permission denied” 问题可参考 附录:指令微调训练常见问题解决
2、训练中遇到"ImportError: This modeling file requires the following packages that were not found in your environment: flash_attn. Run `pip install flash_attn`"请参考附录:指令微调训练常见问题问题3小节。
3、训练过程中报"ModuleNotFoundError: No module named 'multipart'"关键字异常,可更新python-multipart为0.0.12版本,具体请参考问题4:"No module named 'multipart'"报错: