配置进程级在线恢复
本章节将指导用户了解配置进程级在线恢复的关键步骤。进程级在线恢复的特性介绍、使用约束、支持的产品型号及原理请参见进程级在线恢复。
构建镜像
使用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 # 可选,使用优雅容错、Pod级别重调度或进程级别重调度时必须配置以下命令 RUN sed -i '/import logging/i import mindx_elastic.api' $(pip3 show torch | grep Location | awk -F ' ' '{print $2}')/torch/distributed/run.py # 可选,MindSpore框架下,使用进程级在线恢复需配置以下命令 RUN pip install $TASKD_WHL
准备任务YAML
在任务YAML中,新增以下字段,开启进程级别恢复。其中process-recover-enable是训练进程恢复的统一开关,打开后训练进程恢复才生效。recover-strategy是训练进程恢复使用的策略,其中的retry代表开启进程级在线恢复。
... labels: ... process-recover-enable: "on" fault-scheduling: "force" ... ... annotations: ... recover-strategy: "retry" # 任务可用恢复策略(retry:进程级在线恢复;recover:进程级别重调度;recover-in-place: 进程级原地恢复;dump:保存临终遗言;exit:退出训练),5种策略可随意组合,策略之间由逗号分割 ... ... 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"
网络故障执行算子级在线恢复失败,且重执行失败的原因为in-place算子错误、算子不一致,可以使用进程级在线恢复。
- 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='{TTP:1, HCCE:1}' # 开启网络故障的算子级在线恢复 export HCCL_OP_RETRY_ENABLE="L0:0, L1:1, L2:1" # 设置HCCL算子不同层级(L0/L1/L2)的重执行开关状态。重执行是指当通信算子执行报SDMA或者RDMA CQE类型的错误时,HCCL会尝试重新执行此通信算子。
父主题: 配置故障处理