更新时间:2024-05-07 GMT+08:00
分享

在k8s集群配置Ascend使用环境

前提条件

  • 专属资源池未适配1.23以上的CCE版本,故在本指导适用于1.23版本CCE。
  • 已购买资源,购买资源步骤请参考集群资源购买

Step 1:登录节点

(推荐)方式1:通过绑定公网ip的方式

客户可以为需要登录的节点绑定公网ip,然后可以通过Xshell、MobaXterm等bash工具登录节点。

  1. 使用华为云账号登录CCE管理控制台
  2. 在CCE集群详情页面,单击“节点管理”页签,在“节点”页签中单击需要登录的节点名称,跳转至弹性云服务器页面。

    图1 节点管理

  3. 绑定弹性公网IP。

    若已有未绑定的弹性公网IP,直接选择即可。如果没有可用的弹性公网IP,需要先购买弹性公网IP。
    图2 弹性公网IP
    单击“购买弹性公网IP”,进入购买页。
    图3 绑定弹性公网IP
    图4 购买弹性公网IP
    图5 未绑定的弹性公网IP

    完成购买后,返回弹性云服务器页面,刷新列表。

    图6 刷新列表

    选择刚才创建的弹性公网IP,单击“确定”。

    图7 绑定弹性公网IP

  4. 绑定完成后,通过MobaXterm、Xshell登录。以MobaXterm为例,填入弹性公网IP,登录节点。

    图8 登录节点

方式2:通过华为云自带的远程登录功能

  1. 使用华为云账号登录CCE管理控制台
  2. 在CCE集群详情页面,单击“节点管理”页签,在“节点”页签中单击需要登录的节点名称,跳转至弹性云服务器页面。

    图9 节点管理

  3. 单击“远程登录”,在弹出的窗口中,单击“CloudShell登录”。

    图10 远程登录

  4. 在CloudShell中设置密码等参数后,单击“连接”即可登录节点,CloudShell介绍可参见远程登录Linux弹性云服务器(CloudShell方式)

Step 2:配置kubectl工具

  1. 进入专属资源池。

    图11 专属资源池页签

  2. 点击创建的专属资源池,进入专属资源池详情页面,点击对应的CCE集群,进入CCE集群详情页面。

    图12 专属资源池详情

  3. 在CCE集群详情页面中,在“集群信息”找到“连接信息”。

    图13 链接信息

  4. 使用kubectl工具。

    • 若通过内网使用kubectl工具,需要将kubectl工具安装在和集群在相同vpc下的某一台机器上。点击连接信息下kubectl后的“配置”按钮,根据界面提示使用kubectl工具。
      图14 通过内网使用kubectl工具
    • 通过公网使用kubectl工具,可以将kubectl安装在任一台可以访问公网的机器。
      首先需要绑定公网地址,点击公网地址后的“绑定”按钮。
      图15 绑定公网地址

      选择公网IP后单击“确定”,完成公网IP绑定。如果没有可选的公网IP,单击“创建弹性IP”跳至弹性公网IP页面进行创建。

      绑定完成后,点击连接信息下kubectl后的“配置”按钮,根据界面提示使用kubectl工具。

  5. 验证。

    在安装了kubectl工具的机器上执行如下命令,显示集群节点即为成功。

    kubectl get node

Step 3:准备业务基础镜像

当前推荐的开发模式是在物理机上启动自己的docker容器进行开发。容器镜像可以使用自己的实际业务镜像,也可以使用ModelArts提供的基础镜像,ModelArts提供两种基础镜像:Ascend+PyTorch镜像、Ascend+Mindspore镜像。

  1. 根据所需要的环境拉取镜像。

    • 拉取Ascend+PyTorch镜像:
      # 配套Snt9b的容器镜像,包含pytorch 1.11 + mindspore-lite 2.2.0 + Ascend CANN Toolkit 7.0.1
      docker pull swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_1_11_ascend:pytorch_1.11.0-cann_7.0.1-py_3.9-euler_2.10.7-aarch64-snt9b-20231107190844-50a1a83
    • 拉取Ascend+Mindspore镜像:
      # 配套Snt9b的容器镜像,包含mindspore 2.2.0 + mindspore-lite 2.2.0 + Ascend CANN Toolkit 7.0.1
      docker pull swr.cn-southwest-2.myhuaweicloud.com/atelier/mindspore_2_2_ascend:mindspore_2.2.0-cann_7.0.1-py_3.9-euler_2.10.7-aarch64-snt9b-20231107190844-50a1a83

  2. 启动容器镜像,注意多人多容器共用机器时,需要将卡号做好预先分配,不能使用其他容器已使用的卡号:

    #  启动容器,请注意指定容器名称、镜像信息。ASCEND_VISIBLE_DEVICES指定容器要用的卡,0-1,3代表0 1 3这3块卡,-用于指定范围
    # -v /home:/home_host是指将宿主机home目录挂载到容器home_host目录,建议在容器中使用该挂载目录进行代码和数据的存储以便持久化
    docker run -itd --cap-add=SYS_PTRACE -e ASCEND_VISIBLE_DEVICES=0  -v /home:/home_host -p 51234:22 -u=0 --name 自定义容器名称  上一步拉取的镜像SWR地址  /bin/bash

  3. 进入容器:

    docker exec -ti 上一命令中的自定义容器名称 bash

  4. 进入conda环境:

    source /home/ma-user/.bashrc
    cd ~

  5. 查看容器中可以使用的卡信息:

    npu-smi info
    如果命令报如下错误,则代表容器启动时指定的“ASCEND_VISIBLE_DEVICES”卡号已被其他容器占用,此时需要重新选择卡号并重新启动新的容器。
    图16 报错信息

  6. npu-smi info检测正常后,可以执行一段命令进行简单的容器环境测试,能正常输出运算结果代表容器环境正常可用。

    • pytorch镜像测试:
      python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);"
    • mindspore镜像测试:
      # 由于mindspore的run_check程序当前未适配Snt9B,需要先设置2个环境变量才能测试
      unset MS_GE_TRAIN 
      unset MS_ENABLE_GE
      python -c "import mindspore;mindspore.set_context(device_target='Ascend');mindspore.run_check()"
      # 测试完需要恢复环境变量,实际跑训练业务的时候需要用到
      export MS_GE_TRAIN=1
      export MS_ENABLE_GE=1
    图17 进入conda环境并进行测试

Step 4:docker run方式启动任务

Snt9B集群在纳管到cce集群后,都会自动安装docker,如果仅做测试验证,可以不需要通过创建deployment或者volcano job的方式,直接启动容器进行测试。训练测试用例使用NLP的bert模型,详细代码和指导可参考Bert

  1. 拉取镜像。本测试镜像为bert_pretrain_mindspore:v1,已经把测试数据和代码打进镜像中。

    docker pull swr.cn-southwest-2.myhuaweicloud.com/os-public-repo/bert_pretrain_mindspore:v1
    docker tag swr.cn-southwest-2.myhuaweicloud.com/os-public-repo/bert_pretrain_mindspore:v1 bert_pretrain_mindspore:v1

  2. 启动容器。

    docker run -tid --privileged=true \
    -u 0 \
    -v /dev/shm:/dev/shm \
    --device=/dev/davinci0 \
    --device=/dev/davinci1 \
    --device=/dev/davinci2 \
    --device=/dev/davinci3 \
    --device=/dev/davinci4 \
    --device=/dev/davinci5 \
    --device=/dev/davinci6 \
    --device=/dev/davinci7 \
    --device=/dev/davinci_manager \
    --device=/dev/devmm_svm \
    --device=/dev/hisi_hdc \
    -v /usr/local/Ascend/driver:/usr/local/Ascend/driver  \
    -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
    -v /etc/hccn.conf:/etc/hccn.conf \
    bert_pretrain_mindspore:v1 \
    bash

    参数含义:

    • --privileged=true //特权容器,允许访问连接到主机的所有设备
    • -u 0 //root用户
    • -v /dev/shm:/dev/shm //防止shm太小训练任务失败
    • --device=/dev/davinci0 //npu卡设备
    • --device=/dev/davinci1 //npu卡设备
    • --device=/dev/davinci2 //npu卡设备
    • --device=/dev/davinci3 //npu卡设备
    • --device=/dev/davinci4 //npu卡设备
    • --device=/dev/davinci5 //npu卡设备
    • --device=/dev/davinci6 //npu卡设备
    • --device=/dev/davinci7 //npu卡设备
    • --device=/dev/davinci_manager //davinci相关的设备管理的设备
    • --device=/dev/devmm_svm //管理设备
    • --device=/dev/hisi_hdc //管理设备
    • -v /usr/local/Ascend/driver:/usr/local/Ascend/driver //npu卡驱动挂载
    • -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi //npu-smi工具挂载
    • -v /etc/hccn.conf:/etc/hccn.conf //hccn.conf配置挂载

  3. 进入容器,并查看卡信息。

    docker exec -it xxxxxxx bash    //进入容器,xxxxxxx替换为容器id
    npu-smi info    //查看卡信息
    图18 查看卡信息

  4. 执行下述命令启动训练任务。

    cd /home/ma-user/modelarts/user-job-dir/code/bert/
    export MS_ENABLE_GE=1
    export MS_GE_TRAIN=1
    bash scripts/run_standalone_pretrain_ascend.sh 0 1 /home/ma-user/modelarts/user-job-dir/data/cn-news-128-1f-mind/
    图19 训练进程

    查看卡占用情况,如图所示,此时0号卡被占用,说明进程正常启动。

    npu-smi info    //查看卡信息
    图20 查看卡信息

    训练任务大概会运行两小时左右,训练完成后自动停止。若想停止训练任务,可执行下述命令关闭进程,查询进程后显示已无运行中python进程。

    pkill -9 python
    ps -ef
    图21 关闭训练进程

分享:

    相关文档

    相关产品