论文阅读(NSDI23):Transparent GPU Sharing in Container Clouds for Deep Learning Workloads

基本信息:

Transparent GPU Sharing in Container Clouds for Deep Learning Workloads

代码:TGS

  • **NSDI 23 **

  • 作者:

    • Bingyang Wu and Zili Zhang, Peking University;
    • Zhihao Bai, Johns Hopkins University;
    • Xuanzhe Liu and Xin Jin, Peking University
  • 简介:针对容器云场景 DL workload GPU 利用率低的问题,提出了 TGS(Transparent GPU Sharing),实现了高 GPU 利用率以及性能隔离。

关键技术:

  • adaptive rate control
  • transparent unified memory

效果:

  • 对于现有生产任务吞吐影响低。
  • 对于投机任务吞吐可以和 AntMan 媲美。
  • 吞吐是 MPS 的 15 倍。

背景与动机

1. 在容器云场景中,常见的支持 DL 的做法是容器与 GPU 静态绑定,独占该 GPU。这导致了 GPU 利用率低。

  • 数据:微软某个生产环境 GPU 集群利用率为 52%;阿里某个集群 GPU 中位数利用率不超过 10%。

2. 生产环境中 DNN 训练任务通常分为两类,需要保证任务之间不互相影响:

  • 生产任务(production jobs):需要保证性能
  • 投机性任务(opportunistic jobs):利用闲散资源

3. 先前解决方案局限性

  • AntMan:应用层解决方案,需要与框架结合
  • MPS:OS 层解决方案,需要感知到应用行为,不支持显存超分场景下的 GPU 共享,多个进程之间不能进行故障隔离。
  • MIG:需要 GPU 硬件支持,无法动态分配。

TGS 设计与实现

TGS 架构

adaptive rate control

  • GPU 共享场景不适用基于优先级队列的任务调度方案,因为 GPU kernel 在 GPU 执行的时候,任务队列可能是空的。
  • TGS 核心思想:根据生产任务 kernel 到达速率,控制投机型任务下发 kernel 速率。

  • 通过 additive increase multiplicative decrease (AIMD) 方式控制投机型任务的速率

  • TGS 使用了一个全局计数器来记录特定时间内启动的 CUDA block 数量,以此作为控制速率的信号。

transparent unified memory

  • 利用 UVM api 做超分。
  • 优先为生产任务分配 GPU 内存。当 GPU 内存占满时,TGS 会将投机型任务驱逐到 Host 侧内存上。

实现

3k LoC 的 C++ 和 python,与 Docker 和 K8s 做了集成。

评估

  • Testbed:Intel Xeon Silver 4210R CPU,2块 A100 40G GPU,126G 内存。

  • **Trace: **Philly Trace from Microsoft [Jeon et al. 2019]

  • workload:

    • CV: ResNet, ShuffleNet, MobileNet
    • Graph: GCN
    • NLP: Bert, GPT-2
    • Recommendation: DLRM

  • 实验对比项:每个 workload 运行 100s 测吞吐(iter/second),吞吐方差和 JCT(job completion time)。

访问量: 访客数: