论文

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

EasyScale 论文阅读笔记
Abstract
- 分布式同步GPU训练通常被用于深度学习。
- 使用固定GPU的资源约束
- 使得大规模的深度学习训练工作受到影响
- 降低了集群的利用率
- 纳入资源弹性
- 往往会引入模型精度的非确定性<—–缺乏隔离能力
- 使用固定GPU的资源约束
- 本文介绍EasyScale,
- 这是一个弹性框架
- 可以在异构GPU上扩展分布式训练
- 同时产生确定性的深度学习模型
- 实现了弹性的精度一致的模型训练。
- EasyScale严格遵循数据并行训练流程
- 仔细追踪与精度相关的因素
- 有效利用深度学习特性进行上下文切换
- 为了使异构GPU的计算能力达到饱和
- EasyScale根据我们的作业内和作业间调度策略动态地分配工人
- 最大限度地减少GPU的空闲时间
- 并相应地提高综合作业的吞吐量。
- 实验
- 部署在CompanyA的一个在线服务集群中
- EasyScale为弹性深度学习训练作业提供动力,使其适时地利用空闲的GPU
- 在不违反SLA的情况下将集群的整体利用率提高了62.1%
- 这是一个弹性框架
Introduction
弹性深度学习框架很少在行业中使用

Gandiva 论文阅读笔记
Abstract
Gandiva: 一个集群调度框架,使用特定领域知识,优化了GPU集群训练深度学习模型的延迟与效率
深度学习job的特征
- 1)反馈驱动的探索:
- 一个用户经常运行一组作业(或 a multi-job)来获得特定任务的最佳结果
- 并使用关于准确性的早期反馈来动态优先考虑或杀死一个作业子集
- 同步发生的多个作业的早期反馈是至关重要的
- 2)深度学习工作在资源使用方面的异构,这使得它很难实现最适合的先验。
- 3)作业内可预测性:因为作业会重复执行叫做mini-batch的迭代
- Gandiva利用这个特征解决了1)2)两个问题
- 利用可预测性对GPU进行多个job间进行时分复用, 这提供了低延迟
- 这种预测性还可以用于内省job性能并动态迁移到最合适的GPU上,提高了集群效率
- 1)反馈驱动的探索:
我们通过一个原型实现和微基准测试表明

《GaiaGPU:Sharing GPUs in Container Clouds》论文笔记
Abstract
- 对于云服务的提供商, 如何在容器间共享GPU, 是一个有吸引力的问题
- 容器的轻量与伸缩性
- GPU强大的并行计算能力
- 在云环境,容器需要使用一个或多个GPU来满足资源需要的同时, 容器独占式的GPU往往使用率很低
- 我们提出GaiaGPU,能够在容器间共享显存和算力
- 将物理GPU划分为多个虚拟GPU
- 采用弹性资源分配和动态资源分配来提高资源利用率
- 实验结果显示, 有效的实现了容器间资源的分配和隔离的同时,平均只增加了1.015%的开销。
Introduction
- 容器化是一种虚拟化技术
- 涉及到量身定制一个标准操作系统,方便它在一个物理机上运行由多个用户处理的不同应用程序
- 与VM模拟底层硬件不同
- 容器模拟的是操作系统
- 轻量,可伸缩,易部署
- 微服务打包与发布应用的事实标准
- 云服务提供商整合容器编排框架(如k8s)到基础架构中来提供容器云
- GPU 图像处理单元
- 有很强的并行处理能力
- 因为一个芯片上集成了数以千计的计算核
- GPU被广泛用于计算密集型任务,以加快计算
- 随着技术的发展趋势,现代GPU内将集成入越来越多的计算资源
- CUDA是多功能GPU最流行的平台,提供了API方便GPU的使用
- 卓越的性能吸引了很多云提供商将GPU引入云环境
- 在云环境中,部署在容器中的一个应用程序可能需要一个或多个GPU才能执行,
- 而另一方面,应用程序的专用GPU资源导致资源不足。
- 因此,如何在不同的容器中共享GPU对大多数云提供商都非常感兴趣
- 有很强的并行处理能力
- GPU虚拟化技术是在隔离的虚拟环境(例如VM, 容器)之间共享GPU的技术
- 多数的GPU虚拟化技术应用于VM, 容器间的虚拟化技术还在起始阶段
- 现阶段的基于容器的GPU虚拟化技术有以下局限性
- 需要特定的硬件设备(NVIDIA GRID)
- 将一整个GPU分配给单个容器, 不能共享 (NVIDIA Docker)
- 容器间只能共享GPU显存 (ConvGPU)
- 只支持单个GPU (ConvGPU)
- 我们提出GaiaGPU,能够在容器间透明地共享显存和算力
- 用户不用修改容器镜像来共享底层GPU
- 我们使用k8s的device plugin 框架将物理GPU划分为多个虚拟GPU
- 每个镜像可以按需分配一个或者多个vGPU
- 提供了两者方式在运行时更改镜像资源
- 弹性资源分配:暂时改变资源
- 动态资源分配:永久改变资源
- 用户不用修改容器镜像来共享底层GPU
- vGPU包括GPU显存和计算资源
- 共享显存
- 容器包含GPU显存的一小部分
- vGPU分配的是GPU的物理内存
- 共享计算资源
- 共享计算资源意味着每个容器都拥有GPU线程的一部分以并行执行计算。
- VGPU的计算资源由GPU的利用率衡量(采样时段内, 容器使用GPU的时间比例)
- 共享显存
- 总结:本文做了如下贡献
- 提出了GaiaGPU:一种在容器间透明共享显存与算力的方法
- 采用弹性分配和动态分配的方式提高了资源的利用率
- 进行了四个实验来验证GaiaGPU的性能。结果:实现了容器间资源的分配和隔离的同时,平均只增加了1.015%的开销。
Related Work
GPU虚拟化
被应用于在多个虚拟环境之间分享GPU, 极大地提高了应用性能
