在上一期,我们讲了一个令狐冲通过使用NVidia GRID vGPU方案,把虚拟化的GPU通给多个虚拟机的方案。但是,这个方案仍然没有解决一个关键的问题——不同的GPU虚拟化实例之间的故障隔离问题。如果任何一个虚拟化实例出现故障,会导致物理GPU上,虚拟的所有GPU实例中运行的程序被全部抛出异常。
如果令狐冲正在《实况足球》中指挥队员与对手厮杀,其他使用同一物理GPU的用户在调试程序并且造成了GPU异常(如内存越界访问),就会导致令狐冲的游戏中断!
令狐冲认为这是不可接受的,即使世界即将毁灭,也不应当在游戏中挂机。为了寻求解决方案,令狐冲来到思过崖后的秘境岩洞,但绞尽脑汁也无法想出好的解决之道。
突然,令狐冲觉得有人在看着他。他抬起头,却又没有找到任何人。
难道自己大脑的渲染功能出错了?令狐冲再一转头,看见一位白须白发,仙风道骨的老者在对自己微笑。老者拍了拍令狐冲,告诉他:
“小伙子,我是你师父的大师叔,风清扬。”
令狐冲瞪大眼睛看着风清扬。
风清扬将武林的故事给令狐冲详细讲了一遍,也串起了令狐冲一些碎片化的理解。
原来,在GPU虚拟化的领域,有剑宗和气宗两种流派。
所谓的气宗就是通过GPU的内功,也就是硬件加持的虚拟化,在硬件电路上增加虚拟化的能力,进行GPU内存和计算单元的硬隔离。而所谓的剑宗,则是使用软件调度GPU实现GPU任务的隔离。若想理解剑气二宗,就需要先理解气宗的终极奥义——MIG。
“MIG,不是苏联战斗机设计局么?” 令狐冲问。
“MIG是Multi Instance GPU!” 风清扬大笑。
令狐冲赶紧去找MIG的资料。
MIG(Multi Instance GPU,多实例GPU)是NVidia在2020年发布的新一代GPU虚拟化方案。它的架构如下图所示:
我们再和上一期讲的GRID vGPU进行对比:
我们会发现,在虚拟机侧二者并没有差异,关键的地方在于,GRID vGPU Manager的调度功能被硬件替代了,而MIG vGPU Manager只对虚拟机中虚拟出来的GPU硬件进行地址翻译的配置作用。
MIG vGPU是一个半虚拟化的方案。在MIG vGPU方案中,VM上看到的GPU设备,实际上是真实物理硬件的一部分,其BAR和MMIO CSR的背后都是真实的物理硬件。
这是Nvidia在A100和H100等高端GPU上引入的硬件能力,能将一个GPU芯片虚拟出7个实例,提供给不同的VM使用,还可以为虚拟化的实例分配指定的GPU算力和GPU内存,实际上是一种空分复用,也就是硬件资源隔离(Hardware Partition)。
硬件资源隔离所带来的另一个价值就是硬件故障隔离。在前两种方案中,本质上GPU侧并没有实现真正的故障隔离,一旦一个提交给Nvidia的CUDA作业程序越界访问了GPU显存,其他VM的CUDA应用都有可能在抛出的异常中被杀掉。但是,MIG从根源上解决了这一问题。
看起来MIG是一个完美的方案,但实际上并非如此。
首先,MIG只有在高端的训练GPU上才支持,但GPU虚拟化更多的情况下是给推理使用;其次,MIG支持的实例数受硬件设计限制,目前只能支持7个GPU;最后,MIG只支持CUDA计算,对于渲染等其他场景不支持。
有没有更好的方案能够弥补MIG的这些缺陷呢?
请看下期。