容器引擎插件(Ascend Docker,又叫昇腾容器)是CANN的基础组件,为所有的AI训练/推理作业提供Ascend NPU(昇腾处理器)容器化支持,使用户AI作业能够以Docker容器的方式平滑运行在昇腾设备之上,如图1所示。Ascend Docker配套发布的软件包为Ascend-Docker-Runtime,已集成至实用工具包toolbox中。
图1 Ascend Docker
Ascend Docker价值
- 充分解耦:与Docker解耦,无需修改Docker代码,Runtime可以独立演进。
- 后向兼容:提供可选装的Runtime,不影响原生Docker使用方式。
- 易适配:与客户现有平台和系统平滑适配,不影响原Docker的命令接口。
- 易部署:提供run包部署,用户安装后即可用Docker创建挂载Ascend NPU的容器。
Ascend Docker设计简介
Ascend Docker本质上是基于OCI标准实现的Docker Runtime,不修改Docker引擎,对Docker以插件方式提供Ascend NPU适配功能。
如图2所示,Ascend Docker通过OCI接口与原生Docker对接。在原生Docker的runc启动容器过程中,会调用prestart-hook对容器进行配置管理。
图2 Docker适配原理
其中,prestart-hook是OCI定义的容器生存状态,即created状态到running状态的一个中间过渡所设置的钩子函数。在这个过渡状态,容器的namespace已经被创建,但容器的作业还没有启动,因此可以对容器进行设备挂载,cgroup配置等操作。这样随后启动的作业便可以使用到这些配置。
Ascend Docker在prestart-hook这个钩子函数中,对容器做了以下配置操作:
- 根据ASCEND_VISIBLE_DEVICES,将对应的NPU设备挂载到容器的namespace。
- 在Host上配置该容器的device cgroup,确保该容器只可以使用指定的NPU,保证设备的隔离。
- 将Host上的CANN Runtime Library挂载到容器的namespace。
- 使用时,用户请勿将同一个设备挂载至多个容器内。
- 启动Ascend Docker时,若存在/etc/sysconfig/docker文件,用户需检查文件内相关参数的配置,以便正常使用Ascend-Docker-Runtime。
- 请执行以下命令查看docker配置文件。
vim /etc/sysconfig/docker
- 若/etc/sysconfig/docker文件中存在参数--config-file,请确保--config-file="/etc/docker/daemon.json"。