高通云AI 100开发者指南(三)
即使虚拟机中的驱动程序崩溃导致整个虚拟机崩溃,也不会影响主机,因此其他虚拟机中的其他服务可以继续运行。这种隔离提供了高水平的安全性,因为虚拟机中的一个应用程序可能不知道它在虚拟机中,更不用说存在其他虚拟机和其他应用程序。此外,虚拟机还提供了与主机的分离。即使虚拟机中的驱动程序崩溃导致整个虚拟机崩溃,这种崩溃也不会影响主机,因此其他虚拟机中的服务仍可以继续运行。结合QEMU和libVirt,KVM虚
高通云AI 100开发者指南(三)
2 安装指导
Platform SDK(x86和Arm)和Apps SDK(仅x86)针对基于Linux的平台。这些SDK可以在Linux操作系统上本地安装。通过Docker和Kubernetes也支持容器和编排。还支持包括KVM、ESXi和Hyper-V在内的虚拟机。本节涵盖:
在多个Linux发行版上安装SDK
使用SDK和第三方包构建Docker镜像,以实现QAic推理工具/工作流程的无缝执行
设置KVM、ESXi和Hyper-V,并安装SDK
使用Kubernetes进行部署
2.1 支持的操作系统、虚拟机管理程序和平台
AIC100平台SDK兼容以下操作系统(OS)和平台。
2.1.1 KVM
基于内核的虚拟机(KVM)是Linux内核中的一个模块,允许Linux操作系统作为虚拟机管理程序运行。这使得本地安装的Linux可以作为虚拟机的主机。结合QEMU和libVirt,KVM虚拟机可以模拟一个完全独立的系统,该系统可以限制在主机硬件的一部分上运行,并且可以运行与主机完全不同的操作系统。
关于KVM的概述,请访问https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine。
虚拟机的好处在于强隔离性。虚拟机彼此之间及与主机之间是隔离的。这种隔离提供了高水平的安全性,因为虚拟机中的一个应用程序可能不知道它在虚拟机中,更不用说存在其他虚拟机和其他应用程序。此外,虚拟机还提供了与主机的分离。即使虚拟机中的驱动程序崩溃导致整个虚拟机崩溃,这种崩溃也不会影响主机,因此其他虚拟机中的服务仍可以继续运行。
这些好处的代价是设置系统时需要额外的开销。此外,在虚拟机和本地硬件之间的运行时还可能需要额外的处理。
AIC100只支持PCIe直通到虚拟机。这意味着虚拟机完全拥有AIC100设备。AIC100设备不能在虚拟机之间共享,也不能在虚拟机和本地主机之间共享。
KVM虚拟机的一般设置和操作超出了本文档的范围。本文档假设读者熟悉这些操作,因此只解释与将AIC100设备分配给KVM虚拟机直接相关的部分。
AIC100仅支持表1中列出的操作系统作为虚拟机中的客户操作系统。
在虚拟机中,AIC100仍然需要分配32个消息信号中断(MSI)来运行,这要求虚拟机模拟IOMMU。在创建虚拟机时,必须配置虚拟机以模拟能够模拟IOMMU的系统。一个这样的系统是“q35”系统。如果使用“virt-install”,可以通过在virt-install命令中添加“—machine=q35”来创建基于q35的虚拟机。
本节剩余部分假设虚拟机是使用virt-install和–machine=q35选项创建的。其他系统可能需要不同的配置来达到相同的效果。
虚拟机创建后,必须进行配置。这可以在虚拟机未运行时通过“virsh edit”命令完成。有关此命令的更多详细信息,请参阅virsh手册页:https://linux.die.net/man/1/virsh。
虚拟机配置必须将模拟的IOMMU呈现给虚拟机中的客户操作系统,并且必须将AIC100设备传递进去。
首先,为了将IOMMU呈现给客户操作系统,需要在配置XML中添加以下元素:
1.在XML的“features”部分下添加“”,以分割模式配置ioapic驱动程序进行中断重映射。
2.在XML的“features”部分下添加以下代码片段,以启用中断重映射功能配置模拟的IOMMU:
<iommu model='intel'>
<driver caching_mode='on' intremap='on'/>
</iommu>
第二步,配置要传递给虚拟机客户操作系统的设备。
在主机上使用“lspci”命令获取AIC100设备的PCIe SBDF地址。
将步骤1中获得的设备地址添加到XML的“devices”部分,如下所示,但将address标签的值更改为与你的具体系统匹配的值。
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0' bus='0x0' slot='0x19' function='0x0'/>
</source>
</hostdev>
行这些编辑后,保存配置。下次启动虚拟机时,你将在虚拟机的lspci输出中看到AIC100设备。它将具有与主机不同的PCIe SBDF地址。按照操作本地系统的方式安装AIC100平台SDK和应用SDK。
2.1.2 Hyper-V
Hyper-V是一种虚拟化监控程序,通常与Microsoft Windows Server一起使用。这使得可以在本地安装Windows Server作为虚拟机的主机。虚拟机模拟一个完全独立的系统,可以限制其使用主机硬件的一个子集,并且还可以运行与主机完全不同的操作系统。
有关Hyper-V的概述,请参见https://en.wikipedia.org/wiki/Hyper-V。
虚拟机的好处在于强大的隔离性。虚拟机与其他虚拟机以及主机之间是隔离的。这种隔离提供了很高级别的安全性,因为虚拟机中的一个应用程序可能不知道自己处于虚拟机中,更不用说可能存在其他虚拟机和其他应用程序了。此外,虚拟机还与主机分隔开。即使虚拟机中的驱动程序崩溃导致整个虚拟机崩溃,也不会影响主机,因此其他虚拟机中的其他服务可以继续运行。
这些好处的代价是额外的系统设置开销。此外,在虚拟机和本机硬件之间可能需要额外的处理。
AIC100仅支持将PCIe设备直通到虚拟机,这意味着虚拟机完全拥有AIC100设备。AIC100设备不能在虚拟机之间共享,也不能在虚拟机和本机主机之间共享。
AIC100只支持作为虚拟机内运行的客户操作系统的Table:1中列出的操作系统。
在虚拟机中,AIC100仍然需要分配32个消息信号中断(MSI)才能运行。Hyper-V不支持在虚拟机的客户操作系统中模拟IOMMU。但是,Hyper-V支持一个在Linux内核中具有驱动程序的半虚拟化PCIe根控制器。该驱动程序利用Hyper-V监视程序来配置主机IOMMU,以便为诸如AIC100之类的设备提供MSI。
AIC100需要对Linux内核中的Hyper-V PCIe根控制器驱动程序进行以下修复以正常运行:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v5.19-rc7&id=08e61e861a0e47e5e1a3fb78406afd6b0cea6b6d
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v5.19-rc7&id=455880dfe292a2bdd3b4ad6a107299fce610e64b
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v5.19-rc7&id=b4b77778ecc5bfbd4e77de1b2fd5c1dd3c655f1f
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v5.19-rc7&id=a2bad844a67b1c7740bda63e87453baf63c3a7f7
请咨询您的Linux发行版提供商,确认这些修复是否包含在您的Linux发行版所使用的Linux内核中。
创建Hyper-V虚拟机后,必须将AIC100设备分配给该虚拟机。Hyper-V将此称为直接设备分配(DDA),与PCIe直通相同。
将AIC100设备分配给Hyper-V虚拟机的步骤如下:
配置虚拟机停止操作。
在Windows中禁用设备。
从Windows卸载设备。
有关这些步骤的详细信息,请参阅以下DDA资源:
https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/deploy/deploying-graphics-devices-using-dda
https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/deploy/deploying-storage-devices-using-dda
要识别要禁用和卸载的AIC100设备,请查找具有以下内容的“硬件ID”属性的设备:
PCI\VEN_17CB&DEV_A100&SUBSYS_A10017CB&REV_00
一旦将AIC100设备分配给虚拟机,下次启动虚拟机时,它应该出现在虚拟机的lspci输出中。它的PCIE SBDF地址将与主机不同。安装AIC100软件的方式与在原生系统上操作时相同。
更多推荐
所有评论(0)