添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

(可选)启用ranktable动态路由

如果训练作业需要使用ranktable动态路由算法进行网络加速,则可以联系技术支持开启集群的cabinet调度权限。同时,训练作业要满足如下要求才能正常实现ranktable动态路由加速。

  • 训练使用的Python版本是3.7或3.9。
  • 训练作业的任务节点数要大于或等于3。
  • 路由加速的原理是改变rank编号,所以代码中对rank的使用要统一。
  • 将训练作业完成如下修改后,启动训练作业即可实现网络加速。

  • 将训练启动脚本中的 “NODE_RANK="$VC_TASK_INDEX"” 修改为 “NODE_RANK="$RANK_AFTER_ACC"”
  • 将训练启动脚本中的 “MASTER_ADDR="${VC_WORKER_HOSTS%%,*}"” 修改为 “MASTER_ADDR="${MA_VJ_NAME}-${MA_TASK_NAME}-${MA_MASTER_INDEX}.${MA_VJ_NAME}"”
  • 在创建训练作业页面配置环境变量 “ROUTE_PLAN” ,取值为 “true” ,具体操作请参见 管理训练容器环境变量
  • 启动脚本中设置plog生成后存放在 “/home/ma-user/modelarts/log/modelarts-job-{id}/worker-{index}/” 目录,而 “/home/ma-user/modelarts/log/” 目录下的 “*.log” 文件将会被自动上传至ModelArts训练作业的日志目录(OBS)。如果本地相应目录没有生成大小>0的日志文件,则对应的父级目录也不会上传。因此,PyTorch NPU的plog日志是按worker存储的,而不是按rank id存储的(这是区别于MindSpore的)。目前,PyTorch NPU并不依赖rank table file。

    #!/bin/bash
    # MA preset envs
    MASTER_HOST="$VC_WORKER_HOSTS"
    MASTER_ADDR="${VC_WORKER_HOSTS%%,*}"
    NNODES="$MA_NUM_HOSTS"
    NODE_RANK="$VC_TASK_INDEX"
    # also indicates NPU per node
    NGPUS_PER_NODE="$MA_NUM_GPUS"
    # self-define, it can be changed to >=10000 port
    MASTER_PORT="38888"
    # replace ${MA_JOB_DIR}/code/torch_ddp.py to the actutal training script
    PYTHON_SCRIPT=${MA_JOB_DIR}/code/torch_ddp.py
    PYTHON_ARGS=""
    export HCCL_WHITELIST_DISABLE=1
    # set npu plog env
    ma_vj_name=`echo ${MA_VJ_NAME} | sed 's:ma-job:modelarts-job:g'`
    task_name="worker-${VC_TASK_INDEX}"
    task_plog_path=${MA_LOG_DIR}/${ma_vj_name}/${task_name}
    mkdir -p ${task_plog_path}
    export ASCEND_PROCESS_LOG_PATH=${task_plog_path}
    echo "plog path: ${ASCEND_PROCESS_LOG_PATH}"
    # set hccl timeout time in seconds
    export HCCL_CONNECT_TIMEOUT=1800
    # replace ${ANACONDA_DIR}/envs/${ENV_NAME}/bin/python to the actual python
    CMD="${ANACONDA_DIR}/envs/${ENV_NAME}/bin/python -m torch.distributed.launch \
        --nnodes=$NNODES \
        --node_rank=$NODE_RANK \
        --nproc_per_node=$NGPUS_PER_NODE \
        --master_addr=$MASTER_ADDR \
        --master_port=$MASTER_PORT \
        --use_env \
        $PYTHON_SCRIPT \
        $PYTHON_ARGS
    echo $CMD