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

前提条件

安装步骤

  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
    15
    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 \
    -v /var/queue_schedule:/var/queue_schedule:ro \
    docker_image_id /bin/bash
    
    • --ipc=host:可能存在容器中共享内存不足的情况,启动容器时需要添加该参数以配置和host宿主机共享内存。
    • /var/queue_schedule:用于管理FlowGW调度框架,推理场景使用LLM Datadist框架作PD分离和使用Dataflow时必须挂载。
    • docker_image_id:镜像ID,用户需自行替换,可以使用docker images命令查看镜像信息。

    以上挂载目录仅为示例,各个产品型号需要挂载的目录参见操作指导

    • 挂载/var/queue_schedule时,Ascend HDK的版本需≥24.1.RC2。
    • 多容器场景下,为了防止某个容器的恶意代码大量申请甚至耗尽内核态内存,从而对其它容器造成影响。需要用户根据实际情况通过“--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软件。

操作指导

请根据产品型号,参考表1进行宿主机目录挂载至容器的操作。

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

产品型号

操作指导

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驱动和固件安装指南》的“容器内运行”章节