简介

容器引擎插件Ascend Docker又叫昇腾容器是CANN的基础组件为所有的AI训练/推理作业提供Ascend NPU昇腾处理器容器化支持使用户AI作业能够以Docker容器的方式平滑运行在昇腾设备之上如图2-1所示。Ascend Docker配套发布的软件包为Ascend-docker-runtime已集成至实用工具包toolbox中。

图2-1 Ascend Docker

image

Ascend Docker价值

  • 充分解耦与Docker解耦无需修改Docker代码Runtime可以独立演进。
  • 后向兼容提供可选装的Runtime不影响原生Docker使用方式。
  • 易适配与客户现有平台和系统平滑适配不影响原Docker的命令接口。
  • 易部署提供rpm包部署用户安装后即可用Docker创建挂载Ascend NPU的容器。

Ascend Docker设计简介

Ascend Docker本质上是基于OCI标准实现的Docker Runtime不修改Docker引擎对Docker以插件方式提供Ascend NPU适配功能。 如图2-2所示Ascend Docker通过OCI接口与原生Docker对接。在原生Docker的runc启动容器过程中会调用prestart-hook对容器进行配置管理。

图2-2 Docker适配原理

image

其中prestart-hook是OCI定义的容器生存状态即created状态到running状态的一个中间过渡所设置的钩子函数。在这个过渡状态容器的namespace已经被创建但容器的作业还没有启动因此可以对容器进行设备挂载cgroup配置等操作。这样随后启动的作业便可以使用到这些配置。 Ascend Docker在prestart-hook这个钩子函数中对容器做了以下配置操作 1.根据ASCEND_VISIBLE_DEVICES将对应的NPU设备挂载到容器的namespace。 2.在Host上配置该容器的device cgroup确保该容器只可以使用指定的NPU保证设备的隔离。 3.将Host上的CANN Runtime Library挂载到容器的namespace。

发行说明

Ascend-Docker-Runtime2.0

更新说明

  • 容器内设备序号保持不变
  • 添加NODRV选项不挂载驱动目录
  • 适配驱动--run安装模式
  • 适配训练驱动npu-smi位置从sbin移动到bin
  • 挂载列表可配置
  • 适配海思驱动移除add-ons目录修改
  • 跳过不存在的挂载项

约束

  • Ascend-Docker-Runtime暂不支持Atlas 200 AI加速模块RC场景和Atlas 500智能小站

下载和安装

安装前准备

下载

run包

开发人员可从昇腾社区下载Toolbox,下载链接为:https://ascend.huawei.com/zh/#/software/cann/commercial 下载后安装ToolboxAscend-docker-runtime已集成至实用工具包toolbox中。

功能

默认挂载目录

挂载项 备注
/dev/davinciX NPU设备X是物理ID号例如davinci0
/dev/davinci_manager 管理设备
/dev/devmm_svm 管理设备
/dev/hisi_hdc 管理设备
/usr/local/Ascend/driver/{lib64, include, tools} 驱动目录
/usr/local/dcmi DCMI目录
/usr/local/bin/npu-smi npu-smi工具

Ascend-Docker-runtime安装

单独安装

chmod +x Ascend-cann-toolbox*.run
./Ascend-cann-toolbox*.run  --install --whitelist=docker-runtime
systemctl daemon-reload
systenctl restart docker

集成工具toolboox安装

chmod +x Ascend-cann-toolbox*.run
./Ascend-cann-toolbox*.run  --install
systemctl daemon-reload
systemctl restart docker

安装docker-runtime后会修改配置文件/etc/docker/daemon.json

image

同时自动生成默认挂载目录文件/etc/ascend-docker-runtime.d/base.list

image

挂载单芯片

例子:

docker run -it -e ASCEND_VISIBLE_DEVICES=0 imageId /bin/bash

imageId 替换为实际镜像名或者ID

检查挂载成功:

ls /dev | grep davinci* && ls /dev | grep devmm_svm && ls /dev | grep hisi_hdc && ls /usr/local/Ascend/driver && ls /usr/local/ |grep dcmi && ls /usr/local/bin

image

ASCEND_VISIBLE_DEVICES=0参数0替换为要挂载的芯片物理ID

挂载多芯片

例子:

docker run --rm -it -e ASCEND_VISIBLE_DEVICES=0-3 imageId /bin/bash
或者
docker run --rm -it -e ASCEND_VISIBLE_DEVICES=0,1,2,3 imageId /bin/bash
或者
docker run --rm -it -e ASCEND_VISIBLE_DEVICES=0-2,3 imageId /bin/bash

检查挂载成功:

ls /dev | grep davinci* && ls /dev | grep devmm_svm && ls /dev | grep hisi_hdc && ls /usr/local/Ascend/driver && ls /usr/local/ |grep dcmi && ls /usr/local/bin

image

在默认的挂载的基础上新增挂载内容

在/etc/ascend-docker-runtime.d目录下新建挂载文件xxx.list内容格式例子
/usr/bin/curl
/usr/bin/gcc
...

在命令中使用文件例子:
docker run --rm -it -e ASCEND_VISIBLE_DEVICES=0 -e ASCEND_RUNTIME_MOUNTS=xxx imageId /bin/bash

xxx是新增挂载内容文件名文件名必须是小写

检查挂载成功:

image

启动容器时docker客户端会根据/etc/docker/daemon.json配置文件调用docker-runtime容器正常启动时修改 /proc/当前进程id/cgroup 资源隔离文件

卸载

集成工具toolboox卸载

./Ascend-cann-toolbox*.run --uninstall

卸载docker-runtime后会自动删除安装时配置文件/etc/docker/daemon.json中新增的内

image

同时删除默认挂载目录文件/etc/ascend-docker-runtime.d/base.list

升级

集成工具toolboox安装方式升级

./Ascend-cann-toolbox*.run --upgrade
Description
No description provided
Readme Apache-2.0 1.3 MiB
Languages
Go 39.8%
C 29.5%
Shell 16.7%
C++ 9.2%
CMake 4.8%