虚拟化相关面试题集锦(1)—— 如何在QEMU/KVM中跑通AI相关训练

接前一篇文章:虚拟化相关面试题集锦(0)------ 引言

问题1

问:如何在QEMU/KVM虚拟机上跑通AI相关模型的训练和测试,并对虚拟机的GPU资源的分配进行配置和优化?

备注:此问题是笔者年上周参加中科时代(一家有中科院背景的小公司)面试时遇到的一个问题。此问题是当时其CTO提出的。说实话,这个问题比较"冷门"。一般用QEMU/KVM,都是使用CPU,而主要的精力也是放在对CPU、内存、virtIO的研究上就可以了,如果能够研究到图形(DRM)相关的虚拟化,就已经算是比较精深了。而中科时代的这个诉求是对于GPU进行虚拟化以及在虚拟机中进行资源配置,笔者还是第一次遇到这一类诉求和问题。当时笔者也是根据自己所知道的AI相关的知识、Linux内核相关的知识,触类旁通地进行了回答,当然,肯定比较空泛。我当时大概是这样说的:就我目前的认识,首先前提是必须有一台带有GPU的物理机,在其上进行实现;然后要移植N卡(Nvidia)、A卡(AMD)或其它公司显卡对应的包,这一般是由厂家提供,移植过来就好。一切正常后,会生成相应的设备结点(如/dev/dri/card0);之后就可以安装AI相关的集成开发环境、以及相关的数据和模型进行训练了;关于如何配置虚拟GPU的资源,可以通过QEMU的命令行参数、或者通过VirtManager利用图形界面进行分配和配置。就是当时面试的情况和状态,面试结束回来后,通过在CSDN"问答"中提问,网友给出了一些相关的回复,虽然这些回复基本上都是通过类chatGPT的工具给出的,但笔者觉得也还是挺有用的。以下就将这些回复整理结合后写在回答中。

答:

1. 解决方案

在QEMU/KVM中虚拟化GPU并运行AI训练,可以有以下解决方案:

(1)使用GPU直通(pass-through)技术

通过将物理GPU直接分配给虚拟机,可以实现Hypervisor级别的GPU虚拟化。这样,虚拟机可以完全访问GPU硬件并进行AI训练。这种方法需要确保物理机具有支持VT-d (Intel) 或 IOMMU (AMD) 技术的CPU和主板,并且需要适当的GPU驱动支持。配置方法如下:

1)配置主机的IOMMU功能并确保启用GPU直通支持;

2)在QEMU虚拟机中配置PCI Pass-through,将GPU设备分配给虚拟机;

3)在虚拟机中安装适当的GPU驱动程序。

(2)使用virtio-gpu

virtio-gpu是一种基于Para-virtualization的虚拟图形卡设备。它提供了虚拟机和宿主机之间的通信接口,允许虚拟机访问GPU功能。但由于它是基于软件实现的,并没有直接访问物理GPU硬件,所以性能可能会受到一些影响。配置方法如下:

(1)在QEMU虚拟机中启用virtio-gpu设备;

(2)在虚拟机中安装virtio-gpu驱动程序;

(3)在虚拟机中安装相应的GPU计算库和工具,如CUDA、cuDNN等。

(3)使用GPU虚拟化中间件

除了直通和软件实现的虚拟图形卡设备外,还有一些第三方的GPU虚拟化中间件 可供选择,如NVIDIA的GRID Virtual GPUAMD的MxGPU这些中间件可以提供硬件加速的虚拟化性能,并允许多个虚拟机共享同一个物理GPU配置方法类似于直通技术,但需要安装相应的虚拟化中间件并进行适当的配置

注意:在实现基于GPU的虚拟化之前,需要确保你的硬件和软件环境都支持所选择的虚拟化方法。

2. 解决思路与步骤

以上面第三种解决方案为例,解决思路和对应的步骤如下:

(1)选择合适的QEMU版本和GPU模拟支持

确保选择的QEMU版本支持GPU虚拟化,并且GPU模拟支持良好。通常情况下,较新版本的QEMU会有更好的GPU虚拟化支持。

可以查看QEMU的官方文档或者社区论坛,了解最新版本的QEMU是否支持你所需要的GPU虚拟化功能。

(2)准备GPU虚拟化所需的软件和驱动

需要准备好支持GPU虚拟化的软件和驱动。这可能包括NVIDIA的GRID 虚拟GPU软件、或者AMD的MxGPU软件等。

根据所选择的GPU类型,获取并安装相应的GPU虚拟化软件。例如,如果要虚拟化NVIDIA GPU,需要安装NVIDIA的GRID虚拟GPU软件。这些软件通常由GPU厂商提供,你可以从他们的官方网站上获取。

(3)配置QEMU虚拟机

配置QEMU虚拟机以支持GPU虚拟化。这可能包括修改QEMU的启动参数,指定虚拟GPU的类型和数量,以及分配足够的资源给虚拟机。

在启动QEMU虚拟机时,通过命令行参数或者配置文件来指定GPU虚拟化相关的参数 。这些参数通常包括虚拟GPU的类型数量 ,以及分配给虚拟机的显存大小等。

(4)安装操作系统和相关软件

在虚拟机中安装操作系统和相关软件,确保所选的操作系统版本支持GPU虚拟化,并且能够正常识别和使用虚拟GPU进行AI相关的训练任务。

安装并配置所需的AI训练框架和库,例如TensorFlow、PyTorch等。

(5)测试和优化

在完成上述步骤后,测试虚拟机是否能够正常使用GPU进行AI相关的训练任务。根据测试结果进行优化和调整,以提高虚拟机的性能和稳定性。

3. 关键步骤细节

(1)支持硬件辅助虚拟化的GPU

硬件厂商如NVIDIA和AMD提供了针对其GPU的硬件虚拟化技术 ,如NVIDIA的vGPU(Virtual GPU)和AMD的MxGPU。这些技术使得宿主机上的物理GPU可以被多个虚拟机共享,每个虚拟机都能得到一部分GPU资源。

官方文档:

(2)安装和配置设备驱动及工具

  • NVIDIA GPU

对于NVIDIA GPU ,使用nvidia-docker 或者NVIDIA的vGPU解决方案(例如GRID或Tesla M60系列支持的vGPU技术)。在宿主机上安装NVIDIA驱动、CUDA Toolkit,并配置libvirt以启用vGPU特性。

bash 复制代码
# 安装NVIDIA驱动和相关软件包
sudo apt-get install nvidia-driver-XXX cuda-toolkit-XXX qemu-guest-agent libvirt-daemon-driver-nvram
 
# 配置QEMU虚拟机启动选项以使用vGPU
<video>
  <model type='nvidia-vgpu' vgpu_type='...' />
</video>
  • AMD GPU

对于AMD GPU,利用**SR-IOV(Single Root I/O Virtualization)**技术,确保BIOS开启该功能,然后配置虚拟机来直接映射GPU硬件。

bash 复制代码
<!-- 在libvirt的XML配置中添加AMD GPU直通 -->
<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
    <address domain='0x0000' bus='0xXX' slot='0xYY' function='0xZZ'/>
  </source>
  <address type='pci' domain='0x0000' bus='0x0A' slot='0x00' function='0x0'/>
</hostdev>

(3)在虚拟机内部配置GPU驱动

对于Linux虚拟机,需要在客户机内核中启用相应的驱动模块,并安装相应显卡驱动程序,以便识别和使用分配给它的GPU资源。

(4)运行AI相关的训练任务

一旦虚拟机正确识别了GPU,就可以像在物理机上一样,在虚拟机内部安装深度学习框架(如TensorFlow、PyTorch),并配置训练脚本指向虚拟GPU进行计算加速。

此外,由于安全性和性能考量,GPU虚拟化通常需要精细的权限管理和资源调度策略,确保各虚拟机间的隔离性和公平性。

相关推荐
码农爱java3 小时前
设计模式--抽象工厂模式【创建型模式】
java·设计模式·面试·抽象工厂模式·原理·23种设计模式·java 设计模式
Jiude3 小时前
算法题题解记录——双变量问题的 “枚举右,维护左”
python·算法·面试
长安05119 小时前
面试经典题目:LeetCode134_加油站
c++·算法·面试
正在绘制中10 小时前
Java重要面试名词整理(一):MySQL&JVM&Tomcat
java·开发语言·面试
沉默王二10 小时前
虾皮开的很高,还有签字费。
后端·面试·github
Do10 小时前
时间系列三:实现毫秒级倒计时
前端·javascript·面试
小蜗牛慢慢爬行11 小时前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
ThisIsClark12 小时前
【后端面试总结】MySQL主从复制逻辑的技术介绍
mysql·面试·职场和发展
程序猿进阶13 小时前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
LCG元20 小时前
【面试问题】JIT 是什么?和 JVM 什么关系?
面试·职场和发展