Salus: Fine-Grained GPU Sharing

2020-11-16  本文已影响0人  CPinging

Salus: Fine-Grained GPU Sharing Primitives for Deep Learning Applications阅读

1 整体思路

2 亮点

①动机部分

②发现

发现1:把GPU内存与CPU内存互相转移是非常低效的(好像人尽皆知的压子)

1 总结了DL模型里面分配的内存包括了三个部分:Model的参数(整个生命周期内都存在,并且是固定的)、短暂数据(计算生成的中间数据,并且在iteration之间释放,并且经常是非常大的数据)、框架内部数据(也是固定不变的,用于数据预处理)


image.png

这个图还是很有内容的。揭示了一些大小关系。

发现2:有机会将多个任务的持久内存放到GPU中,并放一个model的中间数据。

总结:可以将持久内存数据放到内存中,从而快速恢复+挂起。

③调度粒度

这里提到了一个有趣的现象就是说DL里面的内存是渐进式的分配的,所以会存在运行过程中突然boom的情况。


image.png

上图就表示了俩任务同时跑,然后8+8 = 16>12所以都不能跑。

所以他们设计的时候准备避免渐进式的方案。、

④GPU内存共享方案设计

build了个GPU Lane进行内存共享,原理是通过高效的任务切换。

设计思路:动态静态内存分离到不同的区域。

image.png

用堆栈的思想分配,如上图。下面是固定内存,上面是动态的Lane。

挑战:简单的分配还是会造成两个任务的死锁问题;虽然内存够用,但是会存在碎片问题:比如当多个dl任务的多个iteration同时发出,就有很多碎片产生,对系统影响很大。

方案:we choose to limit the dynamic allocation in the ephemeral region and isolate memory allocations across lanes to ensure maximum compatibility while achieving adequate flexibility.

文章还提到了Auto Defragmentation方案,就是说原来黑色的波浪线没了之后,蓝色的还是在下面,这样就利用不到位。现在通过自动划分,蓝色的就上去了。而该方案就是利用了DL的iteration的特性,在iteration之间会重新生成碎片。when the small job stops, its lane space is quickly reclaimed at the iteration boundary by the job that was allocated below it

⑤ Salus的调度策略

上一篇 下一篇

猜你喜欢

热点阅读