手动挂载方式制作容器镜像

前提条件

安装步骤

  1. 在宿主机使用id HwHiAiUser命令查看宿主机HwHiAiUser的gid,并记录该gid的取值,如图1所示,则记录gid为1001。

    如果用户安装Driver包时使用--install-username=username --install-usergroup=usergroup参数指定了其他非root用户,则需要使用同样的方法记录此非root用户的gid,容器内创建非root用户时,需要使用该gid,确保宿主机和容器内相关进程的非root用户同属组。

    图1 查看宿主机HwHiAiUser的gid

  2. 在宿主机创建并启动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设备。

    图2 查询docker容器中使用的davinci设备

  3. 在容器内创建HwHiAiUser用户用于启动相关进程。如果用户创建了其他非root用户,请确保该用户所属的属组必须和Driver运行用户所属属组相同,如果不同,请用户自行添加到Driver运行用户属组。命令如下所示,注意请将其中的gid替换为步骤1中查出的gid值。若返回“ok”,则说明创建成功。

    groupadd -g gid HwHiAiUser && useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser && echo ok

  4. 设置如下环境变量,用于在容器中加载驱动so。

    export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/driver:${LD_LIBRARY_PATH}

    其中“/usr/local/Ascend”为默认安装路径,请根据实际情况修改。通过export方式设置环境变量,只在当前窗口有效,设置完成后立即生效。

  5. 使用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”为容器内软件包的存放路径,如果没有该路径,请先手动创建。

  6. 使用如下命令重新进入容器。

    docker start container_id 
    docker attach container_id

  7. 进入CANN软件包所在目录,参考宿主机的安装方式安装CANN软件包自行安装所需CANN软件。

在容器部署过程中,用户无需在容器内安装驱动,只需根据不同产品类型将如下目录挂载至容器内,并在容器内安装CANN软件,完成容器部署。

Atlas A2 训练系列产品/Atlas 800I A2推理产品

表1 参数说明

参数

参数说明

--device

表示映射的设备,可以只读挂载一个或者多个设备。

需要挂载的设备如下:

  • /dev/davinciX:ro:NPU设备,X是ID号,如:davinci0。
  • /dev/davinci_manager:ro:davinci相关的管理设备。
  • /dev/devmm_svm:ro:内存管理相关设备。
  • /dev/hisi_hdc:ro:hdc相关管理设备。

-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 推理系列产品

表2 参数说明

参数

参数说明

--device

表示映射的设备,可以只读挂载一个或者多个设备。

需要挂载的设备如下:

  • /dev/davinciX:ro:NPU设备,X是ID号,如:davinci0。
  • /dev/davinci_manager:ro:davinci相关的管理设备。
  • /dev/devmm_svm:ro:内存管理相关设备。
  • /dev/hisi_hdc:ro:hdc相关管理设备。

-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 训练系列产品

表3 参数说明

参数

参数说明

--device

表示映射的设备,可以只读挂载一个或者多个设备。

需要挂载的设备如下:

  • /dev/davinciX:ro:NPU设备,X是ID号,如:davinci0。
  • /dev/davinci_manager:ro:davinci相关的管理设备。
  • /dev/devmm_svm:ro:内存管理相关设备。
  • /dev/hisi_hdc:ro:hdc相关管理设备。

-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 推理产品

表4 参数说明

参数

参数说明

--device

表示映射的设备,可以只读挂载一个或者多个设备。

需要挂载的设备如下:

  • /dev/davinciX:ro:NPU设备,X是ID号,如:davinci0。
  • /dev/davinci_manager:ro:davinci相关的管理设备。
  • /dev/devmm_svm:ro:内存管理相关设备。
  • /dev/hisi_hdc:ro:hdc相关管理设备。

-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场景)

表5 参数说明

参数

参数说明

--device

表示映射的设备,可以只读挂载一个或者多个设备。

需要挂载的设备如下:

  • /dev/davinciX:ro:NPU设备,X是ID号,如:davinci0。
  • /dev/davinci_manager:ro:davinci相关的管理设备。
  • /dev/devmm_svm:ro:内存管理相关设备。
  • /dev/hisi_hdc:ro:hdc相关管理设备。

-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

表6 手动挂载方式制作容器的操作指导

产品型号

操作指导

A300-3000

《Atlas 300I 推理卡 24.1.RC2 NPU驱动和固件安装指南(型号 3000)》的“容器内安装”章节

A300-3010

《Atlas 300I 推理卡 24.1.RC2 NPU驱动和固件安装指南(型号 3010)》的“容器内安装”章节

Atlas 200I A2(EP场景)

《Atlas 200I A2 加速模块 24.1.RC2 NPU驱动和固件安装指南(EP场景)》的“容器内安装”章节

Atlas 300I Pro

Atlas 300V Pro

Atlas 300V

Atlas 300I Duo

《Atlas 中心推理卡 24.1.RC2 NPU驱动和固件安装指南》的“容器内安装”章节

A800-9000

A800-9010

《Atlas 中心训练服务器 24.1.RC2 NPU驱动和固件安装指南》的“容器内安装”章节

A300T-9000

Atlas 300T Pro

《Atlas 中心训练卡 24.1.RC2 NPU驱动和固件安装指南》的“容器内安装”章节

Atlas 900 A2 PoD

Atlas 900 A2 PoDc

Atlas 800I A2

Atlas 800T A2

Atlas 200T A2 Box16

《Atlas A2 中心推理和训练硬件 24.1.RC2 NPU驱动和固件安装指南》中的“容器内安装 ”章节

Atlas 200I SoC A1

《Atlas 200I SoC A1核心板 24.1.RC2 NPU驱动和固件安装指南》的“容器内运行”章节