在Notebook中通过Dockerfile从0制作自定义镜像
场景说明
本案例将基于ModelArts提供的MindSpore预置镜像,并借助ModelArts命令行工具(请参考ma-cli镜像构建命令介绍),通过加载镜像构建模板并修改Dockerfile,构建出一个新镜像,最后注册后在Notebook使用。
操作流程
- 创建Notebook。
- 在Notebook中制作自定义镜像。
- 注册镜像到ModelArts。
- 创建Notebook并验证新镜像。
创建Notebook
- 登录ModelArts控制台,进入“开发空间>Notebook”,单击“创建”,进入创建Notebook页面。“公共镜像”选择“MindSpore”的,其他参数默认。具体操作请参考创建Notebook实例。
- 创建完成后Notebook的状态为“运行中”,单击“操作列”的“打开”,自动进入JupyterLab界面,打开Terminal。
在Notebook中制作自定义镜像
- 首先配置鉴权信息,指定profile,根据提示输入账号、用户名及密码。鉴权更多信息请查看配置登录信息。
ma-cli configure --auth PWD -P xxx
- 执行env|grep -i CURRENT_IMAGE_NAME命令查询当前实例所使用的镜像。
- 制作新镜像。
- 获取上步查询的基础镜像的SWR地址。
CURRENT_IMAGE_NAME=swr.cn-north-4.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cann_5.1.0-py_3.7-euler_2.8.3-aarch64-d910-20220906
- 加载镜像构建模板。
执行ma-cli image get-template命令查询镜像模板。
然后执行ma-cli image add-template命令将镜像模板加载到指定文件夹下,默认路径为当前命令所在的路径。例如:加载upgrade_ascend_mindspore_1.8.1_and_cann_5.1.RC2镜像构建模板。
ma-cli image add-template upgrade_ascend_mindspore_1.8.1_and_cann_5.1.RC2
- 修改Dockerfile。
本例的Dockerfile将基于MindSpore基础镜像mindspore1.7.0-cann5.1.0-py3.7-euler2.8.3,升级到cann 5.1.RC2和MindSpore1.8.1,构建一个面向AI任务的镜像。
加载镜像模板后,Dockerfile文件自动加载,在“.ma/upgrade_ascend_mindspore_1.8.1_and_cann_5.1.RC2”路径下,内容参考如下,根据实际需求修改:
#The following uses Mindspore-1.7 as an example, which can be replaced with the current notebook image.(请替换成当前Notebook使用的镜像) FROM swr.cn-north-4.myhuaweicloud.com/atelier/mindspore_1_7_0:mindspore_1.7.0-cann_5.1.0-py_3.7-euler_2.8.3-aarch64-d910-20220715093657-9446c6a ARG CANN=Ascend-cann-toolkit_5.1.RC2_linux-aarch64.run # Set proxy to download internet resources(根据实际修改Notebook代理) ENV HTTP_PROXY=http://proxy.modelarts.com:80 \ http_proxy=http://proxy.modelarts.com:80 \ HTTPS_PROXY=http://proxy.modelarts.com:80 \ https_proxy=http://proxy.modelarts.com:80 USER root # Download CANN-5.1.RC2 and install CANN package, which is a dependency package for mindspore-1.8.1. # For details about the mapping between Mindpore and CANN and the download address of CANN, see the official website of Mindpore. RUN wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%205.1.RC2/${CANN} -P /tmp && \ chmod +x /tmp/${CANN} && \ sh -x /tmp/${CANN} --quiet --full && \ rm -f /tmp/${CANN} ENV PYTHONPATH=/usr/local/Ascend/tfplugin/latest/python/site-packages:/usr/local/Ascend/ascend-toolkit/latest/python/site-packages:/usr/local/Ascend/ascend-toolkit/latest/opp/op_impl/built-in/ai_core/tbe:/usr/local/seccomponent/lib USER ma-user # Update mindspore version in "MindSpore" conda env by using pip. RUN source /home/ma-user/anaconda3/bin/activate MindSpore && \ pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.8.1/MindSpore/ascend/aarch64/mindspore_ascend-1.8.1-cp37-cp37m-linux_aarch64.whl --upgrade && \ echo "successfully install mindspore 1.8.1" ## [Optional] Uncomment to set default conda env #ENV DEFAULT_CONDA_ENV_NAME=/home/ma-user/anaconda3/envs/MindSpore
如果使用的基础镜像不是ModelArts提供的公共镜像,需要在Dockerfile文件中添加ModelArts指定的用户和用户组,具体可参考Dockerfile文件(基础镜像为非ModelArts提供)。
- 构建镜像
使用ma-cli image build命令从Dockerfile构建出一个新镜像。命令更多信息请参考镜像构建命令。
ma-cli image build .ma/upgrade_ascend_mindspore_1.8.1_and_cann_5.1.RC2/Dockerfile -swr notebook-test/my_image:0.0.1 -P XXX
其中“.ma/upgrade_ascend_mindspore_1.8.1_and_cann_5.1.RC2/Dockerfile”为Dockerfile文件所在路径,“notebook-test/my_image:0.0.1”为构建的新镜像的SWR路径。“XXX”为鉴权时指定的profile。
- 获取上步查询的基础镜像的SWR地址。
注册新镜像
构建完成后,将新镜像注册到ModelArts镜像管理服务中,进而能够在ModelArts中使用该镜像。
有两种方式来注册镜像。
- 方式一:使用ma-cli image register命令来注册镜像。注册命令会返回注册好的镜像信息,包括镜像id,name等,如下图所示。该命令的更多信息可参考注册镜像。
ma-cli image register --swr-path=swr.cn-north-4.myhuaweicloud.com/notebook-test/my_image:0.0.1 -a AARCH64 -rs ASCEND -P XXX
-a指定该镜像支持ARM架构,-rs指定镜像支持ASCEND芯片,“XXX”为鉴权时指定的profile。
图1 注册镜像 - 方式二:在ModelArts Console上注册镜像
登录ModelArts控制台,在左侧导航栏选择“镜像管理”,进入镜像管理页面。
- 单击“注册镜像”。请将完整的SWR地址复制到这里即可,或单击
可直接从SWR选择自有镜像进行注册。
- “架构”和“类型”根据实际情况选择,与镜像源保持一致。
- 单击“注册镜像”。请将完整的SWR地址复制到这里即可,或单击
创建Notebook并使用
- 镜像注册成功后,即可在ModelArts控制台的“开发环境 > Notebook”页面,创建开发环境时选择该自定义镜像。
- 打开开发环境。
图2 打开开发环境
- 单击图中的MindSpore,即可创建一个ipynb文件,导入mindspore,可以看到安装的mindspore 1.8.1已经能够使用。
图3 创建一个ipynb文件
- 再打开一个terminal,查看cann的版本,是Dockerfile中安装的版本。
图4 查看cann版本