【CANN训练营2023年第二季】我玩的就是真实!!如何升级镜像库里的镜像来满足算子编程

举报
yd_286753431 发表于 2023/12/19 04:42:25 2023/12/19
【摘要】 PS:巨量时间,不断踩坑,悲凉血泪史,总结成的小小见解。如果各位觉得写的还行,劳请各位老师们三连一波!!各位老师的鼓励是我坚持写作的动力!!我玩的就是真实!!!我玩的就是真实!!!我玩的就是真实!!!问:什么是镜像?镜像仓库是什么?对于镜像,大家应该不陌生,是使用docker手段套用预设环境的一种媒介。镜像库有很多官方提供的配套镜像。镜像里面预装了很多适配大家不同需求用途的软件。你可以把镜像...

PS:巨量时间,不断踩坑,悲凉血泪史,总结成的小小见解。

如果各位觉得写的还行,劳请各位老师们三连一波!!各位老师的鼓励是我坚持写作的动力!!

我玩的就是真实!!!我玩的就是真实!!!我玩的就是真实!!!


问:什么是镜像?镜像仓库是什么?

对于镜像,大家应该不陌生,是使用docker手段套用预设环境的一种媒介。

镜像库有很多官方提供的配套镜像。镜像里面预装了很多适配大家不同需求用途的软件。

你可以把镜像当成,90年代CD,VCD,DVD光驱年代,装软件用的windows系统盘或者游戏盘

也可以当做现在的PE安装系统用的ISO文件


cke_9211.png

cke_9652.png


问:既然已经有了官方镜像,为什么要进行私人化升级呢?

1.官方更新是有一个验证期的,可能CANN已经推出了新的版本软件,但是镜像还没有适配

2.这个时代是一个个性化时代,而不是通用普适性时代,所以难免会有一些特殊化的需求

比如这个公司需要增加或减少这个软件,另外一个公司需要增加或减少另外一个软件。

如果不进行镜像升级并且适配成私有化镜像,那么每次docker拉取官方镜像后都要花

大量的时间进行在线升级和适配。


问:就拿本次CANN训练营来说,为什么要进行镜像升级呢?

1.CANN算子的编写需要经历一个流程

(1)cpu验证

(2)npu_simulator验证

(3)npu_onboard验证

(4)aclnn的调用验证

上述四项中需要ascend硬件支持的有npu_onboard验证和aclnn的调用验证

cpu验证和npu_simulator验证不需要ascend硬件支持


2.官方提供的能使用到昇腾训练卡的方式就我所知有两种:

(1)华为云ECS 选定鲲鹏920+310P推理卡,但不支持AsendC的算子编写,1小时1块左右

(2)modelarts中使用notebook功能,调用私有镜像,可以使用910A的算力,1小时19块左右


3.cpu验证和npu_simulator验证可以使用codelab进行编写(很好用,如果未来支持ascend就更好)

npu_onboard验证和aclnn的调用验证就需要使用调用方式第二点进行操作



cke_422747.png



问:既然如此,为什么不使用官方的镜像,然后在镜像中升级呢?

1.首先要跟大家普及一个概念,notebook使用私人镜像登陆默认是使用ma-user登陆的,并非用root账号

如果用ma-user进行安装会涉及很多安装权限问题

2.操作会非常繁琐,每次都需要拉取镜像后花费大量时间安装,特别费精力,杀鸡焉用牛刀呀

3.另外特别费钱,如果你是土豪的话,略过这项。

上文提到使用上述第二种方式一小时的花费是19块左右,代金券很快就会不够用



问:就拿本次CANN训练营来说,如何进行镜像升级呢?

1.本次升级使用的是最朴实无华的3G大小ascend-pytorch-arm-modelarts镜像

具体升级要分两步走,为什么要这么操作呢?

规避权限风险,分别使用ma-user 和 root 进行升级


cke_885310.png


2.首先需要一个ECS服务器进行镜像的拉取工作,这里使用的是华为云ECS 鲲鹏920+310P

记住系列口令密码:按需计费+鲲鹏计算+AI加速型kai1s+公共镜像+ubuntus镜像+按流量计费+100带宽


cke_1279075.png


cke_1281412.png


3.申请完毕后用MobaXterm登陆ECS服务器,安装docker


curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
sudo systemctl daemon-reload
sudo systemctl restart docker复制


cke_1415083.png


4.按照镜像仓库提供的拉取步骤,使用docker拉取对应的镜像


#下面XXXX需要替换个人的
docker login -u XXXX ascendhub.huawei.com

#这里需要下载凭证
docker pull ascendhub.huawei.com/public-ascendhub/ascend-pytorch-arm-modelarts:23.0.0复制

cke_1584818.png


5.使用华为obs服务将需要的升级文件放进OBS桶中


cke_2384854.png





6.编写两个Dockerfile,使用vim Dockerfile,编写的两个Dockerfile中第一个的作用

         1.需要以root权限卸载现有toolkit版本

         2.安装vim,dpkg

         3.更新cmake版本

         4.安装sympy,为后续算子做准备

这里注意最后的两行代码中的tag ,push的地址来自于华为云的SWR容器镜像服务



FROM swr.cn-north-4.myhuaweicloud.com/xxxxxx/ascend-pytorch-arm-modelarts:23.0.0

USER root

RUN ["/bin/bash", "-c", "cd /usr/local/Ascend/ascend-toolkit/6.0.1/aarch64-linux/script && ./uninstall.sh"]
RUN sh -c '/bin/echo -e "y" | yum install vim'
RUN sh -c '/bin/echo -e "y" | yum install dpkg'


RUN sh -c '/bin/echo -e "y" | dnf remove cmake'
RUN wget https://xxxxxxxxx.com/cmake-3.27.6-linux-aarch64.tar.gz

RUN chmod 777 cmake-3.27.6-linux-aarch64.tar.gz
RUN tar -xzvf cmake-3.27.6-linux-aarch64.tar.gz
RUN mv cmake-3.27.6-linux-aarch64 /opt/cmake-3.27.6
RUN ln -sf /opt/cmake-3.27.6/bin/*  /usr/bin/
RUN rm -rf cmake-3.27.6-linux-aarch64.tar.gz

RUN pip install sympy

docker build -t swr.cn-north-4.myhuaweicloud.com/xxxxxxxx/ascend-pytorch-arm-modelarts:1.1.0 -f Dockerfile .
sudo docker push swr.cn-north-4.myhuaweicloud.com/xxxxxxxx/ascend-pytorch-arm-modelarts:1.1.0复制


cke_2055534.png


7.编写两个Dockerfile,使用vim Dockerfile,编写的两个Dockerfile中第二个的作用

         1.安装最新的toolkit

         2.安装最新的communitysdk

这里注意最后的两行代码中的tag ,push的地址来自于华为云的SWR容器镜像服务



FROM swr.cn-north-4.myhuaweicloud.com/xxxxxxx/ascend-pytorch-arm-modelarts:1.1.0

USER ma-user

RUN wget https://xxxxxx.com/Ascend-cann-toolkit_7.0.RC1.alpha003_linux-aarch64.run
RUN chmod 777 Ascend-cann-toolkit_7.0.RC1.alpha003_linux-aarch64.run
RUN sh -c '/bin/echo -e "y" | ./Ascend-cann-toolkit_7.0.RC1.alpha003_linux-aarch64.run --full'
RUN rm -rf Ascend-cann-toolkit_7.0.RC1.alpha003_linux-aarch64.run

RUN wget https://xxxxxxx.com/Ascend-cann-communitysdk_7.0.RC1.alpha003_linux-aarch64.run
RUN chmod 777 Ascend-cann-communitysdk_7.0.RC1.alpha003_linux-aarch64.run
RUN sh -c '/bin/echo -e "y" | ./Ascend-cann-communitysdk_7.0.RC1.alpha003_linux-aarch64.run --full'
RUN rm -rf Ascend-cann-communitysdk_7.0.RC1.alpha003_linux-aarch64.run


docker build -t swr.cn-north-4.myhuaweicloud.com/xxxxxxxx/ascend-pytorch-arm-modelarts:1.1.1 -f Dockerfile .
sudo docker push swr.cn-north-4.myhuaweicloud.com/xxxxxxxxx/ascend-pytorch-arm-modelarts:1.1.1
复制


8.在modelarts中注册镜像,并在notebook中使用该镜像

cke_2633592.png


cke_2645510.png


cke_2650279.png


这样就大功告成了!!!


ps:可惜的是由于root权限的问题,以及NPU固件不可以在镜像中进行升级

所以升级完的镜像的NPU固件或者驱动可能不是最新版本,可能会与toolkit存在部分冲突

可能会出现npu_onboard和aclnn调用会出现segementation fault错误


PS:巨量时间,不断踩坑,悲凉血泪史,总结成的小小见解。

如果各位觉得写的还行,劳请各位老师们三连一波!!各位老师的鼓励是我坚持写作的动力!!

我玩的就是真实!!!我玩的就是真实!!!我玩的就是真实!!!

2023·CANN训练营第二季——高阶班——搭建NPU开发调试环境下篇:使用启智NPU资源搭建成功-云社区-华为云 (huaweicloud.com)

个人觉得,大姚老师的镜像操作方式更好,眼前一亮呀,惭愧

发现大姚老师使用的是mindspore_2.1.0-cann_6.3.2-py_3.7-euler_2.10.7-aarch64-d910b

我觉得可以通过上述方式进行镜像升级也可以达到一样的结果,避免segementation fault


cke_791.png



从镜像仓库看23.0.RC2,这个驱动固件版本,对比大姚老师实际跑Npu-smi !瞬间醍醐灌顶呀

下图引用于大姚老师文章

cke_7344.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。