问题
目前的深度神经网络(DNN)假定GPU是支配资源,其他的资源(CPU、memory等)都被和GPU数量等比例地分配给任务。但是DNN对辅助资源的需求不同,有些任务对CPU的需求较高,有些则比较低。因此,给不同的DNN任务分配不同份额的辅助资源,而不是GPU等比例分配,能够有效利用集群资源,提高性能。
Synergy分析了DNN对辅助资源的敏感性,并在任务中不按比例地分配它们,而不是使用传统的GPU比例分配。在这样做的同时,一个任务可能得到少于GPU比例的辅助资源,而且只有在这样的分配与按GPU比例分配相比不会降低作业的吞吐量时才会如此。
Synergy提高了整体的集群资源利用率,减少了平均任务完成时间(JCT)。
设计
乐观分析
当任务到达时,Synergy分析一次它的资源敏感度,构造一个资源敏感度矩阵。
对于内存维度的测试,此文使用了MinIO的缓存机制,容易建模任务吞吐量与内存的关系。这是因为MinIO确保了一个任务每回合能够得到固定数量的缓存命中。因此只需要分析最大内存分配额度的训练速度。
对于CPU维度的测试,使用二分法来分析。具体做法是,选取最大的CPU数量和一个CPU作为区间的两个端点,将之二分,得到两个区间。如果一个区间的两个端点性能提升少于某一个固定阈值(比如10%),那么就不分析这一区间。否则就将这个区间接着二分。最后只需分析8个点,即可完成上图的估计。
Synergy-OPT
这种策略是为了追求最优解,即最大化整体吞吐量,并且保证每个任务的训练速度不慢于按GPU比例分配资源的任务。
文章作者定义了两种线性规划。第一种是将所有机器都视为一个机器,最大化吞吐量,实际中并没有什么用处。
第二种是将机器分开,最小化被分开放置在不同机器上的任务数量。但是问题是任务对于GPU的放置可以是分数,因此在实际中需要做四舍五入。注意,此时给任务分配的CPU和Memory数量是第一个线性规划求出的。下图中的 x i , j x_{i,j} xi,j表示任务i在机器j上放置的比例,可以是小数,也可以是1(是1就表示全部放在机器j上)。有个问题是,作者没有给出目标函数。。。
Synergy-Tune
随后作者提出了Synergy-Tune,一种启发式调度机制。
首先,它将调度队列中的任务降序排序(根据GPU、CPU和Memory需求),然后选择能满足其需求的具有最少数量的可用资源的服务器执行。如果此任务是多GPU任务,那么选择能满足GPU需求的最小服务器集合。如果这个集合的其他维度的资源不能满足,就把这个任务的资源需求变为按GPU比例的资源需求放置。如果仍然放不下,就把其他任务削减成按GPU比例分配资源,腾出辅助资源。