昇腾社区首页
中文
注册
开发者
下载

配置进程级在线恢复

本章节将指导用户了解配置进程级在线恢复的关键步骤。进程级在线恢复的特性介绍、使用约束、支持的产品型号及原理请参见进程级在线恢复

构建镜像

使用Dockerfile构建容器镜像,新增启动命令。

# MindCluster断点续训适配脚本,MINDX_ELASTIC_PKG为Elastic Agent whl安装包的路径,MINDIO_TTP_PKG为MindIO的whl安装包的路径,请根据实际情况填写
RUN pip3 install $MINDX_ELASTIC_PKG 
RUN pip3 install $MINDIO_TTP_PKG
# 可选,PyTorch框架下,使用优雅容错、Pod级别重调度或进程级别重调度时必须配置以下命令
RUN sed -i '/import os/i import mindx_elastic.api' $(pip3 show torch | grep Location | awk -F ' ' '{print $2}')/torch/distributed/run.py
# 可选,使用PyTorch 2.6.0及以上版本,并使用优雅容错、Pod级别重调度或进程级别重调度时需要配置以下命令
RUN sed -i '/if _torchelastic_use_agent_store():/i\    \if _torchelastic_use_agent_store():\n\        from torch.distributed import PrefixStore\n\        attempt = os.environ["TORCHELASTIC_RESTART_COUNT"]\n\        tcp_store = TCPStore(hostname, port, world_size, False, timeout)\n\        return PrefixStore(f"\/worker\/attempt_{attempt}", tcp_store)' $(pip3 show torch | grep Location | awk -F ' ' '{print $2}')/torch/distributed/rendezvous.py

# 可选,MindSpore框架下,使用进程级在线恢复需配置以下命令
RUN pip install $TASKD_WHL

准备任务YAML

在任务YAML中,新增以下字段,开启进程级别恢复。recover-strategy是训练进程恢复使用的策略,其中的retry代表开启进程级在线恢复。

...  
   labels:  
     ...  
     process-recover-enable: "on"  
     fault-scheduling: "grace"
 ... 
...  
   annotations:  
     ...  
     recover-strategy: "retry"    # 任务可用恢复策略(retry:进程级在线恢复;recover:进程级别重调度;recover-in-place: 进程级原地恢复;elastic-training:弹性训练;dump:保存临终遗言;exit:退出训练),6种策略可随意组合,策略之间由逗号分割
 ... 
...
spec:
  replicaSpecs:
    Master:
      template:
        spec:
          containers:
          - name: ascend # do not modify
            env:
              - name: PROCESS_RECOVER         # 开启进程级在线恢复需注入该环境变量
                value: "on"
            args:
              - | 
                ...
                export ELASTIC_PROCESS_RECOVER_ENABLE=1;
                ... 
                bash scripts/train_start.sh /job/code /job/output pretrain_gpt.py \
                  ...
                  --enable-high-availability \
                  --enable-hbmfault-repair \
                  ...
    Worker:
      template:
        spec:
          containers:
          - name: ascend # do not modify
            env:
              - name: PROCESS_RECOVER         # 开启进程级在线恢复需注入该环境变量
                value: "on"
            args:
              - |
                ...
                export ELASTIC_PROCESS_RECOVER_ENABLE=1;
                ...
                bash scripts/train_start.sh /job/code /job/output pretrain_gpt.py \
                  ...
                  --enable-high-availability \
                  --enable-hbmfault-repair \
                  ...
...
MindSpore场景下,用户需修改模型参数配置YAML。打开LLAMA2_for_MS_code/configs/llama2/pretrain_llama2_7b.yaml文件,在代码中增加以下加粗字段。
# mindspore context init config
context:
  mode: 0  #0--Graph Mode; 1-Pynative Mode
  device_target: "Ascend"
  graph_kernel_flags: "--disable_pass=cluster.floatstatus_fusion,preprocess.depend_elimination"
  max_call_depth: 10000
  max_device_memory: "59GB"
  mempool_block_size: "59GB"
  save_graphs: True
  save_graphs_path: "./graph"
  device_id: 0
  jit_config:
    jit_level: "O1"
  memory_optimize_level: "00"
  ascend_config:
    hccl_watchdog: False

适配训练脚本

(可选)用户可以在启动训练的shell脚本(例如train_start.sh)中,新增max_restarts和monitor_interval参数,示例如下。

... 
   logger "server id is: ""${server_id}" 
   if [ "${framework}" == "PyTorch" ]; then 
     get_env_for_pytorch_multi_node_job 
     DISTRIBUTED_ARGS="--nproc_per_node $GPUS_PER_NODE --nnodes $NNODES --node_rank $NODE_RANK --master_addr $MASTER_ADDR --master_port $MASTER_PORT --max_restarts 5 --monitor_interval 10" 
  • MindSpeed场景下,用户需修改训练启动脚本train_start.sh,在代码中增加如下加粗字段,示例如下。
    export HCCL_OP_RETRY_ENABLE="L0:0, L1:1, L2:1"   # 开启HCCL算子的重执行特性(算子级在线恢复)。重执行是指当执行通信算子时报SDMA或者RDMA CQE类型的错误,HCCL会尝试重新执行此通信算子。
    export HCCL_ASYNC_ERROR_HANDLING=0
  • MindFormers场景下,用户需修改训练启动脚本msrun_launcher.sh文件,在代码中增加如下加粗字段,示例如下。
    export MS_ENABLE_TFT='{UCE:1, HCCE:1}'     # 分别开启片上内存故障进程级在线恢复和网络故障进程级在线恢复
    export HCCL_OP_RETRY_ENABLE="L0:0, L1:1, L2:1"  # 此环境变量用于配置是否开启HCCL算子的重执行特性。重执行是指当执行通信算子时报SDMA或者RDMA CQE类型的错误,HCCL会尝试重新执行此通信算子。

用户若要测试进程级在线恢复功能,可参考进程级在线恢复验证进行配置。