下载
中文
注册

虚拟NPU使用场景

首先对物理NPU按照固定模板进行虚拟化切分,再将虚拟NPU挂载至本人使用的容器进行推理作业。

创建vNPU

  • 在物理机执行以下命令设置虚拟化模式。
    npu-smi set -t vnpu-mode -d 0
  • 创建vNPU。

    命令格式:npu-smi set -t create-vnpu -i id -c chip_id -f vnpu_config [-v vnpu_id] [-g vgroup_id]

    类型

    描述

    id

    设备id。通过npu-smi info -l命令查出的NPU ID即为设备id。

    chip_id

    芯片id。通过npu-smi info -m命令查出的Chip ID即为芯片id。

    vnpu_config

    算力切分模板名称,代表对应的硬件资源数量。

    模板包括:vir01、vir02、vir04、vir02_1c、vir04_3c、vir04_3c_ndvpp、vir04_4c_dvpp。

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

    vnpu_id

    指定需要创建的vNPU的id。

    • 首次创建可以不指定该参数,由系统默认分配。若重启后业务需要使用重启前的vnpu_id,可以使用-v参数指定重启前的vnpu_id进行恢复。
    • 取值范围。

      vnpu_id的取值范围为[phy_id*16 + 100, phy_id * 16+107]。

      说明:

      phy_id表示芯片物理ID,可通过执行ls /dev/davinci*命令获取芯片的物理ID。例如/dev/davinci0,表示芯片的物理ID为0。

    • vnpu_id传入4294967295时表示不指定虚拟设备号。
    • 同一台服务器内不可重复创建相同vnpu_id的vNPU。

    vgroup_id

    虚拟资源组vGroup的id,取值范围0~3。

    说明:
    • vGroup是指虚拟化时NPU根据用户指定的虚拟化模板划分出虚拟资源组vGroup,每个vGroup包含若干AICore、AICPU、HBM内存、DVPP资源;
    • 如果用户使用模板vir04、vir04_3c、vir02、vir02_1c、vir04_3c_ndvpp、vir04_4c_dvpp,那么系统就会创建一个对应资源的vGroup,该vGroup包含与虚拟化实例模板匹配的AICore和其他硬件资源,vGroup再将资源提供给vNPU使用;
    • 一个Atlas 300V最多支持划分4个vGroup,vGroup至少包含2个AICore,如果用户使用模板vir01(无论是1个vir01还是2个vir01),NPU分配的vGroup同样包含2个AICore,vNPU通过分时复用的方式使用vGroup资源,比如通过2个vir01模板切分的2个vNPU,那么每个vNPU会通过串行的方式轮流使用vGroup的资源(如vNPU1使用1毫秒,然后vNPU2使用1毫秒)。
    表1 各虚拟化实例模板对应的资源信息

    处理器型号

    虚拟化实例模板

    AI Core核数

    内存

    AI CPU

    VPC

    VDEC

    JPEGD

    PNGD

    VENC

    JPEGE

    Atlas 推理系列产品

    vir04

    4

    12G

    4

    6

    6

    8

    NA

    2

    4

    vir04_3c

    4

    12G

    3

    6

    6

    8

    NA

    1

    4

    vir02

    2

    6G

    2

    3

    3

    4

    NA

    1

    2

    vir02_1c

    2

    6G

    1

    3

    3

    4

    NA

    0

    2

    vir01

    1

    3G

    1

    1

    1

    2

    NA

    0

    1

    vir04_3c_ndvpp

    4

    12G

    3

    0

    0

    0

    NA

    0

    0

    vir04_4c_dvpp

    4

    12G

    4

    12

    12

    16

    NA

    3

    8

    昇腾AI处理器包含AI Core、AI CPU、DVPP、内存等硬件资源,主要用途如下:

    • AI Core主要用于矩阵乘等计算,适用于卷积模型。
    • AI CPU主要负责执行CPU类算子(包括控制算子、标量和向量等通用计算)。
    • 算力切分(创建指定芯片的vNPU)会使能SRIOV,将data CPU转化为AI CPU,因此会导致NPU信息中的AI CPU个数发生变化。
    • DVPP为数字视觉预处理模块,提供对特定格式的视频和图像进行解码、缩放等预处理操作,以及对处理后的视频、图像进行编码再输出的能力,包含VPC、VDEC、JPEGD、PNGD、VENC、JPEGE模块。
      • VPC:视觉预处理核心,提供对图像进行缩放、色域转换、降bit数处理、存储格式转换、区块切割转换等能力。
      • VDEC:视频解码器,提供对特定格式的视频进行解码的能力。
      • JPEGD:JPEG图像解码器,提供对JPEG格式的图像进行解码的能力。
      • PNGD:PNG图像解码器,提供对PNG格式的图像进行解码的能力。
      • VENC:视频编码器,提供对特定格式的视频进行编码的能力。
      • JPEGE:JPEG图像编码器,提供对图像进行编码输出为JPEG格式的能力。
    使用示例如下:
    • 在1号推理卡中编号为0的芯片上根据模板vir02创建vNPU。
      npu-smi set -t create-vnpu -i 1 -c 0 -f vir02
              Status : OK         Message : Create vnpu success
    • 在1号推理卡中编号为0的芯片上指定vnpu_id为103创建vNPU设备,此vNPU的模板为vir02。
      npu-smi set -t create-vnpu -i 1 -c 0 -f vir02 -v 103
              Status : OK         Message : Create vnpu success
    • 在1号推理卡中编号为0的芯片上指定vnpu_id为100并指定vgroup_id为1创建vNPU设备,此vNPU的模板为vir02。
      npu-smi set -t create-vnpu -i 1 -c 0 -f vir02 -v 100 -g 1
              Status : OK         Message : Create vnpu success
  • 配置vNPU恢复状态。该参数用于重启服务器时,能够保存vNPU配置信息,重启后,vNPU配置依然有效。

    命令格式:npu-smi set -t vnpu-cfg-recover -d mode

    mode表示vNPU的配置恢复使能状态,“1”表示开启状态,“0”表示关闭状态,默认为使能状态。

    执行如下命令设置vNPU的配置恢复状态,以下命令表示将vNPU的配置恢复状态设置为使能状态。

    npu-smi set -t vnpu-cfg-recover -d 1

           Status : OK
           Message : The VNPU config recover mode Enable is set successfully.
  • 查询vNPU的配置恢复状态。

    以下命令表示查询当前环境中vNPU的配置恢复使能状态。

    npu-smi info -t vnpu-cfg-recover

    VNPU config recover mode : Enable
  • 查询vNPU信息。

    命令格式:npu-smi info -t info-vnpu -i id -c chip_id

    类型

    描述

    id

    设备id。通过npu-smi info -l命令查出的NPU ID即为设备id。

    chip_id

    芯片id。通过npu-smi info -m命令查出的Chip ID即为芯片id。

    执行如下命令查询vNPU信息。以下命令表示查询设备1中编号为0的芯片的vNPU信息。

    npu-smi info -t info-vnpu -i 1 -c 0

将vNPU挂载到容器

用户通过npu-smi工具创建vNPU后,在拉起容器时执行以下命令将vNPU挂载至容器中。以下命令表示用户在拉起容器时,挂载虚拟芯片ID为100的芯片(如下加粗内容所示)。

docker run -itd --ipc=host \
--device=/dev/vdavinci100:/dev/davinci100 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/local/sbin/:/usr/local/sbin/ \
-v /var/log/npu/conf/slog/slog.conf:/var/log/npu/conf/slog/slog.conf \
-v /var/log/npu/slog/:/var/log/npu/slog \
-v /var/log/npu/profiling/:/var/log/npu/profiling \
-v /var/log/npu/dump/:/var/log/npu/dump \
-v /var/log/npu/:/usr/slog \
docker_image_id  \
/bin/bash
表2 参数说明

参数

说明

--device

表示映射的设备,vdavinci100是申请的虚拟设备,需要根据实际设备名称修改。其他保持不变。注意映射到容器中需要重命名为davinci100,对应的ID保持不变,仅将vdavinci修改为davinci。其它的保持不变。

docker_image_id

容器镜像ID,请替换为实际容器镜像ID。执行docker images查看镜像ID。

执行之后即可启动容器,并将创建的虚拟设备映射到容器中。

容器启动之后,执行以下命令查看当前Docker容器中可以使用的davinci设备,如果有davinci设备则表示虚拟设备成功映射到容器中。

ls /dev/ | grep davinci*

销毁vNPU

销毁指定vNPU。

命令格式:npu-smi set -t destroy-vnpu -i id -c chip_id -v vnpu_id

示例:执行npu-smi set -t destroy-vnpu -i 1 -c 0 -v 103销毁设备1编号0的芯片中编号为103的vNPU设备。回显以下信息表示销毁成功。
       Status : OK
       Message : Destroy vnpu 103 success

在销毁指定vNPU之前,请确保此设备未被使用。