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

执行训练任务(推荐)

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

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

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

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

权重文件支持以下组合方式,用户根据自己实际要求选择:

训练stage

不加载权重

增量训练:加载权重,不加载优化器(默认开启)

断点续训:加载权重+优化器

  • pt
  • sft

ckpt_load_type=0

ckpt_load_type=1

user_converted_ckpt_path=xxx,(转换MG的权重)

ckpt_load_type=2

user_converted_ckpt_path=xxx(训练输出MG权重)

修改、添加代码目录下modellink_performance_cfgs.yaml文件参数配置,样例yaml配置文件结构如下:

  • base块:基础配置块,主要为公共配置参数
  • ModelName块:该模型所需配置的参数,如qwen2.5-7b块
  • exp_name:实验块,训练策略-序列长度所需参数配置

样例yaml文件仅展示常用实验配置,如需其他配置需根据样例自行添加。

根据以下步骤修改yaml文件:

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

    参数

    示例值

    参数说明

    dataset

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

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

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

    processed_data_dir

    /home/ma-user/ws/xxx

    已处理好数据路径目录,如有处理完成数据可设置此参数

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

    参数

    示例值

    参数说明

    model_name_or_path

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

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

    output_dir

    /home/ma-user/ws/save_dir

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

    scirpts_dir

    /home/ma-user/ws/llm_train/AscendFactory/scripts_modellink

    必修改】ModelLink脚本相对或绝对路径,用于方便加载脚本

    ckpt_load_type

    1

    【可选】默认为1

    • 0,不加载权重
    • 1,加载权重不加载优化器状态【增量训练
    • 2,加载权重且加载优化器状态【

      断点续训】详见断点续训和故障快恢说明

    user_converted_ckpt_path

    /home/ma-user/ws/xxx

    可选】已转换Megatron格式权重目录或训练输出结果权重目录,一般搭配断点续训或增量训练。

    • 增量训练:转换Megatron权重,如不指定默认为${output_dir}/converted_hf2mg_weight_TP{tp}PP{pp}目录。
    • 断点续训:训练过程中保存的某个权重,可详见断点续训和故障快恢说明

    train_auto_resume

    false

    可选】是否开启【故障快恢】功能,【true、false】默认false不开启,当训练中断时重启任务会从最新生成权重文件处继续训练。详见断点续训和故障快恢说明

    handler-name

    • GeneralPretrainHandler
    • GeneralInstructionHandler
    • MOSSInstructionHandler
    • AlpacaStyleInstructionHandler
    • SharegptStyleInstructionHandler

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

    • GeneralPretrainHandler:使用预训练的alpaca数据集。
    • GeneralInstructionHandler:使用微调的alpaca数据集。
    • MOSSInstructionHandler:使用微调的moss数据集
    • AlpacaStyleInstructionHandler:使用LLama-Factory模板Alpaca数据集
    • SharegptStyleInstructionHandler:使用LLama-Factory模板Sharegpt数据集
  3. 其他参数设置,详解如下:

    参数

    示例值

    参数说明

    stage

    pt

    表示训练类型。可选择值:

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

    finetuning_type

    full

    表示训练策略。可选择值:

    • full:全参微调
    • lora:lora微调

    prompt-type

    qwen

    数据模板,当使用LLama-Factory模板数据时需指定此参数;

    handler-name为【AlpacaStyleInstructionHandler,SharegptStyleInstructionHandler】需指定。

    micro-batch-size

    1

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

    该值与TP和PP以及模型大小相关,可根据实际情况进行调整。

    global-batch-size

    128

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

    tensor-model-parallel-size

    8

    表示张量并行。

    pipeline-model-parallel-size

    4

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

    context-parallel-size

    1

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

    (此参数目前仅适用于Llama3系列模型长序列训练)

    lr

    2.5e-5

    学习率设置。

    min-lr

    2.5e-6

    最小学习率设置。

    seq-length

    4096

    要处理的最大序列长度。

    convert_mg2hf_at_last

    true

    是否将Megatron格式权重转换为HuggingFace格式权重,默认true【true或false】

    num_train_epochs

    5

    表示训练轮次,根据实际需要修改。一个Epoch是将所有训练样本训练一次的过程。

    train-iters

    10

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

    seed

    1234

    随机种子数。每次数据采样时,保持一致。

    save-interval

    1000

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

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

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

    save-total-limit

    -1

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

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

    use_mc2

    false

    是否开启mc2算子,默认不开启。

    • 开启mc2算子性能能够提升
    • 开启mc2精度可能会产生影响,使用前需确保精度已经和GPU/CPU基线对齐
    • lora微调场景不支持开启mc2

对于Yi系列模型、ChatGLMv3-6B和Qwen系列模型,还需要手动修改训练参数和tokenizer文件,具体请参见训练tokenizer文件说明

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

请根据步骤二 修改训练Yaml配置文件修改超参值后,修改config.yaml中的${command},替换为容器中执行训练的命令。Llama2-70B建议为4机32卡训练。

多机启动

Llama2-70B 为例,修改多机config.yaml模板中的${command}命令如下。多机启动需要在每个节点上执行。MASTER_ADDR为当前ssh远程主机的IP地址(私网IP)。
# 多机执行命令为:ascendfactory-cli train <cfgs_yaml_file> <model_name> <exp_name> --master_addr <master_addr> --num_nodes <nodes> --rank <rank>

apiVersion: batch.volcano.sh/v1alpha1
kind: Job
...
spec:
  ...
  tasks:
  - name: main
    template:
      ...
      spec:
        ...
        containers:
        - image: ${image_name}
          command: ["/bin/sh", "-c"]
          args:
          - cd /mnt/sfs_turbo/llm_train/AscendFactory;
            ascendfactory-cli train <cfgs_yaml_file> <model_name> <exp_name> --master_addr <master_addr> --num_nodes <nodes> --rank <rank>
  - name: work1
    template:
      ...
      spec:
        ...
        containers:
        - image: ${image_name}
          command: ["/bin/sh", "-c"]
          args:
          - cd /mnt/sfs_turbo/llm_train/AscendFactory;
            ascendfactory-cli train <cfgs_yaml_file> <model_name> <exp_name> --master_addr <master_addr> --num_nodes <nodes> --rank <rank>
  - name: work2
    template:
      ...
      spec:
        ...
        containers:
        - image: ${image_name}
          command: ["/bin/sh", "-c"]
          args:
          - cd /mnt/sfs_turbo/llm_train/AscendFactory;
            ascendfactory-cli train <cfgs_yaml_file> <model_name> <exp_name> --master_addr <master_addr> --num_nodes <nodes> --rank <rank>
  - name: work3
    template:
      ...
      spec:
        ...
        containers:
        - image: ${image_name}
          command: ["/bin/sh", "-c"]
          args:
          - cd /mnt/sfs_turbo/llm_train/AscendFactory;
            ascendfactory-cli train <cfgs_yaml_file> <model_name> <exp_name> --master_addr <master_addr> --num_nodes <nodes> --rank <rank>
  • <cfgs_yaml_file>:ModelLink配置yaml文件地址,如代码目录中modellink_performance_cfgs.yaml相对或绝对路径,根据自己要求执行
  • <model_name>:训练模型名,如qwen1.5-7b,需与<cfgs_yaml_file>里面对应
  • <exp_name>:实验名称:指定本次实验的具体配置,还包括数据配置等,比如full, lora等,该名称需要和<cfgs_yaml_file>里面对应。
  • --master_addr <master_addr>:主master节点IP,一般选rank0为主master。
  • --num_nodes <nodes>:训练节点总个数
  • --rank <rank>:节点ID,从0开始,一般选rank0为主master。

单机启动

对于Llama2-7B和Llama2-13B,操作过程与Llama2-70B相同,需要修改单机config.yaml模板中的${command}命令,可以选用单机启动,以 Llama2-13B 为例。

# 单机执行命令为:ascendfactory-cli train <cfgs_yaml_file> <model_name> <exp_name> --master_addr <master_addr> --num_nodes <nodes> --rank <rank>
apiVersion: batch.volcano.sh/v1alpha1
kind: Job
...               
spec:
  ...
  tasks:
  - name: main
    template:
      ...
      spec:
        ...
        containers:
        - image: ${image_name}
          command: ["/bin/sh", "-c"]
          args:
          - cd /mnt/sfs_turbo/llm_train/AscendFactory;
  • <cfgs_yaml_file>:ModelLink配置yaml文件地址,如代码目录中modellink_performance_cfgs.yaml相对或绝对路径,根据自己要求执行
  • <model_name>:训练模型名,如qwen1.5-7b,需与<cfgs_yaml_file>里面对应
  • <exp_name>:实验名称:指定本次实验的具体配置,还包括数据配置等,比如full, lora等,该名称需要和<cfgs_yaml_file>里面对应。

ascendfactory-cli train <cfgs_yaml_file> <model_name> <exp_name>

步骤四 根据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

相关文档