配置临终CKPT保存

本章节将指导用户了解临终CheckPoint保存的关键步骤。临终CheckPoint保存的特性介绍请参见临终CKPT保存

构建镜像

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

... 
# MindCluster无损失断点续训适配脚本
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

准备任务YAML

在训练任务YAML中,新增以下字段,开启进程级别恢复。其中process-recover-enable是训练进程恢复的统一开关,打开后训练进程恢复才生效。recover-strategy是训练进程恢复使用的策略,其中的dump代表开启临终CKPT。容器启动命令中增加--enable-high-availability,在ports中增加ttp-port为8000。

临终CKPT保存可以作为进程级别恢复流程中的一个策略,名为“dump”策略。设置到recover-strategy中。示例如下。

... 
metadata:  
   labels:  
     ...  
     process-recover-enable: "on"  
 ... 
...  
   annotations:  
     ...  
     recover-strategy: "dump"       # 任务可用恢复策略(retry:进程级在线恢复;recover:进程级别重调度;dump:保存临终遗言;exit:退出训练),四种策略可随意组合,策略之间由逗号分割
 ... 
  
... 
spec:  
   replicaSpecs:  
      Master: 
         template: 
            spec: 
              containers: 
                 env: 
                   - name: TTP_PORT 
                     value: "8000" 
                   - name: PROCESS_RECOVER 
                     value: "on" 
                 args: […;export ELASTIC_PROCESS_RECOVER_ENABLE=1; --enable-high-availability…] 
                 ports: 
                   - containerPort: 8000 
                     name: ttp-port 
     ...  
     Worker: 
        template: 
          spec: 
            containers: 
               env: 
                 - name: TTP_PORT 
                   value: "8000" 
                 - name: PROCESS_RECOVER 
                   value: "on" 
               args: […export ELASTIC_PROCESS_RECOVER_ENABLE=1;...; --enable-high-availability…] 
               ports: 
                 - containerPort: 8000 
                   name: ttp-port 
 ...

临终CKPT保存也可以单独配置,不作为进程级恢复流程中的策略。

... 
spec:  
   replicaSpecs:  
      Master: 
         template: 
            spec: 
              containers: 
                 env: 
                   - name: TTP_PORT 
                     value: "8000"
                   - name: PROCESS_RECOVER 
                     value: "on" 
                 args: […;export ELASTIC_PROCESS_RECOVER_ENABLE=1;--enable-high-availability…]
                 ports: 
                   - containerPort: 8000 
                     name: ttp-port 
     ...  
     Worker: 
        template: 
          spec: 
            containers: 
               env: 
                 - name: TTP_PORT 
                   value: "8000" 
                 - name: PROCESS_RECOVER 
                   value: "on" 
               args: […;export ELASTIC_PROCESS_RECOVER_ENABLE=1; --enable-high-availability…] 
               ports: 
                 - containerPort: 8000 
                   name: ttp-port 
 ...

适配训练脚本

用户可以在启动训练的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  --monitor_interval 10 " 
 ...

参数说明: