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

配置亚健康热切

本章节将指导用户了解配置亚健康热切的关键步骤。亚健康热切的特性介绍、使用约束、支持的产品型号及原理请参见亚健康热切

构建镜像

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

# MindCluster断点续训适配脚本,TASKD_WHL为TaskD whl安装包的路径,MINDIO_TTP_PKG为MindIO的whl安装包的路径,MINDSPORE_WHL为MindSpore的whl安装包的路径,请根据实际情况填写
# 可选,PyTorch框架下,使用亚健康热切时必须配置以下命令
RUN pip3 install $TASKD_WHL
RUN pip3 install $MINDIO_TTP_PKG
RUN sed -i '/import os/i import taskd.python.adaptor.patch' $(pip3 show torch | grep Location | awk -F ' ' '{print $2}')/torch/distributed/run.py

# 可选,MindSpore框架下,使用亚健康热切需配置以下命令
RUN pip3 install $MINDIO_TTP_PKG
RUN pip3 install $TASKD_WHL
RUN pip3 install $MINDSPORE_WHL

准备任务YAML

在任务YAML中,新增以下加粗字段,配置亚健康热切,并修改容器端口,在所有的Pod下增加TaskD通信使用的端口9601。

... 
metadata:  
   labels:  
     ... 
     subHealthyStrategy: "hotSwitch"
...
ports:                          
   - containerPort: 9601              
     name: taskd-port
...

适配训练脚本

在分布式环境初始化完成,能够获取到全局rank之后,修改训练脚本,在训练脚本中拉起TaskD Manager。

  1. 创建manager.py文件,放在调用训练脚本时的当前目录下,manager.py文件内容如下所示。
    from taskd.api import init_taskd_manager, start_taskd_manager
    import os
     
    job_id=os.getenv("MINDX_TASK_ID")
    node_nums=XX          # 用户填入任务节点总数
    proc_per_node=XX     # 用户填入任务每个节点的训练进程数量
     
    init_taskd_manager({"job_id":job_id, "node_nums": node_nums, "proc_per_node": proc_per_node})
    start_taskd_manager()

    manager.py文件中的参数详细说明请参见def init_taskd_manager(config:dict) -> bool:

  2. 在训练脚本中增加以下代码拉起TaskD Manager。
    export TASKD_PROCESS_ENABLE="on" 
     
    # PyTorch框架下
    if [[ "${RANK}" == 0 ]]; then
        export MASTER_ADDR=${POD_IP} 
        python manager.py &           # 具体执行路径由当前路径决定
    fi 
          
    torchrun ...
     
    # MindSpore框架下
    if [[ "${MS_SCHED_HOST}" == "${POD_IP}" ]]; then 
        python manager.py &   # 具体执行路径由当前路径决定
    fi 
          
    msrun ...

    如果训练中出现报错“the libtaskd.so has not been loaded”,则需在训练脚本中导入LD_PRELOAD环境变量。该环境变量允许系统提前加载指定的so文件。示例如下。

    export LD_PRELOAD=/usr/local/Ascend/cann/lib64/libmspti.so:/usr/local/lib/python3.10/dist-packages/taskd/python/cython_api/libs/libtaskd.so
    • libmspti.so:该so由MindStudio提供,集成在CANN包内。当使用默认安装路径时,路径为:/usr/local/Ascend/cann/lib64/libmspti.so。
    • libtaskd.so:该so由TaskD组件提供,安装该whl包后,路径为:TaskD所在路径/taskd/python/cython_api/libs/libtaskd.so。

      TaskD所在路径可通过以下命令进行查询。回显中的Location字段即为TaskD所在路径。

      pip show taskd