GPU — vCUDA / vGPU
目录
vCUDA
NVIDIA 的 vCUDA(virtual CUDA)技术是典型的 API Forwarding vGPU 实现。
vCUDA 采用在用户层拦截和重定向 CUDA API 的方法,在 VM 中建立 pGPU 的逻辑映像,即:vGPU,以此来实现 GPU 资源的细粒度划分、重组和再利用,支持多机并发、挂起恢复等 VM 的高级特性。
vCUDA 的运行原理包括了 3 大模块:
- CUDA client:安装 GuestOS 的驱动程序。
- CUDA server:安装在 HostOS 的驱动程序。
- CUDA mgmt:安装在 HostOS 的 GPU 管理器。
CUDA client
CUDA client 就是安装在 GuestOS 上的显卡驱动程序,主要的功能是在用户层提供针对 CUDA API 的库,以及一个维护 CUDA 相关软硬件状态的 vGPU。CUDA client 直接面向 CUDA 应用程序,其作用包括:
- 拦截应用程序中对 CUDA API 调用。
- 选择通信策略,为虚拟化提供更高层语义的支持。
- 对调用的 API 和参数进行封装、编码。
- 对 CUDA server 返回的数据进行解码,并返回给应用程序。
此外,CUDA client 在第一个 API 调用到来之前,首先到 GPU mgmt 索取 GPU 资源。后续,每一个独立的 API 调用过程都必须到 CUDA mgmt 申请资源,以实现对 GPU 资源和任务的实时调度。
此外,CUDA client 同时设置了 vGPU 用来维护与 CUDA 相关的软硬件状态。vGPU 的本质仅仅是一个 Key/Value 的数据结构,在其中存储了当前使用的地址空间、显存对象、内存对象等,同时记录了 API 的调用次序。当计算结果返回时,CUDA client 会根据结果更新 vGPU。
CUDA server
CUDA server 安装在 HostOS 或 XenServer domain0(特权虚拟机)中。由于 HostOS 能够直接控制硬件设备,因此 CUDA server 可以直接操纵 pGPU 来完成通用计算任务。
CUDA server 面向 pGPU,其作用包括:
- 接收 CUDA client 的数据报文,并解析出 API 调用和参数。
- 对 API 调用和参数进行审核。
- 利用 CUDA 驱动程序和 pGPU 计算审核通过的调用。
- 将结果编码,并返回给 CUDA client。
- 对 HostOS 中支持 CUDA 的 pGPU 进行管理。
此外,CUDA server 运行的第一个任务是将自身支持 CUDA 的 pGPU 的信息注册到 CUDA mgmt 中。CUDA server 应对 CUDA client 的请求时,为每个 VM 的应用程序都分配了独立的服务线程。CUDA server 统一管理本地 GPU 资源,按照一定的策略提供 GPU 资源,并将由于 API 调用修改的相关软硬件状态更新至 vGPU。
CUDA mgmt
CUDA mgmt 同样安装在 HostOS 或 Xen domain0 中。在实现 CUDA API 虚拟化的基础上,将 GPU 强大的计算能力和计算资源在更高的逻辑层次上进行隔离、划分、调度。
CUDA mgmt 对 GPU 资源进行统一管理,采用集中、灵活的机制,实现了:
-
动态调度:当用户所占资源空闲时间超过一定阈值或者任务结束时,CUDA mgmt 会回收该资源,当该用户再次发布计算任务时,重新为其任务分配 GPU 资源。CUDA mgmt 的调度原则是尽量使在本机的 pGPU 资源,在一般情况下,该 Server 上的 VM 的 GPU 需求都重定向到该 Server 的 CUDA server。
-
负载平衡:CUDA mgmt 在更高的逻辑层次上进行负载均衡调度,当局部计算压力过大时,调整计算负载,通过动态调度时选择合适的 GPU 资源来分散计算负载。在 CUDA server 引入计算线程和工作线程的区分概念,能够一定程度上使同在一台 Server 上的多个 GPU 间负载均衡。
-
故障恢复:当出现故障时,将任务转移到新的可用 GPU 资源上。
文章来源: is-cloud.blog.csdn.net,作者:范桂飓,版权归原作者所有,如需转载,请联系作者。
原文链接:is-cloud.blog.csdn.net/article/details/124070753
- 点赞
- 收藏
- 关注作者
评论(0)