执行训练任务(历史版本)
步骤一 上传训练权重文件和数据集
如果在准备代码和数据阶段已经上传权重文件和数据集到容器中,可以忽略此步骤。
如果未上传训练权重文件和数据集到容器中,具体参考上传代码和权重文件到工作环境和上传数据到指定目录章节完成。训练脚本中会自动执行训练前的权重转换操作和数据处理操作。
步骤二 修改训练超参配置
以Llama2-70b和Llama2-13b的SFT微调为例,执行脚本为0_pl_sft_70b.sh 和 0_pl_sft_13b.sh 。
修改模型训练脚本中的配置,参数详解可查看训练参数说明,其中【GBS、MBS、TP、PP】参数值可参考模型推荐参数、NPU卡数设置。
对于Yi系列模型、ChatGLMv3-6B和Qwen系列模型,还需要手动修改训练参数和tokenizer文件,具体请参见训练tokenizer文件说明。

同时开启故障快恢和断点续训时需满足以下条件:
- 如果用户指定${USER_CONVERTED_CKPT_PATH} 因故障快恢读取权重的优先级最高则训练过程的权重保存路径${OUTPUT_SAVE_DIR}/saved_checkpoints 必须为空,否则此参数无效断点续训失效。
- 如果就是使用最新的训练权重进行断点续训(暂停+启动场景),那么可以同时指定MA_TRAIN_AUTO_RESUME =1和 ${USER_CONVERTED_CKPT_PATH}训练过程的权重保存路径,加载路径一致。
- 故障快恢依赖训练过程的权重保存路径。所以如果开启 MA_TRAIN_AUTO_RESUME=1, 则用户指定的权重加载路径${USER_CONVERTED_CKPT_PATH}不能是训练过程的权重保存路径。
步骤三 启动训练脚本
修改超参值后启动训练脚本,以 Llama2-70b-sft为例,各个模型NPU卡数可参考模型推荐参数、NPU卡数。
多机启动
多台机器执行训练启动命令如下。进入代码目录 /home/ma-user/ws/llm_train/AscendFactory 下执行启动脚本。
启动训练脚本可使用以下两种启动命令,二选一即可,其中区别如下:
- 方法一:传递参数形式:将主节点IP地址、节点个数、节点RANK的参数传递至运行的脚本中执行。
多机执行命令为:sh scripts_modellink/llama2/0_pl_sft_70b.sh <MASTER_ADDR=xx.xx.xx.xx> <NNODES=4> <NODE_RANK=0> 示例: #第一台节点 sh scripts_modellink/llama2/0_pl_sft_70b.sh xx.xx.xx.xx 4 0 # 第二台节点 sh scripts_modellink/llama2/0_pl_sft_70b.sh xx.xx.xx.xx 4 1 # 第三台节点 sh scripts_modellink/llama2/0_pl_sft_70b.sh xx.xx.xx.xx 4 2 # 第四台节点 sh scripts_modellink/llama2/0_pl_sft_70b.sh xx.xx.xx.xx 4 3
- 方法二:定义变量形式:提前定义主节点IP地址、节点个数、节点RANK的环境变量并赋值,再执行脚本。
示例: # 第一台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=4 NODE_RANK=0 sh scripts_modellink/llama2/0_pl_sft_70b.sh # 第二台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=4 NODE_RANK=1 sh scripts_modellink/llama2/0_pl_sft_70b.sh # 第三台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=4 NODE_RANK=2 sh scripts_modellink/llama2/0_pl_sft_70b.sh # 第四台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=4 NODE_RANK=3 sh scripts_modellink/llama2/0_pl_sft_70b.sh
以上命令多台机器执行时,只有${NODE_RANK}的节点ID值不同,其他参数都保持一致。其中MASTER_ADDR、 NNODES、 NODE_RANK为必填。
单机启动
对于Llama2-7b和Llama2-13b,操作过程与Llama2-70b相同,只需修改对应参数即可,可以选用单机启动,以Llama2-13b为例。
进入代码目录 /home/ma-user/ws/llm_train/AscendFactory 下执行启动脚本,先修改以下命令中的参数,再复制执行。
启动训练脚本可使用以下两种启动命令,二选一即可,其中区别如下:
- 方法一:传递参数形式:将主节点IP地址、节点个数、节点RANK的参数传递至运行的脚本中执行。
# 单机执行命令为:sh scripts_modellink/llama2/0_pl_sft_13b.sh <MASTER_ADDR=localhost> <NNODES=1> <NODE_RANK=0> 示例: sh scripts_modellink/llama2/0_pl_sft_13b.sh localhost 1 0
- 方法二:定义变量形式:提前定义主节点IP地址、节点个数、节点RANK的环境变量并赋值,再执行脚本。
示例: MASTER_ADDR=localhost NNODES=1 NODE_RANK=0 sh scripts_modellink/llama2/0_pl_sft_13b.sh
注意:如果单机运行需要指定使用NPU卡的数量,可提前定义变量 NPUS_PER_NODE 。例如使用单机四卡训练Llama2-7B命令:
MASTER_ADDR=localhost NNODES=1 NODE_RANK=0 NPUS_PER_NODE=4 sh scripts_modellink/llama2/0_pl_sft_7b.sh
最后,请参考查看日志和性能章节查看SFT微调的日志和性能。