执行预训练任务
Step1 上传训练权重文件和数据集
如果在准备代码和数据阶段已经上传权重文件和数据集到容器中,可以忽略此步骤。
如果未上传训练权重文件和数据集到容器中,具体参考上传代码和权重文件到工作环境和上传数据到指定目录章节完成。训练脚本中会自动执行训练前的权重转换操作和数据处理操作。
如果想详细了解脚本执行训练权重转换操作和数据集预处理操作说明请分别参见训练中的权重转换说明和训练的数据集预处理说明。
Step2 修改训练超参配置
以llama2-70b和llama2-13b预训练为例,执行脚本为0_pl_pretrain_70b.sh 和0_pl_pretrain_13b.sh 。
修改模型训练脚本中的超参配置,必须修改的参数如表1所示。其他超参均有默认值,可以参考表1按照实际需求修改。
参数 |
示例值 |
参数说明 |
---|---|---|
ORIGINAL_TRAIN_DATA_PATH |
/home/ma-user/ws/llm_train/AscendSpeed/training_data/train-00000-of-00001-a09b74b3ef9c3b56.parquet |
必须修改。训练时指定的输入数据路径。请根据实际规划修改。 |
ORIGINAL_HF_WEIGHT |
/home/ma-user/ws/llm_train/AscendSpeed/models/llama2-13B |
必须修改。加载Hugging Face权重(可与tokenizer相同文件夹)时,对应的存放地址。请根据实际规划修改。 |
TOKENIZER_PATH |
/home/ma-user/ws/llm_train/AscendSpeed/tokenizers/llama2-13B |
该参数为tokenizer文件的存放地址。默认与ORIGINAL_HF_WEIGHT路径相同。如果用户需要将Hugging Face权重与tokenizer文件分开存放时,则需要修改参数。 |
INPUT_PROCESSED_DIR |
/home/ma-user/ws/llm_train/AscendSpeed/processed_for_input/llama2-13b |
该路径下保存“数据转换”和“权重转换”的结果。示例中,默认生成在“processed_for_input”文件夹下。如果用户需要修改,可添加并自定义该变量。 |
OUTPUT_SAVE_DIR |
/home/ma-user/ws/llm_train/AscendSpeed/saved_dir_for_output/ |
该路径下统一保存生成的CKPT、PLOG、LOG文件。示例中,默认统一保存在“saved_dir_for_output”文件夹下。如果用户需要修改,可添加并自定义该变量。 |
CKPT_SAVE_PATH |
/home/ma-user/ws/llm_train/AscendSpeed/saved_dir_for_output/saved_models/llama2-13b |
保存训练生成的模型CKPT文件。示例中,默认保存在“saved_dir_for_output/saved_models”文件夹下。如果用户需要修改,可添加并自定义该变量。 |
LOG_SAVE_PATH |
/home/ma-user/ws/llm_train/AscendSpeed/saved_dir_for_output/saved_models/llama2-13b/log |
保存训练过程记录的日志LOG文件。示例中,默认保存在“saved_models/llama2-13b/log”文件夹下。如果用户需要修改,可添加并自定义该变量。 |
ASCEND_PROCESS_LOG_PATH |
/home/ma-user/ws/llm_train/AscendSpeed/saved_dir_for_output/plog |
保存训练过程中记录的程序堆栈信息日志PLOG文件。示例中,默认保存在“saved_dir_for_output/plog”文件夹下。如果用户需要修改,可添加并自定义该变量。 |
对于Yi系列模型、ChatGLMv3-6B和Qwen系列模型,还需要手动修改训练参数和tokenizer文件,具体请参见训练tokenizer文件说明。
Step3 启动训练脚本
请根据Step2 修改训练超参配置修改超参值后,再启动训练脚本。Llama2-70B建议为4机32卡训练。
多机启动
以 Llama2-70B 为例,多台机器执行训练启动命令如下。多机启动需要在每个节点上执行。
进入代码目录 /home/ma-user/ws/llm_train/AscendSpeed 下执行启动脚本。xxx-Ascend请根据实际目录替换。
启动训练脚本可使用以下两种启动命令,二选一即可,其中区别如下:
- 传递参数形式:将主节点IP地址、节点个数、节点RANK的参数传递至运行的脚本中执行。
# 多机执行命令为:sh scripts/llama2/0_pl_pretrain_70b.sh <MASTER_ADDR=xx.xx.xx.xx> <NNODES=4> <NODE_RANK=0> 示例: # 第一台节点 sh scripts/llama2/0_pl_pretrain_70b.sh xx.xx.xx.xx 4 0 # 第二台节点 sh scripts/llama2/0_pl_pretrain_70b.sh xx.xx.xx.xx 4 1 # 第三台节点 sh scripts/llama2/0_pl_pretrain_70b.sh xx.xx.xx.xx 4 2 # 第四台节点 sh scripts/llama2/0_pl_pretrain_70b.sh xx.xx.xx.xx 4 3
- 定义变量形式:提前定义主节点IP地址、节点个数、节点RANK的环境变量并赋值,再执行脚本。
示例: # 第一台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=4 NODE_RANK=0 sh scripts/llama2/0_pl_pretrain_70b.sh # 第二台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=4 NODE_RANK=1 sh scripts/llama2/0_pl_pretrain_70b.sh # 第三台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=4 NODE_RANK=2 sh scripts/llama2/0_pl_pretrain_70b.sh # 第四台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=4 NODE_RANK=3 sh scripts/llama2/0_pl_pretrain_70b.sh
以上命令多台机器执行时,只有${NODE_RANK}的节点ID值不同,其他参数都保持一致;其中MASTER_ADDR、 NNODES、 NODE_RANK 为必填。
单机启动
对于Llama2-7B和Llama2-13B,操作过程与Llama2-70B相同,只需修改对应参数即可,可以选用单机启动,以 Llama2-13B 为例。
进入代码目录 /home/ma-user/ws/llm_train/AscendSpeed 下,先修改以下命令中的参数,再复制执行。xxx-Ascend请根据实际目录替换。
启动训练脚本可使用以下两种启动命令,二选一即可,其中区别如下:
- 传递参数形式:将主节点IP地址、节点个数、节点RANK的参数传递至运行的脚本中执行。
# 单机执行命令为:sh scripts/llama2/0_pl_pretrain_13b.sh <MASTER_ADDR=localhost> <NNODES=1> <NODE_RANK=0> 示例: sh scripts/llama2/0_pl_pretrain_13b.sh localhost 1 0
- 定义变量形式:提前定义主节点IP地址、节点个数、节点RANK的环境变量并赋值,再执行脚本。
示例: MASTER_ADDR=localhost NNODES=1 NODE_RANK=0 sh scripts/llama2/0_pl_pretrain_13b.sh
注意:如果单机运行需要指定使用NPU卡的数量,可提前定义变量 NPUS_PER_NODE 。例如使用单机四卡训练Llama2-7B命令:
MASTER_ADDR=localhost NNODES=1 NODE_RANK=0 NPUS_PER_NODE=4 sh scripts/llama2/0_pl_pretrain_7b.sh
等待模型载入
执行训练启动命令后,等待模型载入,当出现“training”关键字时,表示开始训练。训练过程中,训练日志会在最后的Rank节点打印。
最后,请参考查看日志和性能章节查看预训练的日志和性能。