Orion:Interference-aware, Fine-grained GPU Sharing for ML Applications

杨镇源 于 2024-11-10 发布 浏览量

Orion: Interference-aware, Fine-grained GPU Sharing for ML Applications

原文

现状

常见的解决方案:

观察

GPU计算吞吐量和内存带宽的利用率呈现突发性,而平均利用率较低

GPU计算利用率的峰值通常与内存利用率的峰值不同步

DNN workloads consist of many kernels with different resource requirements.

由于数据依赖性,单个DNN任务的内核通常顺序执行,因此当一个内核使GPU计算或内存带宽达到饱和时,往往会在短时间内使其他GPU资源闲置

方法

将具有相反资源需求的内核进行共置,虽然由于数据依赖性,DNN 工作负载中内核的执行重叠是有限的,但可以将来自不同任务的内核进行共置

计算密集型任务:Conv2d 内存密集型任务:BN2d

为了最大化利用率,需要在DNN任务之间共享GPU:空间共置对于具有相反计算和内存密集型的内核最为有效。由于DNN任务包含计算密集型和内存密集型内核,将来自不同DNN任务的相反资源需求的内核进行共置有助于提高利用率,同时最小化干扰

Orion

提出Orion,一种细粒度、干扰感知的GPU调度器

Orion的目标是在保持高优先级作业的高性能的同时,利用空闲的GPU资源来执行低优先级的作业

Orion拦截每个客户端提交的GPU操作(包括计算kernels:卷积、批量归一化;内存管理:内存分配、内存复制)

Orion将根据文中提出的调度策略,利用在离线工作负载分析阶段收集的内核特征,从每个客户端的软件队列将操作提交给GPU硬件

Orion的调度策略提前知道:

在执行前,Orion会离线分析每个DNN(深度神经网络)工作负载,并生成一个包含模型中每个内核的分析信息的文件。然后,Orion调度器将这些分析信息加载到内存中的查找表中,通过唯一的内核ID进行索引。

Nsight Compute -> 获取GPU Kernels所需的块数、每个块的线程数、每个线程的寄存器数以及所需的共享内存

Nsight Systems -> 区分计算密集型或内存密集型GPU Kernels

Others

这篇文章的调度策略极大依赖于离线处理获得的前置信息,包括高优先级任务的请求延迟(这是在高优先级任务单独运行在专用GPU时进行的分析)