本章节介绍如何制作容器包含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 18.04 7266638574fb 5 months ago 56.6MB ubuntu 20.04 d5ca7a445605 5 months ago 65.6MB
ubuntu:18.04请根据现场实际OS和版本刷新。
unzip ascend-docker-image-master.zip
Dockerfile目录结构如下所示。
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
软件或文件 |
说明 |
获取方法 |
---|---|---|
Ascend-cann-toolkit_*.run |
开发套件包。 |
参见下载软件。 |
Dockerfile |
制作镜像需要。 |
已存在于当前目录。 用户可根据实际需要自行定制。 |
docker build -t ascend-toolkit:infer_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”表示镜像构建成功。
当宿主机环境为CentOS系统时,由于CentOS的安全模块selinux默认开启,会导致挂载到容器的本地目录没有执行权限,因此需要临时关闭selinux,命令为:su -c "setenforce 0"。完成相关业务后再重新开启selinux,命令为: su -c "setenforce 1"。
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 |
镜像名称与标签,填写5.c中构建的镜像和tag(如“ascend-toolkit:7.0.RC1-ubuntu18.04-arm64”)。 |
命令示例:
docker run -itd -e ASCEND_VISIBLE_DEVICES=0 ascend-toolkit:7.0.RC1-ubuntu18.04-arm64 /bin/bash
执行该命令后,如果显示容器ID(本例为“1dc80f32c263”),则表示已经启动该容器。
执行如下命令进入容器。
docker exec -it 容器ID /bin/bash docker exec -it 1dc80f32c263 /bin/bash
回显以下信息,表示成功进入该容器。
root@1dc80f32c263:/tmp#
如果用户在宿主机创建了模型文件目录(用于容器中应用执行推理业务),可以在启动容器时挂载模型目录(如“/data/model ”),命令示例如下所示:
docker run -itd -e ASCEND_VISIBLE_DEVICES=0 -v /data/model:/data/model ascend-toolkit: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