GPU

Transparent GPU Sharing in Container Clouds for Deep Learning Workloads
摘要
容器广泛用于数据中心中的资源管理。
- 支持容器云中的深度学习(DL)训练的一个常见实践是静态地将 GPU 完全绑定到容器上。
- 由于生产中 DL 作业的资源需求多种多样,大量的 GPU 未得到充分利用。
- 因此,GPU 集群具有较低的 GPU 利用率,由于排队,导致作业完成时间较长。
我们提出 TGS (透明 GPU 共享) ,一个系统,提供透明的 GPU 共享到集装箱云中的 DL 训练。
在Kubernetes集群中使用GPU资源
在前文中, 我们搭建了k8s集群, 但是k8s原生不支持GPU资源, 需要使用各大GPU厂商开发的插件才能使用。
这一部分大家可以参考NVIDIA/k8s-device-plugin: NVIDIA device plugin for Kubernetes (github.com)
本文就记录我在k8s集群中配置插件的过程。

基于深度学习的机器学习集群的任务放置
这是一篇发表在INFOCOM'2019上的论文, 特点是使用了强化学习进行任务放置。
Abstract
背景
- 虽然作业之间的服务器共享提高了资源利用率,但位于ML 作业之间的干扰可能会导致性能显着下降。
- 现有的集群调度程序(例如,Mesos)在其作业布置中是忽视干扰的,导致资源效率不佳。
- 干扰感知工作安置已在文献中进行了研究,但使用详细的工作负载分析和干扰建模进行了处理,这不是通用的解决方案。
Harmony

Tiresias 论文阅读笔记
Abstract
- 深度学习 (DL) 训练作业给现有的集群管理器带来了一些独特的挑战,例如
- 不可预测的训练时间
- 全有或全无的执行模型
- GPU 共享的不灵活性
- 我们对生产中的大型 GPU 集群的分析表明,现有的大数据调度程序会导致
- 较长的排队延迟
- 较低的整体性能
- 我们介绍了 Tiresias
- 这是一个为分布式 DL 训练作业量身定制的 GPU 集群管理器,它可以有效地安排和放置 DL 作业以减少它们的作业完成时间 (JCT)。
- 鉴于 DL 作业的执行时间通常是不可预测的,我们提出了两种调度算法——
- 离散化二维Gittins索引:基于部分信息
- 离散化二维 LAS: 与信息无关,旨在最小化平均 JCT
- 此外,我们描述了何时可以放宽合并放置约束,并提出了一种放置算法来利用这些观察结果而无需任何用户输入。
- 在具有 60 个 P100 GPU 的密歇根 ConFlux 集群上进行的实验和大规模跟踪驱动模拟表明,
- 与生产中使用的基于 Apache YARN 的资源管理器相比,Tiresias 将平均 JCT 提高了 5.5 倍。
- 更重要的是,Tiresias 的性能与假设完美知识的解决方案的性能相当。
Introduction
由于 DDL 训练的独特限制,我们观察到当前集群管理器设计中的两个主要限制。
Tensorflow kernal launch 的过程
分析session执行的过程, 并分析Antman对执行过程的修改
函数调用链 Run()–>RunInternel()–>RunAsync()–>ScheduleReady()–>Process()
修改了direct_session.cc , 在session执行前后运行中间件框架
Antman对Tensorflow的代码修改
总体的关系图,主要包括两个实现, 内存方面的GPUResourceManagement以及算力方面的GpuOpManager。
graph TD
A>gpu_resource_manage_file]
B[SessionRunRegistry]
C[SessionRunAction]
D[Executor]
E[GPUResouceManagement]
F[GPU Statistic]
G[GpuOpManager]
H[GpuUsageAdjustment]
I(dump gpu statistic)
J[GPU Process State]
K[GPUVMemAllocator]
L[GPUAdjustableAllocator]
A -->|FileListener| E
B -->|Register| E
E -->|need_to_adjust_memory_| H
H -->|new| L
H -->|get| K
C -->|Derive| E
C -->|Derive| F
B -->|Register| F
F -->|need_to_dump_statistics_| I
B -->|Run| C
J -->|maybe_create_gpu_vmem_allocator|K
D -->|run thread| G
E -->|GetEstimatedIdleTime| G
GPUVMemAllocator
GPUVMemAllocator 可以分配host的mem作为显存的备用,以免出现OOM错误。