pollux

Reference & Notation

Item Instruction
Title Pollux: Co-adaptive Cluster Scheduling for Goodput-Optimized Deep Learning
goodput 结合了system throughput 与 statistical efficiency

Abstract

现有schedules的缺陷:

  1. 用户自己指定申请多少资源
  2. 有的schedulers能自己选择资源量,但是并没有结合DL的特性来更好的利用。

Pollux可以:

  1. 为作业申请资源
  2. 结合DL的特性

Pollux的效果:

  1. 对DL作业平均降低了37%~50%
  2. 对于DL作业有公平性

Introduction

深度学习集群中有调度器对资源进行调度。DL jobs之间对资源有竞争关系。

现有scheduler的缺陷:

  1. 固定的:需要用户手动指定申请的资源,容易降低训练性能和资源利用率。用户申请多了少了都不合适
  2. 弹性的:

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

  1. 用户对于job选择一个初始的batch-size $M_0$ 和 learning rate $\eta _0$。
  2. Pollux在单个GPU上启动job,并且令$m=M=M_0$, $s=0$, $\eta=\eta_0$
  3. 在单机运行过程中,Pollux通过profile来学习模型的$THROUGHPUT$和$EFFICIENCY$。
  4. 根据预测模型,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

两个层面优化:

  1. job-level: 对单个job,给定资源,调整对应的batch size和learning rate,达到更高的goodput (PolluxAgent负责)
  2. 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

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。