仿真云平台SGPU技术为高效利用GPU算力提供了关键支持。其核心聚焦于显存隔离与算力隔离两大关键原理,有效解决了多业务容器共享GPU卡时的资源分配难题。

一、显存隔离原理
NVIDIA GPU拥有独立且多样的显存类型,其中全局显存zui为关键,像T4显卡便具备16GB的全局显存。在 CUDA计算任务开展前,kernel代码与依赖数据均需拷贝至GPU显存,全局显存的使用涵盖静态分配(如CUDA runtime初始化时自动分配的全局变量显存)与动态分配(借助cudaMalloc等API实现)。为加速全局显存访问,显卡构建了多级缓存内存访问模型。
仿真云平台SGPU的显存隔离主要针对CUDA应用程序的动态全局显存分配。CUDA显存管理API在驱动层收敛为NVIDIActl设备的ioctl操作。SGPU通过创建虚拟GPU卡设备,截获ioctl操作,达成显存的隔离与限制:
容器级隔离限制:创建GPU虚拟卡设备并挂载至容器内,内核模块借此劫持并转发显存分配、释放、查询接口。
显存分配:当内核模块截获显存分配请求,若请求分配的size超出容器限制,即刻返回oom;反之,则记录进程分配显存信息,并将请求转发至NV内核驱动。
显存释放:截获释放请求时,内核模块先查询分配记录进行释放操作,随后转发至NV内核驱动。一旦进程异常退出,自动释放该进程分配的全部显存。
显存查询:截获查询请求后,返回经容器隔离限制后的显存总大小与剩余大小。
二、算力隔离原理
NVIDIA的GPU默认采用time-sliced(轮转调度)的算力调度模式,默认时间片为2ms,调度最小单元是CUDA上下文 context(进程启动时CUDA会创建)。默认的NV调度器面向进程级别,而SGPU在其基础上实现了面向容器级别的算力调度,依据容器算力权重进行时间片轮转调度:
容器级隔离限制:内核模块截获CUDA context创建请求,记录并跟踪容器内所有进程的CUDA context。
内核调度线程:每张显卡配备一个内核调度线程,依据容器算力权重,对卡上所有容器的context进行启停调度。
调度策略:支持自由调度、权重调度、平均抢占调度、权重抢占调度这四种策略,同时可配置时间片,以此降低容器级别 context切换开销。
SGPU技术通过创新的内核态GPU虚拟化方式,有效解决了容器共享GPU卡时的显存及算力隔离问题。其在提高GPU利用率、降低资源成本、增强业务灵活性和兼容性等方面展现出显著优势,为仿真云平台以及其他对GPU算力有高需求的业务场景提供了高效、可靠的解决方案。