手动挂载方式制作容器镜像
前提条件
- 宿主机已经安装过驱动和固件,详情请参见安装NPU驱动固件。
- 用户在宿主机自行安装docker。当硬件产品为A800-9000/A800-9010/A300T-9000/Atlas 300T Pro且宿主机版本为Ubuntu 22.04时,docker版本要求大于等于21.10。
- 运行环境中的一个Device只能被一个容器使用,只有当使用该Device的容器退出后,该Device才可以被其他容器使用。
- 执行如下命令,重启服务与容器。
systemctl daemon-reload systemctl restart docker
- 用户自行获取所需OS镜像后,执行如下命令,查看镜像。
docker images
安装步骤
- Atlas 200I SoC A1产品的容器镜像制作请参见《Atlas 200I SoC A1 核心板 24.1.RC3 NPU驱动和固件安装指南》的“容器内运行”章节。
- 本章节提供手动挂载宿主机固件驱动目录至容器的方式制作镜像,其他更多内容请参考表6。
- 在宿主机使用id HwHiAiUser命令查看宿主机HwHiAiUser的gid,并记录该gid的取值,如图1所示,则记录gid为1001。
- 在宿主机创建并启动docker容器。可参考如下示例命令启动容器,具体挂载信息需根据产品类型和实际路径进行修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
docker run -it \ --ipc=host \ --device=/dev/davinci0:ro \ --device=/dev/davinci_manager:ro \ --device=/dev/devmm_svm:ro \ --device=/dev/hisi_hdc:ro \ -v /usr/local/dcmi:/usr/local/dcmi:ro \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro \ -v /usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/common:ro \ -v /usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/driver:ro \ -v /etc/ascend_install.info:/etc/ascend_install.info:ro \ -v /etc/vnpu.cfg:/etc/vnpu.cfg:ro \ -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info:ro \ docker_image_id /bin/bash
各个产品型号需要挂载的目录如下:
- Atlas 200T A2 Box16、Atlas 800I A2、Atlas 800T A2、Atlas 900 A2 PoD、Atlas 900 A2 PoDc参见表1。
- Atlas 300I Pro、Atlas 300V Pro、Atlas 300V、Atlas 300I Duo参见表2。
- A800-9000、A800-9010、A900-9000、A300T-9000、Atlas 300T Pro参见表3
- A300-3000、A300-3010参见表4。
- Atlas 200I A2(EP场景)参见表5。
- 多容器场景下,为了防止某个容器的恶意代码大量申请甚至耗尽内核态内存,从而对其它容器造成影响。需要用户根据实际情况通过“--kernel-memory”参数指定容器能够占用的最大内核态内存。此功能依赖客户主机侧内核开启kmem accounting功能。
- 训练场景下,当host宿主机系统为CentOS和BC-linux时,docker内的线程数最大为4092,无法满足训练要求,启动容器时需要添加--pids-limit 409600参数,以配置CentOS/BC-linux下docker的最大线程。
- 可能存在容器中共享内存不足的情况,启动容器时需要添加--ipc=host参数,以配置和host宿主机共享内存。
容器启动后,执行如下命令查看当前docker容器中可以使用的davinci设备。ls /dev/ | grep davinci*
命令执行情况参见图2,其中davinci_manager为管理模块的字符设备节点,davinci0为该容器使用的davinci设备。
- 在容器内创建HwHiAiUser用户用于启动相关进程。如果用户创建了其他非root用户,请确保该用户所属的属组必须和Driver运行用户所属属组相同,如果不同,请用户自行添加到Driver运行用户属组。命令如下所示,注意请将其中的gid替换为步骤1中查出的gid值。若返回“ok”,则说明创建成功。
groupadd -g gid HwHiAiUser && useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser && echo ok
- 设置如下环境变量,用于在容器中加载驱动so。
export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/driver:${LD_LIBRARY_PATH}
其中“/usr/local/Ascend”为默认安装路径,请根据实际情况修改。通过export方式设置环境变量,只在当前窗口有效,设置完成后立即生效。
- 使用exit命令退出容器,在宿主机CANN软件包所在路径,执行如下命令将软件包复制到容器内部。
docker cp /home/HwHiAiUser/Ascend-cann-nnrt_<version>_linux-<arch>.run container_id:/home/HwHiAiUser/software
所有路径请根据实际情况进行修改:
- “/home/HwHiAiUser”为宿主机上软件包的存放路径。
- Ascend-cann-nnrt_<version>_linux-<arch>.run请替换为具体CANN软件包名。
- container_id为容器ID,可以使用docker ps -a命令查看所使用容器的ID。
- “/home/HwHiAiUser/software”为容器内软件包的存放路径,如果没有该路径,请先手动创建。
- 使用如下命令重新进入容器。
docker start container_id docker attach container_id
- 进入CANN软件包所在目录,参考宿主机的安装方式安装依赖和安装CANN软件包自行安装所需CANN软件。
在容器部署过程中,用户无需在容器内安装驱动,只需根据不同产品类型将如下目录挂载至容器内,并在容器内安装CANN软件,完成容器部署。
Atlas A2 训练系列产品 /Atlas 800I A2 推理产品
参数 |
参数说明 |
---|---|
--device |
表示映射的设备,可以只读挂载一个或者多个设备。 需要挂载的设备如下:
|
-v /usr/local/dcmi:/usr/local/dcmi:ro |
将宿主机dcmi的.so和接口文件目录“/usr/local/dcmi”以只读模式挂载到容器中,请根据实际情况修改。 |
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro |
将宿主机npu-smi工具“/usr/local/bin/npu-smi”以只读模式挂载到容器中,请根据实际情况修改。 |
-v /usr/bin/hccn_tool:/usr/bin/hccn_tool |
将宿主机hccn_tool工具“/usr/bin/hccn_tool”挂载到容器中,请根据实际情况修改。 |
-v /usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/common:ro |
将宿主机目录“/usr/local/Ascend/driver/lib64/common”和“/usr/local/Ascend/driver/lib64/driver”以只读模式挂载到容器中。请根据driver的驱动.so所在路径修改。 |
-v /usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/driver:ro |
|
-v /etc/ascend_install.info:/etc/ascend_install.info:ro |
将宿主机安装信息文件“/etc/ascend_install.info”以只读模式挂载到容器中。 |
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info:ro |
将宿主机版本信息文件“/usr/local/Ascend/driver/version.info”以只读模式挂载到容器中,请根据实际情况修改。 |
--ipc=host |
可能存在容器中共享内存不足的情况,启动容器时需要添加该参数以配置和host宿主机共享内存。 |
Atlas 推理系列产品
参数 |
参数说明 |
---|---|
--device |
表示映射的设备,可以只读挂载一个或者多个设备。 需要挂载的设备如下:
|
-v /usr/local/dcmi:/usr/local/dcmi:ro |
将宿主机dcmi的.so和接口文件目录“/usr/local/dcmi”以只读模式挂载到容器中,请根据实际情况修改。 |
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro |
将宿主机npu-smi工具“/usr/local/bin/npu-smi”以只读模式挂载到容器中,请根据实际情况修改。 |
-v /usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/common:ro |
将宿主机目录“/usr/local/Ascend/driver/lib64/common”和“/usr/local/Ascend/driver/lib64/driver”以只读模式挂载到容器中。请根据驱动所在实际路径修改。 |
-v /usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/driver:ro |
|
-v /etc/ascend_install.info:/etc/ascend_install.info:ro |
将宿主机安装信息文件“/etc/ascend_install.info”以只读模式挂载到容器中。 |
-v /etc/vnpu.cfg:/etc/vnpu.cfg:ro |
将宿主机算力切分持久化配置文件“/etc/vnpu.cfg”以只读模式挂载到容器中。且仅在物理机特权容器的算力切分场景下使用。 |
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info:ro |
将宿主机版本信息文件“/usr/local/Ascend/driver/version.info”以只读模式挂载到容器中,请根据实际情况修改。 |
--ipc=host |
可能存在容器中共享内存不足的情况,启动容器时需要添加该参数以配置和host宿主机共享内存。 |
Atlas 训练系列产品
参数 |
参数说明 |
---|---|
--device |
表示映射的设备,可以只读挂载一个或者多个设备。 需要挂载的设备如下:
|
-v /usr/local/dcmi:/usr/local/dcmi:ro |
将宿主机dcmi的.so和接口文件目录“/usr/local/dcmi”以只读模式挂载到容器中,请根据实际情况修改。 |
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro |
将宿主机npu-smi工具“/usr/local/bin/npu-smi”以只读模式挂载到容器中,请根据实际情况修改。 |
-v /usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/common:ro |
将宿主机目录“/usr/local/Ascend/driver/lib64/common”和“/usr/local/Ascend/driver/lib64/driver”以只读模式挂载到容器中。请根据驱动所在实际路径修改。 |
-v /usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/driver:ro |
|
-v /etc/ascend_install.info:/etc/ascend_install.info:ro |
将宿主机安装信息文件“/etc/ascend_install.info”以只读模式挂载到容器中。 |
-v /etc/vnpu.cfg:/etc/vnpu.cfg:ro |
将宿主机算力切分持久化配置文件“/etc/vnpu.cfg”以只读模式挂载到容器中。且仅在物理机特权容器的算力切分场景下使用。 |
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info:ro |
将宿主机版本信息文件“/usr/local/Ascend/driver/version.info”以只读模式挂载到容器中,请根据实际情况修改。 |
--ipc=host |
可能存在容器中共享内存不足的情况,启动容器时需要添加该参数以配置和host宿主机共享内存。 |
--pids-limit 409600 |
当host宿主机系统为CentOS和BC-linux时,docker内的线程数最大为4092,无法满足训练要求,启动容器时需要添加该参数以配置CentOS/BC-linux下docker的最大线程。 |
Atlas 200/300/500 推理产品
参数 |
参数说明 |
---|---|
--device |
表示映射的设备,可以只读挂载一个或者多个设备。 需要挂载的设备如下:
|
-v /usr/local/dcmi:/usr/local/dcmi:ro |
将宿主机dcmi的.so和接口文件目录“/usr/local/dcmi”以只读模式挂载到容器中,请根据实际情况修改。 |
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro |
将宿主机npu-smi工具“/usr/local/bin/npu-smi”以只读模式挂载到容器中,请根据实际情况修改。 |
-v /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64:ro |
将宿主机目录“/usr/local/Ascend/driver/lib64/ ”以只读模式挂载到容器,请根据驱动所在实际路径修改。 |
-v /etc/ascend_install.info:/etc/ascend_install.info:ro |
将宿主机安装信息文件“/etc/ascend_install.info”以只读模式挂载到容器中。 |
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info:ro |
将宿主机版本信息文件“/usr/local/Ascend/driver/version.info”以只读模式挂载到容器中,请根据实际情况修改。 |
--ipc=host |
可能存在容器中共享内存不足的情况,启动容器时需要添加该参数以配置和host宿主机共享内存。 |
Atlas 200I A2(EP场景)
参数 |
参数说明 |
---|---|
--device |
表示映射的设备,可以只读挂载一个或者多个设备。 需要挂载的设备如下:
|
-v /usr/local/dcmi:/usr/local/dcmi:ro |
将宿主机dcmi的.so和接口文件目录“/usr/local/dcmi”以只读模式挂载到容器中,请根据实际情况修改。 |
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro |
将宿主机npu-smi工具“/usr/local/bin/npu-smi”以只读模式挂载到容器中,请根据实际情况修改。 |
-v /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64:ro |
将宿主机目录“/usr/local/Ascend/driver/lib64/ ”以只读模式挂载到容器,请根据驱动所在实际路径修改。 |
-v /etc/ascend_install.info:/etc/ascend_install.info:ro |
将宿主机安装信息文件“/etc/ascend_install.info”以只读模式挂载到容器中。 |
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info:ro |
将宿主机版本信息文件“/usr/local/Ascend/driver/version.info”以只读模式挂载到容器中,请根据实际情况修改。 |
--ipc=host |
可能存在容器中共享内存不足的情况,启动容器时需要添加该参数以配置和host宿主机共享内存。 |
操作指导
宿主机目录不挂载至容器的方式以及容器内软件包卸载等可参考表6。