GPU虚拟化方法
远程调用API
半虚拟化和全虚拟化
硬件划分
局限:授权付费
-
- Hardware Partition:Ampere 架构的 A100 GPU 所支持的 MIG,即是一种 Hardware Partition。它的问题是不灵活: 只有高端 GPU 支持;只支持 CUDA 计算;A100 只支持 7 个 MIG 实例。
-
- nVidia MPS:它通过将多个进程的 CUDA Context,合并到一个 CUDA Context 中,省去了 Context Switch 的开销,也在 Context 内部实现了算力隔离。导致了额外的故障传播,在工业界和多租户场景不常使用。
-
- Time Sharing:不管是哪一代的 GPU,其 Engine 都是支持多任务调度的。一个 OS 中同时运行多个 CUDA 任务,这些任务就是在以 Time Sharing 的方式共享 GPU。鉴于 MIG 的高成本和不灵活、MPS 故障隔离方面的致命缺陷,事实上就只剩下一种可能:Time Sharing。唯一的问题是,如何在原厂不支持的情况下,利用 Time Sharing 支持好算力隔离、以保证 QoS。
挑战和方向
轻量级虚拟化
容器提供了进程级的轻量级虚拟化,不需要额外的包装库,虚拟化能接近原始性能,需要高效的调度配合使用。
可扩展性
虚拟化目的是提高资源利用率和减少使用者的开销,一个物理机器中整合大量VM可以达成目的,但是CPU和GPU大的整合能力不同,需要从GPU设备内存、GPU上下文切换频率和缓存占用等方面研究VGPU数量对性能的影响。
安全性
hypervisor提供安全隔离,防止一个VM映射到其他VM的地址空间;还有拒绝服务攻击,有文章检查可疑VM并kill来解决,这会导致部分正常VM服务暂停;为了避免GPU重置,需要细粒度的访问控制机制,有方法使用远程API调用,vCUDA,VOCL等,但没有实现隔离,存在安全问题。
参考
[1] https://www.zhihu.com/zvideo/1359813304349667328
[2] https://dl.acm.org/doi/pdf/10.1145/3068281