华为云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)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家