GPU 虚拟化 [二]

来源:术道经纬 发布时间:2023-07-13 11:27:55 阅读量:172

硬件 - 空分

上文介绍的基于 SR-IOV 硬件虚拟化技术的 GPU,VF 的数量比较固定,且每个 VF 获得的资源是均分的、定额的。将这些 VF 透传给虚拟机后,由于各个虚机的 workload 不同,就可能出现某些 VF 的资源不够用,而另一些 VF 的资源用不完的情况。
饱汉不知饿汉饥,绝对的平均虽然简单,但对资源的利用并不充分。
作为业界一哥的 Nvidia【注-1】,自 2020 年的 Ampere 微架构(比如 A100)开始支持一种叫做 MIG (Multi Instance GPU) 的技术,可使 GPU 的综合利用率更加饱和。毕竟现在高端 GPU 老贵了不是,据 Nvidia 官网报价, A100 售价 1 万美元/块(北上深一平米的价格),H100 售价 3.6 万美元/块(北上深的豪宅一平米的价格),必须物尽其用啊。
Multi-Instance,那一个 instance 具体是什么呢?
一颗 Discrete GPU 的硬件资源主要包括两类:计算单元和内部存储(video memory)。如果对它们分片,那么就形成了 compute slice 和 memory slice(每个 memory slice 有独立的 memory controller 和 cache,不损失访问带宽)。
然后我可以根据 workload 的需要,将这些 slices 进行一定的组合,就形成了多个 instance(vGPU):

比如上图的 "4g.20gb",表示的是 4 个 compute slice,20 GB 显存(4 个 memory slice):

划分方式多种多样,在不牺牲隔离性的同时提高了应用的灵活性:

不过 slice 的划分不是随心所欲的,不是你想切多细就能切多细(想起了涡虫),还是受到底层硬件设计的限制:

MIG 技术可视作是基于传统 SR-IOV 的演进和创新,一个 instance 大致可对应一个 PCIe VF。
以 MIG 为代表的硬件资源划分主要在空间上(spatial),同一物理 GPU上的各个 vGPU 获得的资源是专属的(dedicate),可以获得良好的并行性。

软件 - 时分

不过 MIG 的 partition 同普通 SR-IOV 一样,依然是静态的,不可在使用过程中动态调整。假设中途有 vGPU 被移除,那么空出来的资源也不能被重新分配。
与之相对的是软件从时间上(temporal)的划分,即 Time-Sliced vGPU(也有一定的 hardware-assistant)。
这种虚拟化方式就和 CPU 虚拟化就比较像了。vGPU 被串行地调度执行,一个 vGPU 需等待其他 vGPU 让出物理 GPU,但当它获得物理 GPU 时,其对 GPU engine 的使用是 exclusive 的。
如果出现 vGPU 的动态移除或添加,那么每个 vGPU 可分配到的 cycle 数将被重新计算。

最近读《杨苡口述自传》,正好看到这么一段话“系里师生间都在传,好几位女士在追他。据说范先生见谁都有严格的时间,她们几个是不会碰到的”,有评论说是“时间管理大师”。
另一种相似的软件虚拟化方案是 vfio-mdev(其中 "m" 代表 mediate),大致是通过软件层的协调,向上呈现出一个类似 VF 的 mdev 设备。Intel 基于 mdev 的虚拟化技术叫做 GVT-g,被 i915 等芯片驱动所采用。
这里说的“软件”的功能(比如 scheduling),主要是由 KVM/Xen 这样的 hypervisor 来承担的,而硬件虚拟化是不需要 hypervisor 介入的。

小结

目前的 A100 和 H100 等芯片,支持选择使用 MIG-Backed 或 Time-Sliced 模式,Nvidia 早期的一些型号,则只支持 Time-Sliced。
MIG 模式下,vGPU 之间互不影响,具有比较确定的 throughput 和 latency,而这正是 real-time 的标准(「实时性」不在于响应有对快,而在于能在确定的时间内返回确定的结果)。在这一点上,MIG 是优于软件虚拟化方案的。
但不管是上文提到的物理 GPU 整体透传(PCI-Passthrough),还是部分透传(VF-Passthrough/MIG),在虚拟化场景下都难以支持 live-migration。
综合来看,MIG 作为新一代的技术,对性能、隔离性和灵活性有较好的兼顾,但目前也存在使用上的一些限制,并且对硬件设计的能力应该要求较高。二三线厂商在虚拟化方面多以硬件的 PF/VF 方式打底,再结合 mdev 等软件方案来扩展适用面。

注-1:Ampere 就是电流单位「安培」,以纪念法国物理学家 Ampère。Nvidia 的 GPU 架构多以这些科学先驱命名,其他还有 Volta, Turing, Tesla 等。

  网站地图
沪ICP备19040636号-1
Catfish(鲶鱼) Blog V 4.7.3