虚拟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。
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的配置恢复状态。
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
参数 |
说明 |
---|---|
--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
Status : OK Message : Destroy vnpu 103 success

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