昇腾社区首页
中文
注册

方式一:Ascend Docker Runtime挂载vNPU

单独结合Ascend Docker Runtime(容器引擎插件)使用,将vNPU挂载到容器。

使用前提

需要先获取Ascend-docker-runtime_{version}_linux-{arch}.run,并安装容器引擎插件,方法可参见Ascend Docker Runtime

Ascend Docker Runtime使用vNPU方法

选择以下两种方式之一进行使用:

  • 静态虚拟化:用户已通过npu-smi工具创建vNPU,在拉起容器时执行以下命令将vNPU挂载至容器中。以下命令表示用户在拉起容器时,挂载虚拟芯片ID为100的芯片。
    docker run -it -e ASCEND_VISIBLE_DEVICES=100 -e ASCEND_RUNTIME_OPTIONS=VIRTUAL image-name:tag /bin/bash
  • 动态虚拟化:用户在拉起容器时,执行以下命令虚拟化资源,以下命令表示从物理芯片ID为0的芯片上,切分出4个AI Core作为vNPU并挂载至容器。以此方式拉起的容器,在结束容器进程时,虚拟设备会自动销毁。
    docker run -it --rm -e ASCEND_VISIBLE_DEVICES=0 -e ASCEND_VNPU_SPECS=vir04 image-name:tag /bin/bash
  • 使用动态虚拟化时,需要关闭vNPU的恢复使能功能,该功能的详细说明和操作指导请参考《Atlas 中心推理卡 25.0.RC1 npu-smi 命令参考》中的“算力切分相关命令>设置vNPU的配置恢复使能状态章节。
  • 可用的芯片ID可通过如下方式查询确认:
    • 物理芯片ID:
      ls /dev/davinci*
    • 虚拟芯片ID:
      ls /dev/vdavinci*
  • image-name:tag:镜像名称与标签,请根据实际情况修改。如“ascend-tensorflow:tensorflow_TAG”。
  • 用户在使用过程中,请勿重复定义和在容器镜像中固定ASCEND_VISIBLE_DEVICES、ASCEND_RUNTIME_OPTIONS和ASCEND_VNPU_SPECS环境变量。
表1 参数解释

参数

说明

举例

ASCEND_VISIBLE_DEVICES

必需使用ASCEND_VISIBLE_DEVICES环境变量指定被挂载至容器中的NPU设备,否则挂载NPU设备失败;使用NPU设备序号指定设备,支持单个和范围指定且支持混用;使用NPU名称指定设备,支持同时指定多个同类型的NPU名称。

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

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_VNPU_SPECS

从物理NPU设备中划分出一定数量的AI Core,指定为虚拟设备。支持的取值为(vir01,vir02,vir02_1c,vir04,vir04_3c,vir08,vir16、vir04_4c_dvpp、vir04_3c_ndvpp)。

  • Atlas 训练系列产品(30或32个AI Core)处理器支持vir02、vir04、vir08和vir16。
  • Atlas 推理系列产品处理器支持vir01、vir02、vir02_1c、vir04、vir04_3c、vir04_4c_dvpp、vir04_3c_ndvpp。

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

ASCEND_VNPU_SPECS=vir04表示划分4个AI Core作为vNPU,挂载至容器。