适配示例

本章节将以LLaMA2模型适配示例(Pytorch场景)为例,指导用户step by step地完成断点续训的适配步骤。

LLAMA2模型适配示例(Pytorch场景)

  • 为保证优雅容错与进程级在线恢复功能的正常使用,请将k8s集群master节点与worker节点的时钟保持一致。
  • 断点续训展示的组件代码为开源代码,其中涉及到相关安全说明请参见安全说明
  • 下文中模型示例代码可能与实际版本存在差异,请以实际版本代码为准。

LLAMA2模型适配示例(Pytorch场景)

表1 LLaMA2脚本适配示例

步骤

示例

准备模型代码及数据集

参考LLaMA2模型适配示例的步骤1-步骤6

获取示例脚本

参考LLaMA2模型适配示例的步骤7

为拉起训练,需要配置相关词表路径、数据集路径、通信网口等

参考LLaMA2模型适配示例的步骤8

适配模型脚本重调度功能

进程级别重调度

参考步骤9-1配置进程级别重调度

进程级在线恢复

参考步骤9-2配置进程级在线恢复

(可选)配置临终CheckPoint恢复功能

参考步骤9-3配置临终CheckPoint恢复功能

下面将以单台Atlas 800T A2 训练服务器为例,介绍LLAMA2模型上如何适配进程级别重调度及进程级在线恢复功能。

示例为双机训练,如需修改训练节点数需配置spec.runPolicy.miAvailabel为Master和Worker的replicas数量之和,spec.runPolicy.minAvailabel值为训练总节点数。

  1. 依次执行以下命令,拉取MindSpeed-LLM源码仓代码。

    git clone https://gitee.com/ascend/MindSpeed-LLM
    cd MindSpeed-LLM
    git checkout 1.0.0

  2. 依次执行以下命令,拉取Megatron源码仓代码。

    git clone https://github.com/NVIDIA/Megatron-LM.git
    cd Megatron-LM
    git checkout core_r0.6.0

  3. (可选) 如需使用进程级别重调度或进程级在线恢复,则在mindspeed_llm/training/training.py代码中增加如下加粗内容。

     ...
    
    class CustomFunction(torch.autograd.Function):
      @staticmethod
      def forward(ctx, input):
          torch.cuda.set_stream(torch.cuda.default_stream())
          return input
    
      @staticmethod
      def backward(ctx, grad):
          torch.cuda.set_stream(torch.cuda.default_stream())
          return grad
    
    def streamHandler():
        input_tensor = torch.empty(1, dtype=torch.float32, device="npu", requires_grad=True)
        grad_tensor = torch.empty(1, dtype=torch.float32, device="npu", requires_grad=True)
        output_tensor = CustomFunction.apply(input_tensor)
        output_tensor.backward(grad_tensor)
    
    def pretrain(train_valid_test_dataset_provider,
    ...
        if args.do_train and args.train_iters > 0:
                if args.enable_high_availability:
                    from mindio_ttp.adaptor import tft_register_processor, tft_train
                    from mindio_ttp.framework_ttp import tft_register_set_stream_handler
                    tft_register_set_stream_handler(streamHandler)
                    tft_register_processor(train_valid_test_dataset_provider, model_provider, model_type)
                    iteration, num_floating_point_operations_so_far = tft_train(train_args, test_data_iterator_list)
                else:
                    iteration, num_floating_point_operations_so_far = train(*train_args)
    ...

  4. 执行以下命令,将Megatron-LM/megatron目录拷贝到MindSpeed-LLM下。

    cp -r megatron ../MindSpeed-LLM/

  5. 自行准备LLAMA2对应的数据集,使用时请遵守对应规范。管理员用户上传数据集到存储节点。

    1. 进入“/data/atlas_dls/public”目录,将数据集上传到任意位置,如“/data/atlas_dls/public/dataset/llama70B_data/”
      root@ubuntu:/data/atlas_dls/public/dataset/llama70B_data/# pwd
      回显示例如下:
      1
      /data/atlas_dls/public/dataset/llama70B_data/
      
    2. 执行du -sh命令,查看数据集大小。
      root@ubuntu:/data/atlas_dls/public/dataset/llama70B_data/# du -sh
      回显示例如下:
      1
      892M
      

  6. 步骤2中下载的训练代码解压到本地,将解压后的训练代码中“MindSpeed-LLM”目录重命名为“LLAMA2_for_PyTorch_2.1_code/”目录。
  7. 将LLAMA2_for_PyTorch_2.1_code文件上传至环境的“/data/atlas_dls/public/code/”路径下,路径应可以被所有需要运行训练任务节点读取。
  8. 进入“MindXDL-deploy”仓库,选择“master”分支,获取“samples/train/resumable-training/fault-tolerance/without-ranktable/pytorch/llama2”目录下的train_start.sh文件,在训练代码中创建“scripts”目录,在管理节点构造成如下的目录结构。

    root@ubuntu:/data/atlas_dls/public/code/LLAMA2_for_PyTorch_2.1_code/scripts#
    scripts/
    └── train_start.sh

  9. 为拉起训练,需要配置相关词表路径、数据集路径、通信网口等。修改/data/atlas_dls/public/code/LLAMA2_for_PyTorch_2.1_code/scripts/train_start.sh文件。

    1. 打开train_start.sh文件。
      root@ubuntu:/data/atlas_dls/public/code/LLAMA2_for_PyTorch_2.1_code/ # vim scripts/train_start.sh
    2. 按“i”进入编辑模式,并根据实际情况修改以下代码中的加粗内容。
      export GLOO_SOCKET_IFNAME=enp189s0f0               # 物理机上可以通信的网口,根据主节点高速网卡实际情况进行配置,如任务yaml中配置hostNetwork为false,则设置为eth0
      export HCCL_SOCKET_IFNAME=enp189s0f0               # 如任务yaml中配置hostNetwork为false,则设置为eth0
      export ELASTIC_PROCESS_RECOVER_ENABLE=1     # 开启Elastic Agent侧进程级别重调度、进程级在线恢复、临终CheckPoint恢复功能功能
      
      LOAD_CHECKPOINT_PATH=/job/code/output/ckpt                         # 设置ckpt保存目录,注意ckpt、日志文件等应在yaml进行挂载到宿主机
      SAVE_CHECKPOINT_PATH=/job/code/output/ckpt                         # 设置ckpt保存目录
      # 数据集路径如:DATA_PATH="/job/data/testcode/dataset/llama_text_document"
      DATA_PATH="/job/data/testcode/dataset/llama_text_document"                    # 配置数据集路径
      # 词表路径如: TOKENIZER_MODEL="/job/data/testcode/dataset/llama/tokenizer.model"
      TOKENIZER_MODEL="/job/data/testcode/dataset/llama/tokenizer.model"           # 配置词表路径
      
      #(可选)自定义配置Elastic Agent运行日志的落盘路径
      mkdir -p /job/code/alllogs/$MINDX_TASK_ID/elasticlogs/elastic-log$XDL_IP-$RANK                #MINDX_TASK_ID 为训练任务ID,使用XDL_IP、RANK区分不同节点Elastic Agent日志
      export ELASTIC_LOG_PATH=/job/code/alllogs/$MINDX_TASK_ID/elasticlogs/elastic-log$XDL_IP-$RANK               #输入Elastic Agent组件运行日志的落盘路径
      
      
      #(可选)配置组件间grpc通信使用安全链接
      export ELASTIC_GRPC_SECURE_CONNECT=on                  #安全链接开关,取值为"on"时,表示打开配置
      export ELASTIC_GRPC_SECURE_CERTIFICATES_PATH=/usr/security/cert   #安全证书地址,请将/usr/security/cert替换为有效的安全证书地址
      • 若pytorch_multinodes_acjob_****.yaml中hostNetwork参数值为false,则需要将上述示例代码中的export GLOO_SOCKET_IFNAME的值改设置为eth0,其他代码保持不变。示例如下:
        ...
        export GLOO_SOCKET_IFNAME=eth0                            #eth0是容器内可以通信的网口
        export HCCL_SOCKET_IFNAME=eth0
        ...
      • 无安全需求场景,无需配置组件间grpc通信安全链接参数ELASTIC_GRPC_SECURE_CONNECT。安全链接开关打开,请同时配置安全证书地址;安全链接开关关闭,安全证书地址无需配置。

  10. 修改训练yaml。进入“MindXDL-deploy”仓库,选择“master”分支,进入“samples/train/resumable-training/fault-tolerance/without-ranktable/pytorch/gpt-3/yamls"目录,下载pytorch_multinodes_acjob_{xxx}b.yaml,根据所需断点续训的功能,修改训练yaml的部分参数。

    yaml中相关数据集、代码挂载如code、data等挂在卷路径请依据实际情况修改。

    1. (可选)开启进程级别重调度。
      开启进程级别重调度需在任务yaml的label中增加process-recover-enable "on"参数,同时在任务yaml的annotations中配置的任务可用恢复策略需包含recover即进程级重调度策略,在任务中需包含环境变量PROCESS_RECOVER=on的取值。在训练训练参数需配置--enable-high-availability --enable-worker-reboot参数,并按实际情况修改任务yaml的如下加粗字段。
      ...
      apiVersion: mindxdl.gitee.com/v1
      kind: AscendJob
      ...
        labels:    
             framework: pytorch   
             ring-controller.atlas: ascend-{xxx}b    
             fault-scheduling: "force"   
             fault-retry-times: "10"          # 开启无条件重试
             pod-rescheduling: "on"           # 开启Pod级别重调度,进程级别重调度依赖此开关
             process-recover-enable: "on"       # 进程级恢复需开启该在线恢复开关
             subHealthyStrategy: "ignore"    # 亚健康处理策略
             tor-affinity: "null"    # 该标签为任务是否使用交换机亲和性调度标签,null或者不写该标签则不适用。large-model-schema表示大模型任务,normal-schema 普通任务
        annotations:
          recover-strategy: "recover"   #任务可用恢复策略为进程级别重调度
      ...
        replicaSpecs:    
            Master:     
              replicas: 1      
              restartPolicy: Never      
              template:        
                  metadata:
      ...
      
                 - name: TTP_PORT
                  value: "8000"      # 用于MindIO通信,请注意上下保持一致
                 - name: PROCESS_RECOVER
                  value: "on"        # 开启进程级别重调度需注入该环境变量
                - name: POD_IP
                  valueFrom: 
                    fieldRef: 
                      fieldPath: status.podIP
              command:                              # training command, which can be modified             
              - /bin/bash              
              - -c             
              args: [ "cd /job/code;source /usr/local/Ascend/ascend-toolkit/set_env.sh;export LOGLEVEL=DEBUG;chmod +x scripts/train_start.sh; bash scripts/train_start.sh /job/code /job/output pretrain_gpt.py  --tensor-model-parallel-size 4 --pipeline-model-parallel-size 1  --sequence-parallel --num-layers 32 --hidden-size 4096 --ffn-hidden-size 11008  --num-attention-heads 32 --tokenizer-type Llama2Tokenizer --seq-length 4096 --max-position-embeddings 4096 --micro-batch-size 1 --global-batch-size 256 --make-vocab-size-divisible-by 1 --lr 1.25e-6  --train-iters 5000 --lr-decay-style cosine --untie-embeddings-and-output-weights --disable-bias-linear --attention-dropout 0.0 --init-method-std 0.01 --hidden-dropout 0.0 --position-embedding-type rope --normalization RMSNorm --use-fused-rmsnorm --swiglu --use-flash-attn --no-masked-softmax-fusion --attention-softmax-in-fp32 --min-lr 1.25e-7 --weight-decay 1e-1 --lr-warmup-fraction 0.01 --clip-grad 1.0 --adam-beta1 0.9 --initial-loss-scale 65536 --adam-beta2 0.95 --no-gradient-accumulation-fusion --no-load-optim --no-load-rng --use-distributed-optimizer --use-fused-swiglu --use-fused-rotary-pos-emb --overlap-grad-reduce --bf16 --enable-high-availability --enable-worker-reboot --data-path $DATA_PATH --split 949,50,1 --log-interval 1 --save-interval 20 --eval-interval 1000 --eval-iters 10 --distributed-backend nccl"]             
               # enable-high-availability:故障快速恢复特性开关,默认关闭,配置后即开启临终遗言功能。
               # enable-hbmfault-repair:  进程级在线恢复功能开关,默认关闭,配置后对片上内存进行故障检测,并完成在线修复。需同时开启enable-high-availability。
               # enable-worker-reboot:进程级别重调度功能开关,默认关闭,配置后在发生一般性故障时,进行进程级别调度,继续训练。需同时开启enable-high-availability。
               ports:                          # default value 
                 - containerPort: 2222 
                 name: ascendjob-port if not set              
                 - containerPort: 8000    # 用于MindIO通信,请注意上下保持一致
                 name: ttp-port
               resources:
                 limits:
                   huawei.com/Ascend910: 8
                 requests:
                   huawei.com/Ascend910: 8
      
      ...
      
      ...
        replicaSpecs:    
            Worker:     
              replicas: 1      
              restartPolicy: Never      
              template:        
                  metadata:
      ...
                  env: 
                  - name: TTP_PORT
                  value: "8000"  # 用于MindIO通信,请注意上下保持一致
              command:                           # training command, which can be modified             
              - /bin/bash              
              - -c            
              args: [ "cd /job/code;source /usr/local/Ascend/ascend-toolkit/set_env.sh;export PROCESS_RECOVER=on; export LOGLEVEL=DEBUG;chmod +x scripts/train_start.sh; bash scripts/train_start.sh /job/code /job/output pretrain_gpt.py  --tensor-model-parallel-size 4 --pipeline-model-parallel-size 1  --sequence-parallel --num-layers 32 --hidden-size 4096 --ffn-hidden-size 11008  --num-attention-heads 32 --tokenizer-type Llama2Tokenizer --seq-length 4096 --max-position-embeddings 4096 --micro-batch-size 1 --global-batch-size 256 --make-vocab-size-divisible-by 1 --lr 1.25e-6  --train-iters 5000 --lr-decay-style cosine --untie-embeddings-and-output-weights --disable-bias-linear --attention-dropout 0.0 --init-method-std 0.01 --hidden-dropout 0.0 --position-embedding-type rope --normalization RMSNorm --use-fused-rmsnorm --swiglu --use-flash-attn --no-masked-softmax-fusion --attention-softmax-in-fp32 --min-lr 1.25e-7 --weight-decay 1e-1 --lr-warmup-fraction 0.01 --clip-grad 1.0 --adam-beta1 0.9 --initial-loss-scale 65536 --adam-beta2 0.95 --no-gradient-accumulation-fusion --no-load-optim --no-load-rng --use-distributed-optimizer --use-fused-swiglu --use-fused-rotary-pos-emb --overlap-grad-reduce --bf16 --enable-high-availability --enable-worker-reboot --data-path $DATA_PATH --split 949,50,1 --log-interval 1 --save-interval 20 --eval-interval 1000 --eval-iters 10 --distributed-backend nccl"]            
               ports:                          # default value 
                 - containerPort: 2222 
                 name: ascendjob-port if not set              
                 - containerPort: 8000    # 用于MindIO通信,请注意上下保持一致
                 name: ttp-port
      ...
               resources:
                 limits:
                   huawei.com/Ascend910: 8
                 requests:
                   huawei.com/Ascend910: 8
    2. (可选)开启进程级在线恢复。
      开启Step级别重计算需在任务label中开启process-recover-enable: "on";在任务annotations中配置的任务可用恢复策略中需包含retry即进程级在线恢复策略;在训练参数中需要启用--enable-high-availability --enable-hbmfault-repair两参数。并按实际情况修改任务yaml的如下加粗字段。
      ...
      apiVersion: mindxdl.gitee.com/v1
      kind: AscendJob
      ...
        labels:    
             framework: pytorch   
             ring-controller.atlas: ascend-{xxx}b    
             fault-scheduling: "force"   
       
       
             process-recover-enable: "on"      # 进程级在线恢复需开启该开关
             tor-affinity: "null" #该标签为任务是否使用交换机亲和性调度标签,null或者不写该标签则不适用。large-model-schema表示大模型任务,normal-schema 普通任务
        annotations:
          recover-strategy: "retry"   
      ...
        replicaSpecs:    
            Master:     
              replicas: 1      
              restartPolicy: Never      
              template:        
                  metadata:
      ...
      
                 - name: TTP_PORT
                  value: "8000"      # 用于MindIO通信,请注意上下保持一致
                - name: POD_IP
                  valueFrom: 
                    fieldRef: 
                      fieldPath: status.podIP
              command:                              # training command, which can be modified             
              - /bin/bash              
              - -c             
              args: [ "cd /job/code;source /usr/local/Ascend/ascend-toolkit/set_env.sh; export LOGLEVEL=DEBUG;chmod +x scripts/train_start.sh; bash scripts/train_start.sh /job/code /job/output pretrain_gpt.py  --tensor-model-parallel-size 4 --pipeline-model-parallel-size 1  --sequence-parallel --num-layers 32 --hidden-size 4096 --ffn-hidden-size 11008  --num-attention-heads 32 --tokenizer-type Llama2Tokenizer --seq-length 4096 --max-position-embeddings 4096 --micro-batch-size 1 --global-batch-size 256 --make-vocab-size-divisible-by 1 --lr 1.25e-6  --train-iters 5000 --lr-decay-style cosine --untie-embeddings-and-output-weights --disable-bias-linear --attention-dropout 0.0 --init-method-std 0.01 --hidden-dropout 0.0 --position-embedding-type rope --normalization RMSNorm --use-fused-rmsnorm --swiglu --use-flash-attn --no-masked-softmax-fusion --attention-softmax-in-fp32 --min-lr 1.25e-7 --weight-decay 1e-1 --lr-warmup-fraction 0.01 --clip-grad 1.0 --adam-beta1 0.9 --initial-loss-scale 65536 --adam-beta2 0.95 --no-gradient-accumulation-fusion --no-load-optim --no-load-rng --use-distributed-optimizer --use-fused-swiglu --use-fused-rotary-pos-emb --overlap-grad-reduce --bf16 --enable-high-availability --enable-hbmfault-repair --data-path $DATA_PATH --split 949,50,1 --log-interval 1 --save-interval 20 --eval-interval 1000 --eval-iters 10 --distributed-backend nccl"]             
               # enable-high-availability:故障快速恢复特性开关,默认关闭,配置后即开启临终遗言功能。
               # enable-hbmfault-repair:  进程级在线恢复功能开关,默认关闭,配置后对片上内存进行故障检测,并完成在线修复。需同时开启enable-high-availability。
               # enable-worker-reboot:进程级别重调度功能开关,默认关闭,配置后在发生一般性故障时,进行进程级重启修复,继续训练。需同时开启enable-high-availability。
               ports:                          # default value 
                 - containerPort: 2222 
                 name: ascendjob-port if not set              
                 - containerPort: 8000    # 用于MindIO通信,请注意上下保持一致
                 name: ttp-port
               resources:
                 limits:
                   huawei.com/Ascend910: 8
                 requests:
                   huawei.com/Ascend910: 8
      
      ...
      
      ...
        replicaSpecs:    
            Worker:     
              replicas: 1      
              restartPolicy: Never      
              template:        
                  metadata:
      ...
                  env: 
                  - name: TTP_PORT
                  value: "8000"  # 用于MindIO通信,请注意上下保持一致
              command:                           # training command, which can be modified             
              - /bin/bash              
              - -c            
              args: [ "cd /job/code;source /usr/local/Ascend/ascend-toolkit/set_env.sh; export LOGLEVEL=DEBUG;chmod +x scripts/train_start.sh; bash scripts/train_start.sh /job/code /job/output pretrain_gpt.py  --tensor-model-parallel-size 4 --pipeline-model-parallel-size 1  --sequence-parallel --num-layers 32 --hidden-size 4096 --ffn-hidden-size 11008  --num-attention-heads 32 --tokenizer-type Llama2Tokenizer --seq-length 4096 --max-position-embeddings 4096 --micro-batch-size 1 --global-batch-size 256 --make-vocab-size-divisible-by 1 --lr 1.25e-6  --train-iters 5000 --lr-decay-style cosine --untie-embeddings-and-output-weights --disable-bias-linear --attention-dropout 0.0 --init-method-std 0.01 --hidden-dropout 0.0 --position-embedding-type rope --normalization RMSNorm --use-fused-rmsnorm --swiglu --use-flash-attn --no-masked-softmax-fusion --attention-softmax-in-fp32 --min-lr 1.25e-7 --weight-decay 1e-1 --lr-warmup-fraction 0.01 --clip-grad 1.0 --adam-beta1 0.9 --initial-loss-scale 65536 --adam-beta2 0.95 --no-gradient-accumulation-fusion --no-load-optim --no-load-rng --use-distributed-optimizer --use-fused-swiglu --use-fused-rotary-pos-emb --overlap-grad-reduce --bf16 --enable-high-availability --enable-hbmfault-repair --data-path $DATA_PATH --split 949,50,1 --log-interval 1 --save-interval 20 --eval-interval 1000 --eval-iters 10 --distributed-backend nccl"]            
               ports:                          # default value 
                 - containerPort: 2222 
                 name: ascendjob-port if not set              
                 - containerPort: 8000    # 用于MindIO通信,请注意上下保持一致
                 name: ttp-port
      ...
               resources:
                 limits:
                   huawei.com/Ascend910: 8
                 requests:
                   huawei.com/Ascend910: 8
      
      
    3. (可选)开启临终CheckPoint恢复功能。
      • 临终遗言功能需要根据模型并行策略进行保存,若数据并行域数量等于1,则不支持使用临终遗言功能。
      • 当前临终遗言功能仅支持基于Megatron框架的模型,非Megatron框架的模型不支持使用临终遗言功能。
      • 单节点任务出现节点故障时,无法保存临终ckpt。
      • 仅支持在训练进程异常或者故障时,使用临终遗言,保存临终ckpt文件。
      • 更多临终遗言涉及到的周边约束说明,请参见《MindCluster 故障恢复加速》的“约束与限制”章节

      在任务annotations中配置的任务可用恢复策略中需取值为dump;在训练参数中需要启用--enable-high-availability参数。并按实际情况修改任务yaml的如下加粗字段。

      ...
      apiVersion: mindxdl.gitee.com/v1
      kind: AscendJob
      ...
        labels:    
             framework: pytorch   
             ring-controller.atlas: ascend-{xxx}b    
             fault-scheduling: "force"   
             tor-affinity: "null" #该标签为任务是否使用交换机亲和性调度标签,null或者不写该标签则不适用。large-model-schema表示大模型任务,normal-schema 普通任务
        annotations:
          recover-strategy: "dump"   
      ...
        replicaSpecs:    
            Master:     
              replicas: 1      
              restartPolicy: Never      
              template:        
                  metadata:
      ...
      
                 - name: TTP_PORT
                  value: "8000"      # 用于MindIO通信,请注意上下保持一致
                - name: POD_IP
                  valueFrom: 
                    fieldRef: 
                      fieldPath: status.podIP
              command:                              # training command, which can be modified             
              - /bin/bash              
              - -c             
              args: [ "cd /job/code;source /usr/local/Ascend/ascend-toolkit/set_env.sh; export LOGLEVEL=DEBUG;chmod +x scripts/train_start.sh; bash scripts/train_start.sh /job/code /job/output pretrain_gpt.py  --tensor-model-parallel-size 4 --pipeline-model-parallel-size 1  --sequence-parallel --num-layers 32 --hidden-size 4096 --ffn-hidden-size 11008  --num-attention-heads 32 --tokenizer-type Llama2Tokenizer --seq-length 4096 --max-position-embeddings 4096 --micro-batch-size 1 --global-batch-size 256 --make-vocab-size-divisible-by 1 --lr 1.25e-6  --train-iters 5000 --lr-decay-style cosine --untie-embeddings-and-output-weights --disable-bias-linear --attention-dropout 0.0 --init-method-std 0.01 --hidden-dropout 0.0 --position-embedding-type rope --normalization RMSNorm --use-fused-rmsnorm --swiglu --use-flash-attn --no-masked-softmax-fusion --attention-softmax-in-fp32 --min-lr 1.25e-7 --weight-decay 1e-1 --lr-warmup-fraction 0.01 --clip-grad 1.0 --adam-beta1 0.9 --initial-loss-scale 65536 --adam-beta2 0.95 --no-gradient-accumulation-fusion --no-load-optim --no-load-rng --use-distributed-optimizer --use-fused-swiglu --use-fused-rotary-pos-emb --overlap-grad-reduce --bf16 --enable-high-availability  --data-path $DATA_PATH --split 949,50,1 --log-interval 1 --save-interval 20 --eval-interval 1000 --eval-iters 10 --distributed-backend nccl"]             
               # enable-high-availability:故障快速恢复特性开关,默认关闭,配置后即开启临终遗言功能。
               ports:                          # default value 
                 - containerPort: 2222 
                 name: ascendjob-port if not set              
                 - containerPort: 8000    # 用于MindIO通信,请注意上下保持一致
                 name: ttp-port
               resources:
                 limits:
                   huawei.com/Ascend910: 8
                 requests:
                   huawei.com/Ascend910: 8
      
      ...
      
      ...
        replicaSpecs:    
            Worker:     
              replicas: 1      
              restartPolicy: Never      
              template:        
                  metadata:
      ...
                  env: 
                  - name: TTP_PORT
                  value: "8000"  # 用于MindIO通信,请注意上下保持一致
              command:                           # training command, which can be modified             
              - /bin/bash              
              - -c            
              args: [ "cd /job/code;source /usr/local/Ascend/ascend-toolkit/set_env.sh; export LOGLEVEL=DEBUG;chmod +x scripts/train_start.sh; bash scripts/train_start.sh /job/code /job/output pretrain_gpt.py  --tensor-model-parallel-size 4 --pipeline-model-parallel-size 1  --sequence-parallel --num-layers 32 --hidden-size 4096 --ffn-hidden-size 11008  --num-attention-heads 32 --tokenizer-type Llama2Tokenizer --seq-length 4096 --max-position-embeddings 4096 --micro-batch-size 1 --global-batch-size 256 --make-vocab-size-divisible-by 1 --lr 1.25e-6  --train-iters 5000 --lr-decay-style cosine --untie-embeddings-and-output-weights --disable-bias-linear --attention-dropout 0.0 --init-method-std 0.01 --hidden-dropout 0.0 --position-embedding-type rope --normalization RMSNorm --use-fused-rmsnorm --swiglu --use-flash-attn --no-masked-softmax-fusion --attention-softmax-in-fp32 --min-lr 1.25e-7 --weight-decay 1e-1 --lr-warmup-fraction 0.01 --clip-grad 1.0 --adam-beta1 0.9 --initial-loss-scale 65536 --adam-beta2 0.95 --no-gradient-accumulation-fusion --no-load-optim --no-load-rng --use-distributed-optimizer --use-fused-swiglu --use-fused-rotary-pos-emb --overlap-grad-reduce --bf16 --enable-high-availability  --data-path $DATA_PATH --split 949,50,1 --log-interval 1 --save-interval 20 --eval-interval 1000 --eval-iters 10 --distributed-backend nccl"]            
               ports:                          # default value 
                 - containerPort: 2222 
                 name: ascendjob-port if not set              
                 - containerPort: 8000    # 用于MindIO通信,请注意上下保持一致
                 name: ttp-port
      ...
               resources:
                 limits:
                   huawei.com/Ascend910: 8
                 requests:
                   huawei.com/Ascend910: 8
      
      
    4. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    • 首次使用megatron的环境需要在线编译so,若自动编译so失败导致首次训练拉起失败,请确保容器编译环境能够编译此so,同时检查LLAMA2_for_PyTorch_2.1_code/megatron/core/datasets目录下是否已编译生成helpers.cpython-{version}-{arch}-linux-gnu.so文件。检查办法如下:在训练首次拉起时在容器中该目录下执行make命令,查看是否生成该so文件。
    • 开启编译优化的情况下,若出现编译缓存目录不存在的报错,请进行以下检查:
      • 检查指定的编译目录路径是否存在且有效。
      • 检查执行用户是否具有该编译目录的读、写、可执行权限。