本章节以Atlas 800 推理服务器(型号:3010)+Atlas 300I Pro 推理卡 openEuler 22.03 LTS系统为例说明如何将NPU直通虚拟机,操作步骤中的图片和打印信息仅为示例,请以实际操作界面为准。
可登录iBMC命令行通过执行ipmcget -d v查询NPU模组CPLD版本,查看如下截图中“CPLD Version”字段。
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.
NPU1 Status: Enabled NPU2 Status: Enabled NPU3 Status: Enabled NPU4 Status: Enabled NPU5 Status: Enabled NPU6 Status: Enabled NPU7 Status: Enabled NPU8 Status: Enabled
ipmcset -d npuisolation -v 3 1
此处以NPU ID为3举例,命令中“1”表示NPU芯片隔离,即降P启动;“0”表示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.
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)
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 ......
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
[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]:
<hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x3b' slot='0x00' function='0x0'/> </source> </hostdev>
<memoryBacking> <hugepages> <page size='16777216' unit='KiB'/> </hugepages> </memoryBacking>
执行如下命令,配置静态大页。以虚拟机配置内存大小64G,大页内存16G为例,其中4表示虚拟机配置的内存大小÷大页内存。
echo 4 > /sys/devices/system/node/node0/hugepages/hugepages-16777216kB/nr_hugepages
echo 4 > /sys/devices/system/node/node1/hugepages/hugepages-16777216kB/nr_hugepages
echo 4 > /sys/devices/system/node/node2/hugepages/hugepages-16777216kB/nr_hugepages
echo 4 > /sys/devices/system/node/node3/hugepages/hugepages-16777216kB/nr_hugepages
对于Atlas 800 训练服务器(型号:9000),若关闭虚拟机后需要短时间内重新打开虚拟机,需确保在物理机下能够执行npu-smi info命令查询到对应的直通NPU设备,请等待至少20s后再打开虚拟机。
[root@localhost vm]# virsh start openeuler Domain openeuler started
在物理机上通过ssh root@xxx 命令登录目标虚拟机(xxx为目标虚拟机IP地址,如:192.168.1.199)
lspci | grep <device_name>
[root@localhost ~]# lspci | grep d500 3b:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d500 (rev 23)
参数 |
说明 |
---|---|
device_name |
NPU芯片的PCIe名称。
|
domain |
目标虚拟机名称。可以通过virsh list --all命令查看。 |
device |
'wwnn,wwpn' 格式的设备名称,例如:pci_0000_3b_00_0。 |