文档
注册

快速入门

指导用户在Atlas 800T A2 训练服务器上实现NodeDAscend Device PluginAscend Docker RuntimeVolcanoClusterDAscend Operator组件的快速安装,同时指导使用整卡调度特性快速下发训练任务。

操作说明

表1 关键步骤说明

操作步骤

操作说明

更多参考

安装组件

Atlas 800T A2 训练服务器为例,手把手带您在昇腾设备上快速安装集群调度组件。

更多安装集群调度组件的参数说明和操作步骤,请参考安装部署章节。

下发训练任务

以一个简单的PyTorch训练任务为例,让您快速了解训练任务下发的操作流程。

更多下发训练任务的参数说明和操作步骤,请参考基础调度章节。

环境准备

安装组件前,需要确保集群环境已经搭建完成。

  • 所有节点已安装Kubernetes,支持的版本为1.16.x~1.25.x。
  • 所有节点已安装Docker,支持18.09.x及以上版本。
  • 参数面组网已搭建完成,即主机上可运行npu-smi以及hccn_tool工具。
  • 所有节点已经安装配套的固件与驱动。
    • NPU驱动和固件版本可通过npu-smi info -t board -i NPU ID命令查询。回显信息中的“Software Version”字段值表示NPU驱动版本,“Firmware Version”字段值表示NPU固件版本。
    • 参见版本配套表,确认固件与驱动的版本与集群调度组件是否配套。

安装组件

  1. 以root用户登录计算或管理节点,创建组件安装目录。
    1. 依次执行以下命令,在计算节点创建安装目录。以下目录仅为示例,请以实际为准。
      mkdir /home/noded
      mkdir /home/devicePlugin
      mkdir /home/Ascend-docker-runtime
    2. 依次执行以下命令,在管理节点创建安装目录。以下目录仅为示例,请以实际为准。
      mkdir /home/ascend-volcano
      mkdir /home/ascend-operator
      mkdir /home/clusterd
      mkdir /home/noded
      mkdir /home/devicePlugin
  2. 下载软件包,以AArch64架构为例,用户需根据实际情况下载对应架构的软件包。
    1. 依次执行以下命令,在计算节点获取NodeDAscend Device PluginAscend Docker Runtime组件安装包并解压。
      cd /home/noded
      wget https://gitee.com/ascend/ascend-noded/releases/download/v6.0.0-RC2/Ascend-mindxdl-noded_6.0.RC2_linux-aarch64.zip
      unzip Ascend-mindxdl-noded_6.0.RC2_linux-aarch64.zip
      
      cd /home/devicePlugin
      wget https://gitee.com/ascend/ascend-device-plugin/releases/download/v6.0.0-RC2/Ascend-mindxdl-device-plugin_6.0.RC2_linux-aarch64.zip
      unzip Ascend-mindxdl-device-plugin_6.0.RC2_linux-aarch64.zip
      
      cd /home/Ascend-docker-runtime
      wget https://gitee.com/ascend/ascend-docker-runtime/releases/download/v6.0.0-RC2/Ascend-docker-runtime_6.0.RC2_linux-aarch64.run
    2. 依次执行以下命令,在管理节点获取VolcanoClusterDAscend Operator组件安装。
      cd /home/ascend-volcano
      wget https://gitee.com/ascend/ascend-for-volcano/releases/download/v6.0.0-RC2/Ascend-mindxdl-volcano_6.0.RC2_linux-aarch64.zip
      unzip Ascend-mindxdl-volcano_6.0.RC2_linux-aarch64.zip
      
      cd /home/ascend-operator
      wget https://mindx.obs.cn-south-1.myhuaweicloud.com/OpenSource/MindX/MindX%206.0.RC2/MindX%20DL%206.0.RC2/Ascend-mindxdl-ascend-operator_6.0.RC2_linux-aarch64.zip
      unzip Ascend-mindxdl-ascend-operator_6.0.RC2_linux-aarch64.zip
      
      cd /home/clusterd
      wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/MindX/MindX%206.0.RC2/Ascend-mindxdl-clusterd_6.0.RC2_linux-aarch64.zip
      unzip Ascend-mindxdl-clusterd_6.0.RC2_linux-aarch64.zip
  3. 制作组件镜像。
    1. 执行以下命令,在计算节点拉取基础镜像。
      docker pull ubuntu:18.04
    2. 依次执行以下命令,在管理节点拉取基础镜像。
      docker pull arm64v8/alpine:latest
      docker tag arm64v8/alpine:latest alpine:latest
      docker pull ubuntu:18.04
    3. 依次执行以下命令,在计算节点制作组件镜像。
      cd /home/noded
      docker build --no-cache -t noded:v6.0.RC2 ./
      
      cd /home/devicePlugin
      docker build --no-cache -t ascend-k8sdeviceplugin:v6.0.RC2 ./
    4. 依次执行以下命令,在管理节点制作组件镜像。
      cd /home/ascend-volcano/volcano-v1.7.0
      docker build --no-cache -t volcanosh/vc-scheduler:v1.7.0 ./ -f ./Dockerfile-scheduler
      docker build --no-cache -t volcanosh/vc-controller-manager:v1.7.0 ./ -f ./Dockerfile-controller
      
      cd /home/ascend-operator
      docker build --no-cache -t ascend-operator:v6.0.RC2 ./
      
      cd /home/clusterd
      docker build --no-cache -t clusterd:v6.0.RC2 ./
  4. 创建节点标签。
    1. 执行以下命令,查询节点名称。
      kubectl get node  
      回显示例如下:
      NAME       STATUS   ROLES           AGE   VERSION
      worker01   Ready    worker    23h   v1.17.3
    2. 依次执行以下命令,为计算节点创建节点标签(如节点名称为“worker01”)。
      kubectl label nodes worker01 node-role.kubernetes.io/worker=worker
      kubectl label nodes worker01 workerselector=dls-worker-node
      kubectl label nodes worker01 host-arch=huawei-arm
      kubectl label nodes worker01 accelerator=huawei-Ascend910
      kubectl label nodes worker01 accelerator-type=module-{xxx}b-8            # {xxx}表示芯片的型号数值
      kubectl label nodes worker01 accelerator-type=nodeDEnable=on
    3. 执行以下命令,为管理节点创建节点标签(如节点名称为“master01”)。
      kubectl label nodes master01 masterselector=dls-master-node
  5. 创建用户。
    1. 依次执行以下命令,在计算节点创建用户名。
      useradd -d /home/hwMindX -u 9000 -m -s /usr/sbin/nologin hwMindX
      usermod -a -G HwHiAiUser hwMindX
    2. 执行以下命令,在管理节点创建用户名。
      useradd -d /home/hwMindX -u 9000 -m -s /usr/sbin/nologin hwMindX
  6. 创建日志目录。不支持用户自定义日志目录。
    1. 依次执行以下命令,在计算节点创建日志目录。
      mkdir -m 755 /var/log/mindx-dl
      chown root:root /var/log/mindx-dl
      mkdir -m 750 /var/log/mindx-dl/devicePlugin
      chown root:root /var/log/mindx-dl/devicePlugin
      mkdir -m 750 /var/log/mindx-dl/noded
      chown hwMindX:hwMindX /var/log/mindx-dl/noded
    2. 依次执行以下命令,在管理节点创建日志目录。
      mkdir -m 755 /var/log/mindx-dl
      chown root:root /var/log/mindx-dl
      mkdir -m 750 /var/log/mindx-dl/volcano-controller
      chown hwMindX:hwMindX /var/log/mindx-dl/volcano-controller
      mkdir -m 750 /var/log/mindx-dl/volcano-scheduler
      chown hwMindX:hwMindX /var/log/mindx-dl/volcano-scheduler
      mkdir -m 750 /var/log/mindx-dl/ascend-operator
      chown hwMindX:hwMindX /var/log/mindx-dl/ascend-operator
      mkdir -m 750 /var/log/mindx-dl/clusterd
      chown hwMindX:hwMindX /var/log/mindx-dl/clusterd
  7. 执行以下命令,创建命名空间。
    kubectl create ns mindx-dl
  8. 安装组件。
    1. 依次执行以下命令,在宿主机上安装Ascend Docker Runtime
      cd /home/Ascend-docker-runtime
      chmod u+x Ascend-docker-runtime_6.0.RC2_linux-aarch64.run
      ./Ascend-docker-runtime_6.0.RC2_linux-aarch64.run --install
      systemctl daemon-reload && systemctl restart docker
    2. 依次执行以下命令,将计算节点的组件启动yaml拷贝到管理节点相应组件的安装目录下。
      cd /home/noded
      scp noded-v6.0.RC2.yaml root@{管理节点IP地址}:/home/noded
      
      cd /home/devicePlugin
      scp device-plugin-volcano-v6.0.RC2.yaml root@{管理节点IP地址}:/home/devicePlugin
    3. 管理节点,依次执行以下命令,安装组件。
      cd /home/ascend-operator
      kubectl apply -f ascend-operator-v6.0.RC2.yaml
      
      cd /home/ascend-volcano/volcano-v1.7.0    # 使用1.4.0版本Volcano需要修改为v1.4.0
      kubectl apply -f volcano-v1.7.0.yaml
      
      cd /home/noded
      kubectl apply -f noded-v6.0.RC2.yaml
      
      cd /home/clusterd
      kubectl apply -f clusterd-v6.0.RC2.yaml
      
      cd /home/devicePlugin
      kubectl apply -f device-plugin-volcano-v6.0.RC2.yaml
      NodeD组件为例,回显示例如下,表示组件安装成功。
      serviceaccount/noded created
      clusterrole.rbac.authorization.k8s.io/pods-noded-role created
      clusterrolebinding.rbac.authorization.k8s.io/pods-noded-rolebinding created
      daemonset.apps/noded created
    4. 管理节点,执行以下命令,查看组件是否启动成功。
      kubectl get pod -n mindx-dl

      NodeD组件为例,回显示例如下,出现Running表示组件启动成功。

      NAME                              READY   STATUS    RESTARTS   AGE
      ...
      noded-fd6t8                       1/1     Running   0          74s
      ...

下发训练任务

  1. 准备镜像。

    昇腾镜像仓库根据系统架构(Arm/x86_64)、下载24.0.RC2版本的ascend-pytorch训练基础镜像,该镜像配套CANN 8.0.RC2,Ascend HDK 24.1.RC2版本。基于训练基础镜像进行修改,将容器中默认用户修改为root。基础镜像中不包含训练脚本、代码等文件,训练时通常使用挂载的方式将训练脚本、代码等文件映射到容器内。

  2. 脚本适配。
    1. 下载PyTorch代码仓中master分支的“ResNet50_ID4149_for_PyTorch”作为训练代码。
    2. 自行准备ResNet-50对应的数据集,使用时请遵守对应规范。
    3. 管理员用户上传数据集到存储节点。进入“/data/atlas_dls/public”目录,将数据集上传到任意位置,如“/data/atlas_dls/public/dataset/resnet50/imagenet”
      root@ubuntu:/data/atlas_dls/public/dataset/resnet50/imagenet# pwd
    4. 1中下载的训练代码解压到本地,将解压后的训练代码中“ModelZoo-PyTorch/PyTorch/built-in/cv/classification/ResNet50_ID4149_for_PyTorch”目录上传至环境,如“/data/atlas_dls/public/code/”路径下。
    5. “/data/atlas_dls/public/code/ResNet50_ID4149_for_PyTorch”路径下,注释掉main.py中的以下代码。
      def main():
          args = parser.parse_args()
          os.environ['MASTER_ADDR'] = args.addr
          #os.environ['MASTER_PORT'] = '29501'  # 注释该行代码
          if os.getenv('ALLOW_FP32', False) and os.getenv('ALLOW_HF32', False):
              raise RuntimeError('ALLOW_FP32 and ALLOW_HF32 cannot be set at the same time!')
          elif os.getenv('ALLOW_HF32', False):
              torch.npu.conv.allow_hf32 = True
          elif os.getenv('ALLOW_FP32', False):
              torch.npu.conv.allow_hf32 = False
              torch.npu.matmul.allow_hf32 = False
    6. 进入MindXDL-deploy仓库,获取“samples/train/basic-training/without-ranktable/pytorch”目录中的train_start.sh,在“/data/atlas_dls/public/code/ResNet50_ID4149_for_PyTorch/scripts”路径下,构造如下的目录结构。
      root@ubuntu:/data/atlas_dls/public/code/ResNet50_ID4149_for_PyTorch/scripts#
      scripts/
           ├── train_start.sh
  3. 准备任务yaml。
    1. 获取pytorch_standalone_acjob_{xxx}b.yaml示例({xxx}表示芯片的数值型号),示例默认为单机单卡任务。
    2. 修改示例yaml。
      apiVersion: mindxdl.gitee.com/v1
      kind: AscendJob
      ...
      spec:
      ...
        replicaSpecs:
          Master:
      ...
              spec:
                nodeSelector:
                  host-arch: huawei-arm
                  accelerator-type: module-{xxx}b-8   # 由原来的card-{xxx}b-2修改为module-{xxx}b-8{xxx}表示芯片的数值型号
                containers:
                - name: ascend 
                  image: pytorch-test:latest     # 修改为步骤1中获取的镜像名称
      ...
                  resources:
                    limits:
                      huawei.com/Ascend910: 1
                    requests:
                      huawei.com/Ascend910: 1
      ...
  4. 执行以下命令,下发单机单卡任务。
    kubectl apply -f pytorch_standalone_acjob_{xxx}b.yaml
  5. 执行以下命令,查看Pod运行情况。
    kubectl get pod --all-namespaces -o wide
    回显示例如下,出现Running表示任务正常运行。
    NAMESPACE        NAME                                       READY   STATUS    RESTARTS   AGE     IP                NODE      NOMINATED NODE   READINESS GATES
    default          default-test-pytorch-master-0              1/1     Running   0          6s      192.168.244.xxx   worker01   <none>           <none>

    若下发训练任务后,任务一直处于Pending状态,可以参见训练任务处于Pending状态,原因:nodes are unavailable或者资源不足时,任务处于Pending状态章节进行处理。

  6. 查看训练结果。
    1. 执行如下命令,查看训练结果。
      kubectl logs -n  命令空间名称 pod名字

      如:

      kubectl logs -n default default-test-pytorch-master-0
    2. 查看训练日志,如果出现如下内容表示训练成功。
      [20240517-11:33:27] [MindXDL Service Log]Training start at 2024-05-17-11:33:27
      /usr/local/python3.9.2/lib/python3.9/site-packages/torch_npu/utils/path_manager.py:79: UserWarning: Warning: The /usr/local/Ascend/ascend-toolkit/latest owner does not match the current user.
        warnings.warn(f"Warning: The {path} owner does not match the current user.")
      /usr/local/python3.9.2/lib/python3.9/site-packages/torch_npu/utils/path_manager.py:79: UserWarning: Warning: The /usr/local/Ascend/ascend-toolkit/8.0.RC2.alpha003/aarch64-linux/ascend_toolkit_install.info owner does not match the current user.
        warnings.warn(f"Warning: The {path} owner does not match the current user.")
      /usr/local/python3.9.2/lib/python3.9/site-packages/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension: 
        warn(f"Failed to load image Python extension: {e}")
      /job/code/main.py:201: UserWarning: You have chosen to seed training. This will turn on the CUDNN deterministic setting, which can slow down your training considerably! You may see unexpected behavior when restarting from checkpoints.
        warnings.warn('You have chosen to seed training. '
      /job/code/main.py:208: UserWarning: You have chosen a specific GPU. This will completely disable data parallelism.
        warnings.warn('You have chosen a specific GPU. This will completely '
      Use GPU: 0 for training
      => creating model 'resnet50'
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词