1 昇腾虚拟化(算力切分)介绍
1.1 特性说明
特性说明通过NPU虚拟化是将物理机或虚拟机配置的NPU(昇腾AI处理器)切分成若干份vNPU(虚拟NPU)挂载到容器中,支持多用户共同使用一个NPU,提高资源利用率。使用说明和相关约束详见链接。
1.2 虚拟化规则
以Atlas 300I Pro 推理产品为例说明虚拟化规则。虚拟化的方案受到AI Core核数、内存、AICPU核数、VPC总核数、VDEC总核数、JPEGD总核数、PNGD总核数、VENC总核数、JPEGE总核数等的影响,定义了推理系列产品虚拟化实例模板:vir01、vir02、vir04、vir02_1c、vir04_3c、vir04_3c_ndvpp、vir04_4c_dvpp。
如vir04模板,AI Core核数 4,内存 12GB,AICPU 4等。而Atlas 300I Pro共7个AICPU核,vir04_3c模板只有3个AI CPU。
每张卡有如下组合切分方式,每一行是一种切分组合,把虚拟化实例模板进行组合。
1.3 创建vNPU
下面介绍在物理机使用npu-smi命令静态虚拟化创建vNPU,更多介绍参考社区资料和NPU-SMI算力切分相关命令。
操作步骤:
1)在物理机执行以下命令设置虚拟化模式为容器模式:
npu-smi set -t vnpu-mode -d 0
2)创建vNPU命令,如把0卡0芯切分未4个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。
- npu-smi set -t create-vnpu -i 0 -c 0 -f vir02 -v 100
- npu-smi set -t create-vnpu -i 0 -c 0 -f vir02 -v 101
- npu-smi set -t create-vnpu -i 0 -c 0 -f vir02 -v 102
- npu-smi set -t create-vnpu -i 0 -c 0 -f vir02_1c -v 103
3)查询vNPU信息命令:
npu-smi info -t info-vnpu -i id -c chip_id
- npu-smi info -t info-vnpu -i 0 -c 0
2 安装测试的工具
安装ais_bench测试工具,安装包链接。
3 挂载vnpu(基于原生docker挂载)
1) 查看已经创建好的vnpu
ls /dev/vdavinci*
2)创建容器进行设备映射(参考)
if [ $# -ne 2 ]; then
echo "error: need one argument describing your container name."
exit 1
fi
docker run --name ${NAME} -it -d --net=host --shm-size=500g \
-w /home \
--device=/dev/vdavinci132:/dev/davinci0 \
--device=/dev/vdavinci133:/dev/davinci1 \
--device=/dev/vdavinci134:/dev/davinci2 \
--device=/dev/vdavinci135:/dev/davinci3 \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--entrypoint=bash \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/sbin:/usr/local/sbin \
-v /home:/home \
-v /data:/data \
-v /tmp:/tmp \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
${IMAGES_ID}
说明:
1)把一张卡上创建的4个vnpu映射到容器内,这里被映射到容器内的id(须指定为/dev/davinciX,davinci后面的数字)。ais_bench测试工具设备ID的范围只支持在[0,7],
2)创建容器时不支持特权容器(启动脚本不能携带–privileged=true),其次,映射的vpnu块数必须<=8,(上述脚本映射的vNPU为4块)其他的可以参照文档。
4 性能测试
使用ais_bench测试工具,–device指定使用虚拟化的vNPU ID(0~3)。
5 销毁vNPU
命令格式:
npu-smi set -t destroy-vnpu -i id -c chip_id -v vnpu_id
**注意:**如果一张卡按照规则被虚拟化为4 个vNPU之后,后续想要虚拟化为7 个vNPU,需要先销毁之前的4 vNPU,销毁vNPU之后,重新创建vNPU。