NPU直通虚拟机
本章节以Atlas 800 推理服务器(型号:3010)+Atlas 300I Pro 推理卡 openEuler 22.03 LTS系统为例说明如何将NPU直通虚拟机,操作步骤中的图片和打印信息仅为示例,请以实际操作界面为准。
前提条件
- 对于Atlas 900 A2 PoD 集群基础单元/Atlas 800T A2 训练服务器/Atlas 800I A2 推理服务器,NPU模组CPLD版本需为2.09及以上版本。
- 对于Atlas 200T A2 Box16 异构子框,NPU模组CPLD版本需为2.04及以上版本。
可登录iBMC命令行通过执行ipmcget -d v查询NPU模组CPLD版本,查看如下截图中“CPLD Version”字段。
操作步骤
- 对于Atlas 900 A2 PoD 集群基础单元/Atlas 800T A2 训练服务器/Atlas 800I A2 推理服务器(HCCS款)/Atlas 200T A2 Box16 异构子框,需要对指定NPU芯片进行降P启动。
- 用户以Administrator账号登录设备iBMC后台。
- 执行如下命令,将服务器下电。
WARNING: A forced power-off may damage programs or unsaved data of the server. Do you want to continue?[Y/N]:
输入“Y”:
Control fru0 forced power off successfully.
- 执行如下命令,查询NPU芯片隔离状态。
NPU1 Status: Enabled NPU2 Status: Enabled NPU3 Status: Enabled NPU4 Status: Enabled NPU5 Status: Enabled NPU6 Status: Enabled NPU7 Status: Enabled NPU8 Status: Enabled
- 状态显示为“Enabled”,表示NPU芯片未被隔离,需要进行后续操作对指定NPU芯片进行降P启动。
- 状态显示为“Isolation”,表示NPU芯片已被隔离,则可跳过后续操作。
- 对于Atlas 900 A2 PoD 集群基础单元/Atlas 800T A2 训练服务器/Atlas 800I A2 推理服务器(HCCS款),iBMC后台上查询到的NPU1~NPU8分别与物理机上通过npu-smi info命令查询到的NPU0~NPU7相对应。
- 对于Atlas 200T A2 Box16 异构子框,iBMC后台上查询到的NPU1~NPU16分别与物理机上通过npu-smi info命令查询到的NPU0~NPU15相对应。
- 执行如下命令,修改指定NPU芯片隔离状态。
ipmcset -d npuisolation -v 3 1
此处以NPU ID为3举例,命令中“1”表示NPU芯片隔离,即降P启动;“0”表示NPU芯片正常启动。
如果需要修改多张NPU芯片隔离状态,依次执行如上步骤即可。
- 执行如下命令,查询NPU芯片隔离状态。
NPU1 Status: Enabled NPU2 Status: Enabled NPU3 Status: Isolation NPU4 Status: Enabled NPU5 Status: Enabled NPU6 Status: Enabled NPU7 Status: Enabled NPU8 Status: Enabled
- 执行如下命令,将服务器上电。
WARNING: The operation may have many adverse effects. Do you want to continue?[Y/N]:
输入“Y”:
Control fru0 power on successfully.
- 登录物理机,执行如下命令,查看环境上NPU芯片的PCIe信息,确定待直通的NPU芯片的PCIe信息。后续步骤以3b:00.0为例。lspci | grep <device_name>
root@huawei:~# lspci | grep d500 3b:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d500 (rev 23) 3c:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d500 (rev 23) 5e:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d500 (rev 23) 86:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d500 (rev 23) 87:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d500 (rev 23) af:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d500 (rev 23) d8:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d500 (rev 23)
- 执行如下命令,获取待直通的NPU芯片的'wwnn,wwpn' 格式的设备名称(例如:pci_0000_3b_00_0)。virsh nodedev-list --tree | grep pci
root@huawei:~# virsh nodedev-list --tree | grep pci ...... +- pci_0000_3a_00_0 | +- pci_0000_3b_00_0 +- pci_0000_3a_02_0 | +- pci_0000_3c_00_0 +- pci_0000_3a_05_0 +- pci_0000_3a_05_2 +- pci_0000_3a_05_4 ......
- 执行以下命令,获取待直通NPU芯片的xml信息,确认NPU芯片的domain、bus、slot、function字段的值。
virsh nodedev-dumpxml <device>
root@huawei:~# virsh nodedev-dumpxml pci_0000_3b_00_0 <device> <name>pci_0000_3b_00_0</name> <path>/sys/devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0</path> <parent>pci_0000_3a_00_0</parent> <driver> <name>devdrv_device_driver</name> </driver> <capability type='pci'> <class>0x120000</class> <domain>0</domain> <bus>59</bus> <slot>0</slot> <function>0</function> <product id='0xd500'/> <vendor id='0x19e5'>Huawei Technologies Co., Ltd.</vendor> <iommuGroup number='39'> <address domain='0x0000' bus='0x3b' slot='0x00' function='0x0'/> </iommuGroup> <numa node='0'/> <pci-express> <link validity='cap' port='0' speed='16' width='16'/> <link validity='sta' speed='8' width='8'/> </pci-express> </capability> </device>
- 执行如下命令,查询虚拟机列表。
virsh list --all
[root@localhost ~]# virsh list --all Id Name State ---------------------------- 1 openeuler running
- 执行如下命令,关闭目标虚拟机。
virsh shutdown <domain>
[root@localhost vm]# virsh shutdown openeuler Domain openeuler is being shutdown
- 修改目标虚拟机配置,将NPU芯片直通到目标虚拟机。
- 执行如下命令,打开目标虚拟机的配置文本。virsh edit <domain>
[root@localhost vm]# virsh edit openeuler Domain openeuler XML configuration edited. [root@localhost vm]#
ubuntu系统可能会出现如下提示,请按照提示选择编辑器。
Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed Choose 1-4 [1]:
- 在配置文本的devices域中添加待直通的NPU芯片信息,格式如下:
<hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x3b' slot='0x00' function='0x0'/> </source> </hostdev>
- 执行如下命令,打开目标虚拟机的配置文本。
- 执行如下命令,打开目标虚拟机。
对于Atlas 800 训练服务器(型号:9000),若关闭虚拟机后需要短时间内重新打开虚拟机,需确保在物理机下能够执行npu-smi info命令查询到对应的直通NPU设备,请等待至少20s后再打开虚拟机。
virsh start <domain>[root@localhost vm]# virsh start openeuler Domain openeuler started
- 登录到目标虚拟机。
在物理机上通过ssh root@xxx 命令登录目标虚拟机(xxx为目标虚拟机IP地址,如:192.168.1.199)
- 执行如下命令查看直通的NPU芯片PCIe信息。
lspci | grep <device_name>
[root@localhost ~]# lspci | grep d500 3b:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d500 (rev 23)
表1 参数说明 参数
说明
device_name
NPU芯片的PCIe名称。
- Atlas 300I Pro 推理卡/Atlas 300V Pro 视频解析卡Atlas 300V 视频解析卡/Atlas 300I Duo 推理卡<device_name>取值为d500
- Atlas 800 训练服务器(型号:9000)<device_name>取值为d801
- Atlas 200T A2 Box16 异构子框/Atlas 800T A2 训练服务器/Atlas 800I A2 推理服务器/Atlas 900 A2 PoD 集群基础单元<device_name>取值为d802
- Atlas 200I A2 加速模块<device_name>取值为d105
domain
目标虚拟机名称。可以通过virsh list --all命令查看。
device
'wwnn,wwpn' 格式的设备名称,例如:pci_0000_3b_00_0。
父主题: 配置NPU直通虚拟机