GPU

【论文笔记】TGS论文阅读笔记
20 minutes

Transparent GPU Sharing in Container Clouds for Deep Learning Workloads

摘要

  • 容器广泛用于数据中心中的资源管理。

    • 支持容器云中的深度学习(DL)训练的一个常见实践是静态地将 GPU 完全绑定到容器上。
    • 由于生产中 DL 作业的资源需求多种多样,大量的 GPU 未得到充分利用。
    • 因此,GPU 集群具有较低的 GPU 利用率,由于排队,导致作业完成时间较长。
  • 我们提出 TGS (透明 GPU 共享) ,一个系统,提供透明的 GPU 共享到集装箱云中的 DL 训练。

【Kubernetes】如何让kubernetes集群使用GPU
4 minutes

在Kubernetes集群中使用GPU资源

在前文中, 我们搭建了k8s集群, 但是k8s原生不支持GPU资源, 需要使用各大GPU厂商开发的插件才能使用。

这一部分大家可以参考NVIDIA/k8s-device-plugin: NVIDIA device plugin for Kubernetes (github.com)

本文就记录我在k8s集群中配置插件的过程。

【论文笔记】Harmony论文阅读笔记
7 minutes

基于深度学习的机器学习集群的任务放置

这是一篇发表在INFOCOM'2019上的论文, 特点是使用了强化学习进行任务放置。

Abstract

  • 背景

    • 虽然作业之间的服务器共享提高了资源利用率,但位于ML 作业之间的干扰可能会导致性能显着下降。
    • 现有的集群调度程序(例如,Mesos)在其作业布置中是忽视干扰的,导致资源效率不佳。
    • 干扰感知工作安置已在文献中进行了研究,但使用详细的工作负载分析和干扰建模进行了处理,这不是通用的解决方案。
  • Harmony

【论文笔记】Tiresias论文阅读笔记
9 minutes

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的session执行分析
6 minutes

Tensorflow kernal launch 的过程

分析session执行的过程, 并分析Antman对执行过程的修改

函数调用链 Run()–>RunInternel()–>RunAsync()–>ScheduleReady()–>Process()

修改了direct_session.cc , 在session执行前后运行中间件框架

【代码分析】Antman对Tensorflow的修改
8 minutes

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错误。