华为云AI开发平台ModelArts在k8s集群配置Ascend使用环境_云淘科技

前提条件

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

操作步骤

Step 1:登录节点

Step 2:配置kubectl工具

Step 3:准备业务基础镜像

Step 4:docker run方式启动任务

Step 1:登录节点

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

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

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

图1 节点管理

绑定弹性公网IP。

若已有未绑定的弹性公网IP,直接选择即可。如果没有可用的弹性公网IP,需要先购买弹性公网IP。

图2 弹性公网IP

单击“购买弹性公网IP”,进入购买页。

图3 绑定弹性公网IP

图4 购买弹性公网IP

图5 未绑定的弹性公网IP

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

图6 刷新列表

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

图7 绑定弹性公网IP

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

图8 登录节点

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

使用华为云账号登录ModelArts管理控制台。
在“弹性集群”列表页,单击“远程登录”。

图9 远程登录

Step 2:配置kubectl工具

进入专属资源池。

图10 专属资源池页签

点击创建的专属资源池,进入专属资源池详情页面。

图11 专属资源池详情

点击对应的CCE集群,进入CCE集群详情页面,在“集群信息”找到“连接信息”。

图12 链接信息

使用kubectl工具。

若通过内网使用kubectl工具,需要将kubectl工具安装在和集群在相同vpc下的某一台机器上。点击kubectl后的“配置”按钮。按照界面提示步骤操作即可。

图13 通过内网使用kubectl工具

通过公网使用kubectl工具,可以将kubectl安装在任一台可以访问公网的机器。

首先需要绑定公网地址,点击公网地址后的“绑定”按钮。

图14 绑定公网地址

选择公网IP,或者跳至创建,创建新的弹性公网IP。

创建公网IP完成后,返回CCE集群详情页面,在“集群信息”找到“连接信息”。点击kubectl后的“配置”按钮。

按照界面提示步骤操作即可。

图15 配置kubectl

验证。

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

kubectl get node

Step 3:准备业务基础镜像

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

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

拉取Ascend+PyTorch镜像:

# 配套Snt9B的容器镜像,包含pytorch 1.11 + mindspore-lite 2.1.0 + Ascend CANN Toolkit 6.3.RC2
docker pull swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_1_11_ascend:pytorch_1.11.0-cann_6.3.2-py_3.7-euler_2.10.7-aarch64-d910b-20230907104152-28db128

拉取Ascend+Mindspore镜像:

# 配套Snt9B的容器镜像,包含mindspore 2.1.0 + mindspore-lite 2.1.0 + Ascend CANN Toolkit 6.3.RC2
docker pull swr.cn-southwest-2.myhuaweicloud.com/atelier/mindspore_2_0_ascend:mindspore_2.1.0-cann_6.3.2-py_3.7-euler_2.10.7-aarch64-d910b-20230907104152-28db128

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

#  启动容器,请注意指定容器名称、镜像信息。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

进入容器:

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

进入conda环境:

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

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

npu-smi info

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

图16 报错信息

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。

拉取镜像。本测试镜像为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

启动容器。

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配置挂载

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

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

图18 查看卡信息

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

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 关闭训练进程

父主题: k8s Cluster环境配置

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家