本章节介绍如何制作容器包含CANN软件的镜像,以实现用户在容器场景使用训练业务。
拥有制作容器镜像Dockerfile文件的OS:Ubuntu18.04、CentOS 7.6、openEuler 20.03。
docker load -i openEuler-docker.aarch64.tar.xz docker images
REPOSITORY TAG IMAGE ID CREATED SIZE openeuler-20.03-lts-sp2 latest 58b9cc5bcb76 10 months ago 331MB
ubuntu 20.04 d5ca7a445605 5 months ago 65.6MB ubuntu 18.04 7266638574fb 5 months ago 56.6MB
ubuntu:18.04请根据现场实际OS和版本刷新。
unzip ascend-docker-image-master.zip
ascend-docker-image-master │──ascend-algorithm │──ascend-mindspore // 制作mindspore训练镜像路径 │ │──Dockerfile │──ascend-pytorch // 制作pytorch训练镜像路径 │ │──Dockerfile │──ascend-tensorflow // 制作tensorflow训练镜像路径 │ │──Dockerfile │──ascend-toolkit // 制作toolkit镜像路径 │ │──Dockerfile │──ascendbase-toolkit // 该目录中的Dockerfile文件包含toolkit软件的安装,用于制作基础镜像,请用户根据需要的容器镜像操作系统版本和架构选择相应的路径制作镜像 │ ├──centos7.6-arm64 │ │ │──Dockerfile │ ├──centos7.6-x64 │ │ │──Dockerfile │ ├──debian9.9-x64 │ │ │──Dockerfile │ ├──openeuler20.03-arm64 │ │ │──Dockerfile │ ├──openeuler20.03-x64 │ │ │──Dockerfile │ ├──ubuntu18.04-arm64 │ │ │──Dockerfile │ ├──ubuntu18.04-x64 │ │ │──Dockerfile
cd /home/ascend-docker-image-master/ascendbase-toolkit/{os}-{arch}
其中{os}表示容器镜像操作系统版本,{arch}表示架构,请根据实际情况替换,如“/home/ascend-docker-image-master/ascendbase-toolkit/ubuntu18.04-arm64”。
在当前目录下,执行如下命令查询libstdc++.so.6.0.24文件所在路径,并将文件拷贝到当前目录。
find / -name libstdc++.so.6.0.24 cp -r 文件路径 ./
docker build -t ascendbase-toolkit:base_TAG .
注意不要遗漏命令结尾的“.”,命令解释如表1所示。
构建镜像时,如果在pip安装python依赖包时出现类似如下超时或证书错误,请修改Dockerfile更换pip源。
SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1076)'))) ReadTimeoutError: HTTPSConnectionPool(host='mirrors.huaweicloud.com', port=443): Read timed out.
参数 |
说明 |
---|---|
ascendbase-toolkit:base_TAG |
镜像名称与标签,建议将base_TAG命名为“日期-容器OS-架构”(例如“20210106-ubuntu18.04-arm64”)。 |
当出现“Successfully built xxx”表示镜像构建成功。
cd /home/ascend-docker-image-master/ascend-toolkit
# 2. 训练引擎TOOLKIT安装 ARG TOOLKIT_PKG=Ascend-cann-toolkit_*.run ARG TOOLKIT_PATH=$ASCEND_BASE/ascend-toolkit/latest ARG Kernel_PKG=Ascend-cann-kernels-*.run # 安装TOOLKIT RUN umask 0022 && \ mkdir -p $ASCEND_BASE/driver && \ if [ "$CHIP" != "all" ]; \ then \ CHIPOPTION="--chip=$CHIP"; \ else \ CHIPOPTION=""; \ fi && \ chmod +x $TOOLKIT_PKG && \ ./$TOOLKIT_PKG --quiet --install --install-path=$ASCEND_BASE \ --install-for-all $CHIPOPTION && \ chmod +x $Kernel_PKG && \ ./$Kernel_PKG --quiet --install \ --install-for-all $CHIPOPTION && \ rm -f $Kernel_PKG && \ rm -f $TOOLKIT_PKG
docker build -t ascend-toolkit:toolkit_TAG --build-arg BASE_VERSION=base_TAG .
注意不要遗漏命令结尾的“.”,命令解释如表3所示。
参数 |
说明 |
---|---|
ascend-toolkit:toolkit_TAG |
镜像名称与标签,建议将toolkit_TAG命名为“软件包版本-容器OS-架构”(例如“7.0.RC1-ubuntu18.04-arm64”)。 |
--build-arg |
指定dockerfile文件内的参数。 |
BASE_VERSION |
base_TAG为4.d中设置的镜像标签。 |
命令示例如下所示。
docker build -t ascend-toolkit:7.0.RC1-ubuntu18.04-arm64 --build-arg BASE_VERSION=20210106-ubuntu18.04-arm64 .
当出现“Successfully built xxx”表示镜像构建成功。
cd /home/ascend-docker-image-master/ascend-mindspore
软件或文件 |
说明 |
获取方法 |
---|---|---|
mindspore-*.whl |
mindspore软件包。 |
下载链接。 |
Dockerfile |
制作镜像需要。 |
已存在于当前目录。 用户可根据实际需要自行定制。 |
RUN umask 0022 && \ groupadd HwHiAiUser -g 1000 && \ useradd -d /home/HwHiAiUser -u 1000 -g 1000 -m -s /bin/bash HwHiAiUser && \ pip3 install easydict && \ mkdir -p $ASCEND_BASE/driver && \ declare -A ARCHS_SUFFIX=(['x86_64']='x86' ['aarch64']='aarch64') && \ ARCH=$(uname -m) && \ OS_ID=$(grep -oP "^ID=\"?\K\w+" /etc/os-release) && \ if [ "$OS_ID" == "ubuntu" ]; then \ apt-get update; \ apt-get install --no-install-recommends libnuma1 libgomp1 libxml2 -y; \ rm -rf /var/lib/apt/lists/*; \ elif [ "$OS_ID" == "centos" ]; then \ yum makecache fast; \ yum -y install numactl-libs libgomp libxml2; \ yum clean all; \ fi && \ if [ "$ARCH" == "aarch64" ]; then \ pip3 install psutil; \ fi && \ pip3 install /tmp/mindspore-*.whl && \ rm -rf $ASCEND_BASE/driver && \ rm -rf /tmp/*
COPY --chown=HwHiAiUser:HwHiAiUser Open_Source_Software_Notice.txt /home/HwHiAiUser/Open_Source_Software_Notice.txt COPY --chown=HwHiAiUser:HwHiAiUser Resnet50_Cifar_for_MindSpore /home/HwHiAiUser/Resnet50_Cifar_for_MindSpore COPY --chown=HwHiAiUser:HwHiAiUser test_model.sh /home/HwHiAiUser/test_model.sh
内容删除后,执行:wq!命令保存文件并退出。
docker build -t ascend-mindspore:mindspore_TAG --build-arg BASE_VERSION=toolkit_TAG .
注意不要遗漏命令结尾的“.”,命令解释如表5所示。
参数 |
说明 |
---|---|
ascend-mindspore:mindspore_TAG |
镜像名称与标签,建议将mindspore_TAG命名为“软件包版本-容器OS-架构”(例如“7.0.RC1-ubuntu18.04-arm64”)。 |
--build-arg |
指定dockerfile文件内的参数。 |
BASE_VERSION |
toolkit_TAG为5.d中设置的镜像标签。 |
当出现“Successfully built xxx”表示镜像构建成功。
docker run -itd -e ASCEND_VISIBLE_DEVICES=xxx image-name:tag /bin/bash
参数 |
参数说明 |
---|---|
ASCEND_VISIBLE_DEVICES=xxx |
使用ASCEND_VISIBLE_DEVICES环境变量指定被挂载至容器中的NPU设备(用户可执行ls /dev/ | grep davinci*命令查询宿主机的NPU设备),使用设备序号指定设备,支持单个和范围指定且支持混用。例如: |
image-name:tag |
镜像名称与标签,填写6.d中构建的镜像和tag(如“ascend-mindspore:7.0.RC1-ubuntu18.04-arm64”)。 |
命令示例:
docker run -itd -e ASCEND_VISIBLE_DEVICES=0 ascend-mindspore:7.0.RC1-ubuntu18.04-arm64 /bin/bash
执行该命令后,如果显示容器ID(本例为“1dc80f32c263”),则表示已经启动该容器。
执行如下命令进入容器。
docker exec -it 容器ID /bin/bash docker exec -it 1dc80f32c263 /bin/bash
回显以下信息,表示成功进入该容器。
HwHiAiUser@1dc80f32c263:~$
如果用户在宿主机创建了模型文件目录(用于容器中调用模型进行训练),可以在启动容器时挂载模型目录(如“/data/model ”),命令示例如下所示:
docker run -itd -e ASCEND_VISIBLE_DEVICES=0 -v /data/model:/data/model ascend-mindspore:7.0.RC1-ubuntu18.04-arm64 /bin/bash
ls /dev/ | grep davinci*
命令执行情况如下图。
其中:
cd /usr/local/Ascend ll
cd /usr/local/Ascend/ascend-toolkit ll
用户可将不需要的容器镜像删除,避免占用磁盘空间。
# 查看正在运行的容器 docker ps # 查看所有容器 docker ps -a
回显类似如下信息(容器ID为“5f45daf9eb8f”):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5f45daf9eb8f ascend-toolkit:7.0.RC1 "/bin/bash" 39 seconds ago Up 28 minutes boring_wright
docker stop CONTAINER ID # 命令示例 docker stop 5f45daf9eb8f
docker rm CONTAINER ID # 命令示例 docker rm 5f45daf9eb8f
用户可将容器导出为一个镜像文件,再导入其它服务器使用。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2ad9695f9589 ascend-toolkit:7.0.RC1-ubuntu18.04-arm64 "/bin/bash" 41 hours ago Up 41 hours cranky_lamport
docker commit CONTAINER ID image-name:tag
参数 |
参数说明 |
---|---|
CONTAINER ID |
容器ID。 |
image-name:tag |
镜像名称与标签,用户可自定义。(例:ascend-toolkit:7.0.RC1-ubuntu18.04-arm64-20230109)。 |
命令示例如下:
docker commit 2ad9695f9589 ascend-toolkit:7.0.RC1-ubuntu18.04-arm64-20230109
REPOSITORY TAG IMAGE ID CREATED SIZE ascend-toolkit 7.0.RC1-ubuntu18.04-arm64-20230109 c885a9197446 9 seconds ago 5.62GB
docker save -o image.tar image-name:tag
参数 |
参数说明 |
---|---|
image.tar |
镜像压缩文件名称,用户可自定义。(例:ascend-toolkit.tar) |
image-name:tag |
镜像名称与标签,填写3中保存的镜像和tag(如“ascend-toolkit:7.0.RC1-ubuntu18.04-arm64-20230109”)。 |
命令示例如下:
docker save -o ascend-toolkit.tar ascend-toolkit:7.0.RC1-ubuntu18.04-arm64-20230109
镜像打包完成后,会在当前目录下生成,执行ls命令查看。
[root@localhost zzh]# ls ascend-toolkit.tar
REPOSITORY TAG IMAGE ID CREATED SIZE ascend-toolkit 7.0.RC1-ubuntu18.04-arm64-20230109 c885a9197446 About an hour ago 5.62GB