Reference & Notation
Item | Instruction |
---|---|
Title | Pollux: Co-adaptive Cluster Scheduling for Goodput-Optimized Deep Learning |
goodput | 结合了system throughput 与 statistical efficiency |
Abstract
现有schedules的缺陷:
- 用户自己指定申请多少资源
- 有的schedulers能自己选择资源量,但是并没有结合DL的特性来更好的利用。
Pollux可以:
- 为作业申请资源
- 结合DL的特性
Pollux的效果:
- 对DL作业平均降低了37%~50%
- 对于DL作业有公平性
Introduction
深度学习集群中有调度器对资源进行调度。DL jobs之间对资源有竞争关系。
现有scheduler的缺陷:
- 固定的:需要用户手动指定申请的资源,容易降低训练性能和资源利用率。用户申请多了少了都不合适
- 弹性的:
Togo: learning rate如何影响训练所需的资源量?
The Goodput of DL Training and Pollux
$ goodput $: 有效的训练量
$ GOODPUT() = THROUGHPUT() \times EFFICIENCY_t(M(*)) $
$ * = (a, m, s) $
- $ a \in Z^N $: $a_n$表示节点n上分配的GPU数量
- $ m \in Z $: 每个GPU上的batch-size
- $ s \in Z $: 每个s步聚合一次
$ M(a,m,s) = SUM(a) \times m \times (s+1)$
Pollux’s approach
- 用户对于job选择一个初始的batch-size $M_0$ 和 learning rate $\eta _0$。
- Pollux在单个GPU上启动job,并且令$m=M=M_0$, $s=0$, $\eta=\eta_0$
- 在单机运行过程中,Pollux通过profile来学习模型的$THROUGHPUT$和$EFFICIENCY$。
- 根据预测模型,Pollux根据资源量和训练表现,阶段性对$(a,m,s)$进行微调。
这里$EFFICIENCY_t$仅与batch-size和learning rate相关。
Plug-in Learning Rate Scaling
写了个插件可以实现调整learning rate
Modeling Statistical Efficiency
建模、实验表明很准
Upper batch size limit
batch size太大导致learning rate出问题。所以需要设置一个最大的batch size。
新的LR可以通过插件支持。
Estimating $\phi _t$
单机的时候需要切换到另一个方法做估计。
Modeling System Throughput
又给你估计的好准哦
Pollux Design and Architecture
两个层面优化:
- job-level: 对单个job,给定资源,调整对应的batch size和learning rate,达到更高的goodput (PolluxAgent负责)
- cluster-wide: 会对job动态(重新)分配资源,依据的标准有:fairness, job-completion time。 (PolluxSched负责)
PolluxAgent: Job-level Optimization
PolluxSched: Cluster-wide Optimization
Implementation
PolluxAgent实现在PyTorch中;
PolluxSched以service的方式实现在Kubernetes中。
Evaluation
Experimental Setup
Testbed
16 nodes, 64 GPUs.
For 1 node:
- 4 NVIDIA T4 GPUs
- 48 vCPUs
- 192GB memory
- 900GB SSD
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。