预训练
前提条件
已上传训练代码、训练权重文件和数据集到OBS中,具体参考代码上传至OBS。
Step1 创建训练任务
创建训练作业,并自定义名称、描述等信息。选择自定义算法,启动方式自定义,以及选择上传的镜像。
cd /home/ma-user/modelarts/user-job-dir/AscendSpeed; sh ./scripts/obs_pipeline.sh
Step2 配置数据输入和输出
单击“增加训练输入”和“增加训练输出”,用于配置训练作业开始时需要输入数据的路径和训练结束后输出数据的路径。
- 在“输入”的输入框内设置变量:ORIGINAL_TRAIN_DATA_PATH、ORIGINAL_HF_WEIGHT。
- ORIGINAL_TRAIN_DATA_PATH:训练时指定的输入数据集路径。
- ORIGINAL_HF_WEIGHT:加载tokenizer与Hugging Face权重时,对应的存放地址。
- 在“输出”的输入框内设置变量:OUTPUT_SAVE_DIR、HF_SAVE_DIR。
- OUTPUT_SAVE_DIR:训练完成后指定的输出模型路径。
- HF_SAVE_DIR:训练完成的权重文件自动转换为Hugging Face格式权重输出的路径(确保添加CONVERT_MG2HF环境变量并设置为True)。
- 分别单击“输入”和“输出”的数据存储位置,如图所示,选择OBS桶中指定的目录。ORIGINAL_TRAIN_DATA_PATH中则直接选中数据集文件。
- “输入”和“输出”中的获取方式全部选择为:环境变量。
- “输出”中的预下载至本地目标选择:下载,此时输出路径中的数据则会下载至OBS中。
环境变量 |
示例值 |
参数说明 |
---|---|---|
MOUNT |
OBS |
默认必须填写。表示代码根据OBS存储方式运行。 |
MODEL_NAME |
llama2-13b |
输入选择训练的模型名称。 |
RUN_TYPE |
pretrain |
表示训练类型。可选择值:[pretrain, sft, lora]。 |
DATA_TYPE |
GeneralPretrainHandler |
示例值需要根据数据集的不同,选择其一。
|
MBS |
4 |
表示流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。 该值与TP和PP以及模型大小相关,可根据实际情况进行调整。 |
GBS |
512 |
表示训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长。 |
TP |
8 |
表示张量并行。 |
PP |
1 |
表示流水线并行。一般此值与训练节点数相等,与权重转换时设置的值相等。 |
CP |
1 |
表示context并行,默认为1。应用于训练长序列文本的模型。如果训练时SEQ_LEN超过32768长度,则推荐增加CP值(CP ≥ 2)。对应训练参数 context-parallel-size 。 (此参数目前仅适用于Llama3系列模型长序列训练) |
LR |
2.5e-5 |
学习率设置。 |
MIN_LR |
2.5e-6 |
最小学习率设置。 |
SEQ_LEN |
4096 |
要处理的最大序列长度。 |
MAX_PE |
8192 |
设置模型能够处理的最大序列长度。 |
TRAIN_ITERS |
100 |
表示训练step迭代次数,根据实际需要修改。 |
SAVE_INTERVAL |
10 |
表示训练间隔多少step,则会保存一次权重文件。 |
SEED |
1234 |
随机种子数。每次数据采样时,保持一致。 |
CONVERT_MG2HF |
True |
表示训练完成的权重文件会自动转换为Hugging Face格式权重。如果不需要自动转换,则删除该环境变量。 |
对于Yi系列模型、ChatGLMv3-6B和Qwen系列模型,还需要手动修改训练参数和tokenizer文件,具体请参见训练tokenizer文件说明。
模型参数设置规定:
- TP张量并行 、PP流水线并行、CP context并行的参数设置:TP×PP×CP的值要被NPU数量(word_size)整除。
- TP×CP的值要被模型参数中 num_attention_heads 整除。
- MBS(micro-batch-size)、GBS(global-batch-size)的设置:需要遵循GBS/MBS的值能够被NPU/(TP×PP×CP)的值进行整除。