昇腾社区首页
中文
注册

Containerd客户端使用

使用说明

  • Containerd客户端使用Ascend Docker Runtime挂载之前,需要确认当前cgroup的版本。执行stat -fc %T /sys/fs/cgroup/命令,若显示为tmpfs,表示当前为cgroup v1版本;若显示为cgroup2fs,表示当前为cgroup v2版本。
  • Ascend Docker Runtime支持挂载物理芯片,同时支持挂载虚拟芯片。挂载虚拟芯片前需要参考创建vNPU章节,对物理芯片进行虚拟化操作,支持对物理芯片进行静态虚拟化和动态虚拟化。
  • 可通过ls /dev/davinci*命令查询当前可用的物理芯片ID;通过ls /dev/vdavinci*命令查询当前可用的虚拟芯片ID。
  • 若用户不需要挂载Ascend Docker Runtime的默认配置文件“/etc/ascend-docker-runtime.d/base.list”中所有内容,可创建自定义配置文件(例如hostlog.list),减少挂载内容,具体操作请参考(可选)配置自定义挂载内容章节。

使用示例

示例中的image-name:tag为镜像名称与标签,如“ascend-tensorflow:tensorflow_TAG”。;containerID为容器ID,使用ctr启动容器需要指定容器ID,如“c1”。

  • 示例1:启动容器时,挂载物理芯片ID为0的芯片。
    • cgroup v1
      ctr run --runtime io.containerd.runtime.v1.linux -t --env ASCEND_VISIBLE_DEVICES=0 image-name:tag containerID bash
    • cgroup v2
      ctr run --runtime io.containerd.runc.v2 --runc-binary /usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime -t --env ASCEND_VISIBLE_DEVICES=0 image-name:tag containerID bash
  • 示例2:启动容器时,仅挂载NPU设备和管理设备,不挂载驱动相关目录。
    • cgroup v1
      ctr run --runtime io.containerd.runtime.v1.linux -t --env ASCEND_VISIBLE_DEVICES=0 --env ASCEND_RUNTIME_OPTIONS=NODRV image-name:tag containerID bash
    • cgroup v2
      ctr run --runtime io.containerd.runc.v2 --runc-binary /usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime -t --env ASCEND_VISIBLE_DEVICES=0 --env ASCEND_RUNTIME_OPTIONS=NODRV image-name:tag containerID bash
  • 示例3:启动容器时,挂载物理芯片ID为0的芯片,读取自定义配置文件hostlog中的挂载内容。
    • cgroup v1
      ctr run --runtime io.containerd.runtime.v1.linux -t --env ASCEND_VISIBLE_DEVICES=0 --env ASCEND_RUNTIME_MOUNTS=hostlog image-name:tag containerID bash
    • cgroup v2
      ctr run --runtime io.containerd.runc.v2 --runc-binary /usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime -t --env ASCEND_VISIBLE_DEVICES=0 --env ASCEND_RUNTIME_MOUNTS=hostlog image-name:tag containerID bash
  • 示例4:启动容器时,挂载虚拟芯片ID为100的芯片。
    • cgroup v1
      ctr run --runtime io.containerd.runtime.v1.linux -t --env ASCEND_VISIBLE_DEVICES=100 --env ASCEND_RUNTIME_OPTIONS=VIRTUAL image-name:tag containerID bash
    • cgroup v2
      ctr run --runtime io.containerd.runc.v2 --runc-binary /usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime -t --env ASCEND_VISIBLE_DEVICES=100 --env ASCEND_RUNTIME_OPTIONS=VIRTUAL image-name:tag containerID bash
  • 示例5:启动容器时,从物理芯片ID为0的芯片上,切分出4个AI Core作为虚拟设备并挂载至容器中。
    • cgroup v1
      ctr run --runtime io.containerd.runtime.v1.linux -t --env ASCEND_VISIBLE_DEVICES=0 --env ASCEND_VNPU_SPECS=vir04 image-name:tag containerID bash
    • cgroup v2
      ctr run --runtime io.containerd.runc.v2 --runc-binary /usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime -t --env ASCEND_VISIBLE_DEVICES=0 --env ASCEND_VNPU_SPECS=vir04 image-name:tag containerID bash
  • 示例6:启动容器时,挂载物理芯片ID为0的芯片,并且允许挂载的驱动文件中存在软链接(仅适用于Atlas 500 A2 智能小站Atlas 200I A2 加速模块Atlas 200I DK A2 开发者套件场景)。
    • cgroup v1
      ctr run --runtime io.containerd.runtime.v1.linux -t --env ASCEND_VISIBLE_DEVICES=0 -e ASCEND_ALLOW_LINK=True image-name:tag containerID bash
    • cgroup v2
      ctr run --runtime io.containerd.runc.v2 --runc-binary /usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime -t --env ASCEND_VISIBLE_DEVICES=0 -e ASCEND_ALLOW_LINK=True image-name:tag containerID bash

启动命令相关参数如表1解释。

容器启动后,可执行以下命令检查相应设备和驱动是否挂载成功,每台机型具体的挂载目录参考Ascend Docker Runtime默认挂载内容。命令示例如下:

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

用户在使用过程中,请勿重复定义和在容器镜像中固定ASCEND_VISIBLE_DEVICES、ASCEND_RUNTIME_OPTIONS、ASCEND_RUNTIME_MOUNTS和ASCEND_VNPU_SPECS等环境变量。

表1 Ascend Docker Runtime运行参数解释

参数

说明

举例

ASCEND_VISIBLE_DEVICES

  • 如果任务不需要使用NPU设备,可以设置ASCEND_VISIBLE_DEVICES环境变量的取值为void或为空。
  • 如果任务需要使用NPU设备,必需使用ASCEND_VISIBLE_DEVICES指定被挂载至容器中的NPU设备,否则挂载NPU设备失败。使用设备序号指定设备时,支持单个和范围指定且支持混用;使用芯片名称指定设备时,支持同时指定多个同类型的芯片名称。
  • ASCEND_VISIBLE_DEVICES=void表示不使用Ascend Docker Runtime的挂载功能,不挂载NPU设备、驱动和文件目录。相关挂载参数也会失效。
  • 挂载物理芯片(NPU)
    • ASCEND_VISIBLE_DEVICES=0时,

      表示将0号NPU设备(/dev/davinci0)挂载入容器中。

    • ASCEND_VISIBLE_DEVICES=1,3时,表示将1、3号NPU设备挂载入容器中。
    • ASCEND_VISIBLE_DEVICES=0-2时,表示将0号至2号NPU设备(包含0号和2号)挂载入容器中,效果同-e ASCEND_VISIBLE_DEVICES=0,1,2。
    • ASCEND_VISIBLE_DEVICES=0-2,4时,表示将0号至2号以及4号NPU设备挂载入容器,效果同-e ASCEND_VISIBLE_DEVICES=0,1,2,4。
    • ASCEND_VISIBLE_DEVICES=AscendXXX-Y,其中XXX表示NPU设备的型号,支持的取值为910,310、310B和310P;Y表示物理NPU设备ID。
      • ASCEND_VISIBLE_DEVICES=Ascend910-1,表示把1号NPU设备挂载进容器。
      • ASCEND_VISIBLE_DEVICES=Ascend910-1,Ascend910-3,表示把1号NPU和3号NPU挂载进容器。
      说明:
      • NPU类型需要和实际环境的NPU类型保持一致,否则将会挂载失败。
      • 不支持在一个参数里既指定设备序号又指定NPU名称,即不支持ASCEND_VISIBLE_DEVICES=0,Ascend910-1。
  • 挂载虚拟芯片(vNPU)
    • 静态虚拟化:和物理芯片使用方式相同,只需要把物理芯片ID换成虚拟芯片ID(vNPU ID)即可。
    • 动态虚拟化
      ASCEND_VISIBLE_DEVICES=0表示从0号NPU设备中划分出一定数量的AI Core。
      说明:
      • 一条动态虚拟化的命令只能指定一个物理NPU的ID进行动态虚拟化。
      • 必须搭配ASCEND_VNPU_SPECS,表示在指定的NPU上划分出的AI Core数量。
      • 可以搭配ASCEND_RUNTIME_OPTIONS,但是只能取值为NODRV,表示不挂载驱动相关目录。

ASCEND_ALLOW_LINK

是否允许挂载的文件或目录中存在软链接,在Atlas 500 A2 智能小站Atlas 200I A2 AI加速模块Atlas 200I DK A2 开发者套件场景下需要指定该参数。

说明:

其他设备如Atlas 训练系列产品Atlas A2 训练系列产品Atlas 200I SoC A1 核心板等产品可以使用该参数,但因其默认挂载内容中不存在软链接,所以无需额外指定该参数。

  • ASCEND_ALLOW_LINK=True,表示在Atlas 500 A2 智能小站Atlas 200I A2 AI加速模块Atlas 200I DK A2 开发者套件场景下允许挂载带有软链接的驱动文件。
  • ASCEND_ALLOW_LINK=False或者不指定该参数,Atlas 500 A2 智能小站Atlas 200I A2 AI加速模块Atlas 200I DK A2 开发者套件将无法使用Ascend Docker Runtime

ASCEND_RUNTIME_OPTIONS

对参数ASCEND_VISIBLE_DEVICES中指定的芯片ID作出限制:

  • NODRV:表示不挂载驱动相关目录。
  • VIRTUAL:表示挂载的是虚拟芯片。
  • NODRV,VIRTUAL:表示挂载的是虚拟芯片,并且不挂载驱动相关目录。
  • ASCEND_RUNTIME_OPTIONS=NODRV
  • ASCEND_RUNTIME_OPTIONS=VIRTUAL
  • ASCEND_RUNTIME_OPTIONS=NODRV,VIRTUAL

ASCEND_RUNTIME_MOUNTS

待挂载内容的配置文件名,该文件中可配置需要挂载到容器内的文件及目录。

  • ASCEND_RUNTIME_MOUNTS=base
  • ASCEND_RUNTIME_MOUNTS=hostlog
  • ASCEND_RUNTIME_MOUNTS=hostlog,hostlog1,hostlog2
    说明:
    • 默认读取/etc/ascend-docker-runtime.d/base.list配置文件。
    • hostlog.list请根据实际自定义配置文件名修改。
    • 支持读取多个自定义配置文件。

ASCEND_VNPU_SPECS

从物理NPU设备中切分出一定数量的AI Core,指定为虚拟设备。支持的取值如下。

  • Atlas 推理系列产品系列处理器仅支持vir01、vir02、vir02_1c、vir04、vir04_3c、vir04_4c_dvpp、vir04_3c_ndvpp。
  • Atlas 训练系列产品仅支持vir02、vir04、vir08和vir16。

需配合参数“ASCEND_VISIBLE_DEVICES”一起使用,参数“ASCEND_VISIBLE_DEVICES”指定用于切分的物理NPU设备。

ASCEND_VNPU_SPECS=vir04表示切分4个AI Core作为虚拟设备,挂载至容器中。

说明:
  • vir后面的数字表示AI Core数量。
  • c前面的数字表示AI CPU数量。
  • dvpp表示虚拟化时包含所有数字视觉预处理模块(即VPC,VDEC,JPEGD,PNGD,VENC,JPEGE)。
  • ndvpp表示虚拟化时没有数字视觉预处理硬件资源。