更新时间:2025-07-29 GMT+08:00
分享

执行训练任务

步骤一:上传训练权重文件和数据集

如果在准备代码和数据阶段已经上传权重文件和数据集到容器中,可以忽略此步骤。

如果未上传训练权重文件和数据集到容器中,具体参考准备代码、权重、数据章节完成。训练脚本中会自动执行训练前的权重转换操作和数据处理操作。

步骤二:修改训练Yaml配置文件

根据以下步骤修改yaml文件,以下参数aaa.bbb.ccc为aaa区域中的bbb区域的ccc参数值,如backend_config.preprocess_data.input指backend_config区域中的preprocess_data区域的input参数:

  1. 数据集选择:以下参数二选一,详解如下:

    参数

    示例值

    参数说明

    backend_config.preprocess_data.input

    【预训练:pt】预训练数据集相对或绝对地址

    【微调:sft】微调数据集相对或绝对地址

    训练时指定的输入数据路径。请根据实际规划修改。用户根据训练情况二选一;

    backend_config.training.data-path

    /home/ma-user/ws/xxx

    已处理好数据路径目录,如有处理完成数据可设置此参数,使用原始数据忽略。

  2. 训练场景、权重文件、输出目录及其他重要参数设置,详解如下,

    参数

    示例值

    参数说明

    backend_config.training.tokenizer-name-or-path

    /home/ma-user/ws/llm_train/AscendFactory/model/llama2-70B

    【必修改】加载tokenizer与Hugging Face权重时,对应的存放地址。请根据实际规划修改。

    af_output_dir

    /home/ma-user/ws/save_dir

    【必修改】训练任务结束生成日志及权重文件目录

    backend_config.preprocess_data.handler-name

    • GeneralPretrainHandler
    • GeneralInstructionHandler
    • MOSSInstructionHandler
    • AlpacaStyleInstructionHandler
    • SharegptStyleInstructionHandler

    【必修改】示例值需要根据数据集${dataset}的不同,选择其一。

    • GeneralPretrainHandler:使用预训练的alpaca数据集。
    • GeneralInstructionHandler:使用微调的alpaca数据集。
    • MOSSInstructionHandler:使用微调的moss数据集
    • AlpacaStyleInstructionHandler:使用微调Alpaca数据集
    • SharegptStyleInstructionHandler:使用Sharegpt数据集

    backend_config.convert_ckpt_mg2hf

    null

    训练过程是否将Megatron格式的权重转换为HuggingFace格式的权重。默认转换,设置为null则表示不转换

    断点续训

    backend_config.training. no-load-optim

    backend_config.training. no-load-rng

    false

    是否加载优化器状态

    • false:表示加载
    • true:表示加载

    backend_config.training.finetune

    false

    是否重置优化器状态、重置迭代次数为0;

    • true:是
    • false:否

    backend_config.training,load

    path/to/xxx

    加载训练过程中生成Megatron格式权重.

    预训练

    backend_config.training.stage

    pt

    表示训练类型,预训练设置为pt

    • pt:预训练
    • sft:指令微调

    backend_config.training.is-instruction-dataset

    false

    是否为结构化数据集

    • true:是
    • false:否

    backend_config.training.finetune

    false

    是否重置优化器状态、重置迭代次数为0;

    • true:是
    • false:否
  3. 其他参数设置,详解如下:

    参数

    示例值

    参数说明

    backend_config.training.micro-batch-size

    1

    表示流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。

    该值与tensor-model-parallel-size和pipeline-model-parallel-size以及模型大小相关,可根据实际情况进行调整,简称MBS。

    backend_config.training.global-batch-size

    128

    表示训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长,简称GBS。

    backend_config.training.tensor-model-parallel-size

    8

    表示张量并行,简称TP。

    backend_config.training.pipeline-model-parallel-size

    4

    表示流水线并行。一般此值与训练节点数相等,与权重转换时设置的值相等,简称PP。

    backend_config.training.context-parallel-size

    1

    表示context并行,默认为1;应用于训练长序列文本的模型,如果训练时SEQ_LEN超过32768长度,则推荐增加此值(≥ 2),简称CP。

    backend_config.training.lr

    2.5e-5

    学习率设置。

    backend_config.training.min-lr

    2.5e-6

    最小学习率设置。

    convert_mg2hf_at_last

    true

    是否将Megatron格式的权重转换为HuggingFace格式的权重,默认true。

    true表示转换格式,false表示不转换格式。

    backend_config.training.train-iters

    10

    非必填。表示训练step迭代次数,有默认值

    backend_config.training.save-interval

    1000

    用于模型中间版本地保存。

    • 当参数值>=TRAIN_ITERS时,生成模型仅保存经过TRAIN_ITERS次训练后的最后一个版本。
    • 当参数值<TRAIN_ITERS时,生成模型会每经过SAVE_INTERVAL次,保存一次模型版本。

    模型版本保存次数=TRAIN_ITERS//SAVE_INTERVAL+1

    backend_config.training.save-total-limit

    -1

    用于控制权重版本保存次数。

    • 当参数不设置或<=0时,不会触发效果。
    • 参数值需<=TRAIN_ITERS//SAVE_INTERVAL+1
    • 当参数值>1时,保存模型版本次数与SAVE_TOTAL_LIMIT的值一致。

    backend_config.training.load

    null

    加载权重路径,默认加载权重,null则表示不加载权重。

    • 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)的值进行整除

步骤三:修改config.yaml中的${command}

请根据步骤二:修改训练Yaml配置文件修改超参值后,修改Config.yaml文件中的${command},替换为容器中执行训练的命令,执行命令如下:

单机<可选>:

# 默认8卡
<af_model_name> --exp_name=<exp_name> --output_file_path=<output_file_path> && ascendfactory-cli train <output_file_path> --env.MASTER_ADDR=localhost --env.NNODES=1 --env.NODE_RANK=0
# 指定设备卡数,如2卡
<af_model_name> --exp_name=<exp_name> --output_file_path=<output_file_path> && ASCEND_RT_VISIBLE_DEVICES=0,1 ascendfactory-cli train <output_file_path> --env.MASTER_ADDR=localhost --env.NNODES=1 --env.NODE_RANK=0
# 指定修改yaml中某个参数内容,如af_output_dir等值,使用超参命令传递形式:
<af_model_name> --exp_name=<exp_name> --output_file_path=<output_file_path> && ascendfactory-cli train <output_file_path> --af_output_dir=xxx --env.MASTER_ADDR=localhost --env.NNODES=1 --env.NODE_RANK=0

多机<可选>多机同时执行:

# 使用已修改完成yaml文件,不传参修改参数。
<af_model_name> --exp_name=<exp_name> --output_file_path=<output_file_path> && ascendfactory-cli train <output_file_path> --env.MASTER_ADDR=localhost --env.NNODES=1 --env.NODE_RANK=0 
# 指定修改yaml中某个参数内容,如af_output_dir等值,使用超参命令传递形式:
<af_model_name> --exp_name=<exp_name> --output_file_path=<output_file_path> && ascendfactory-cli train <output_file_path> --env.MASTER_ADDR=<master_addr> --env.NNODES=<nnodes> --env.NODE_RANK=<rank> --af_output_dir=xxx 
  • <output_file_path>:yaml文件输出目录及文件名称,例如/path/to/xxx.yaml。
  • --env.MASTER_ADDR=<master_addr>:主master节点IP,一般选rank 0为主master。
  • --env.NNODES=<nnodes>:训练节点总个数。
  • --env.NODE_RANK=<rank>:节点ID,从0开始,一般选rank 0为主master。

步骤四:根据config.yaml启动作业

启动作业命令如下。首先会根据config.yaml创建pod,继而在pod容器内自动启动训练作业。

kubectl apply -f config.yaml

启动后,可通过以下命令获取所有已创建的pod信息。若pod已全部启动,则状态为:Running。

kubectl get pod -A -o wide

若查看启动作业日志信息,可通过以下命令打印正在启动的日志信息。其中${pod_name}为上述pod信息中的NAME,例如vcjob-main-0。

kubectl logs -f ${pod_name}

等待模型载入

执行训练启动命令后,等待模型载入,当出现“training”关键字时,表示开始训练。训练过程中,训练日志会在最后的Rank节点打印。

图1 等待模型载入

训练完成后,生成的权重文件保存路径为:/mnt/sfs_turbo/llm_train/saved_dir_for_output/llama2-13b/saved_models/

最后,请参考训练结果输出章节查看预训练的日志和性能。

步骤五:删除config.yaml创建出的所有工作负载Pod

若要删除config.yaml创建出的所有工作负载Pod,需要先找到config.yaml所在路径,并执行以下命令。

kubectl delete -f config.yaml

相关文档