GPU 那些事儿

概念解释

MapReduce

为离线批处理服务的模型,分成 Map 任务分发和 Reduce 结果收集两个阶段,能以相同方式处理不同数据来源的大数据作业。

根据数据来源的不同和作业特点分为

  • 批计算
  • 流计算, 处理连续的大规模数据流,将无界的数据流划分成固定大小的有界批处理子集
  • 内存计算, 中间数据需要大量的迭代处理 ,把Map任务中的中间数据保存到内存中。
  • 图计算,有依赖关系的多个子任务的 MapReduce 迭代计算形式。
  • 交互计算, 对计算延迟敏感,或是包含多种计算模式的复杂作业。

大数据处理框架,提供基于 MapReduce 模式的批处理、流计算、内存计算和图计算等多种计算模式 ,来处理不同输入形式的大数据作业。

虽然没有使用 Flink, 但是需要了解 Flink 能做什么。

  • 事件驱动型应用
  • 数据分析应用
  • 数据管道应用

详细查看 Flink 应用场景

Spark

BSP

并行计算模型中, 大同步并行模型,该模型可表示由多个超级步组成的计算过程。在每个超级步中各处理器执行局部计算,再完成点点数据同行,最后全局同步检查来确定所有处理器是否完成运算。

DOT 模型

在BSP基础上,研究者扩展可用于大数据计算计算模型。

采用矩阵形式化描述大数据处理的计算和通信行为. 将计算过程分为三个层次: 数据层、操作层、转换层。

DOTA 模型

中科院徐志伟团队提出, 在原来的 DOT 模型基础上,增加聚合层(A-Layer)回合处理转移层的中间数据并且完成最终结果。

p-DOT 模型

该模型沿用 BSP 的思路把大数据计算任务视为 p 阶段的 DOT 模型。在多次迭代的计算阶段内,p-DOT 模型由数据层、计算层、通信层构成。

并行计算

来自《并行计算》

MPI

MPI 是一个跨语言的通信协议,支持高效方便的点对点、广播和组播。

MPI 属于 OSI 参考模型的第五层或者更高,他的实现可能通过传输层的 sockets 和 TCP 覆盖大部分的层。

MPI 标准不断演化,MPI-1 模型不包括共享内存概念。

MPI 有很多实现,例如 mpich 或者 openmpi

MPS

The Multi-Process Service (MPS) is an alternative, binary-compatible implementation of the CUDA Application Programming Interface (API).

The MPS runtime architecture is designed to transparently enable co-operative multi-process CUDA applications, typically MPI jobs, to utilize Hyper-Q capabilities on the latest NVIDIA (Kepler-based) GPUs.

Kuberentes下 GPU 资源的使用

在一个 1 GPU 上跑多个 Job?, 按照文章的思路是可以实现的。

社区讨论

TKE 上实现 GPU Share 从测试数据以及 GIGAStack 产品,这种方案在正式环境上run起来的

GPU Sharing Scheduler Extender in Kubernetes 阿里云上实现 GPU Share

KubeShare - Share GPU between Pods in Kubernetes 学校试验, 不确定在生产环境稳定运行。

Supporting MIG in Kubernetes k8s-device-plugin 从0.7.0版本开始,支持 MIG(Multi-Instance GPUs)

GPU 虚拟化方案

想解决 GPU 资源合理分配问题,先将设备虚拟化。

Kubernetes 多卡GPU使用和分析 文章里将 GPU 节点先进行虚拟化,更改上报给 kubelet 的 DeviceID, 以及在 kubelet 调用 Allocate() 请求时将虚拟 DeviceID 转化为 对应的实际 DeviceID.

[ GPU 虚拟化技术(四) - GPU 分片虚拟化 ](http://cloud.it168.com/a2018/0611/3208/000003208253.shtml?1) 提到分片从两个维度来定义:

  • 是对 GPU 在时间片段上的划分,一个物理 GPU 的计算 engine 在几个 vGPU 之间共享,而调度时间片一般都在 1ms - 10ms 左右,
  • 是对 GPU 资源的划分,主要是指对 GPU 显存的划分,由于安全隔离的要求,每个 vGPU 独享分配给它的显存,不会与其他 vGPU 共享。

该文章提到更深入的 GPU 分片技术框架。

GPU 非虚拟化方案

todo

NVIDIA GPU OPERATOR

Prometheus Proactise之设备插件 device-plugin 提到 Kubernetes 下如何支持新的硬件。

Configuring and Managing nodes with these hardware resources require configuration of multiple software components such as drivers, container runtimes or other libraries which are difficult and prone to errors.

The Nvidia GPU Operator uses the operator framework within kubernetes to automate the management of all NVIDIA software components needed to provison GPU. These components include the NVIDIA drivers (to enable CUDA), Kubernetes device plugin for GPUs, the NVIDIA Container Toolkit, automatic node labelling using GFD, DCGM based monitoring and others.

参考

[1] xtaohub.com: 一切靠自己的 MPI 框架

[2] stackoverflow: How do I use Nvidia Multi-process Service (MPS) to run multiple non-MPI CUDA applications?

[3] Enward: NVIDIA MPS总结

[4] NVIDIA: 《CUDA_Multi_Process_Service_Overview》

NVIDIA GPU OPERATOR

深入了解 GPU 硬件架构及运行机制 非常全面的介绍

并行计算 在线课程,必读

论文:面向大数据复杂应用的 GPU 协同计算模型

Flink 应用场景


·End·
最后修改 April 1, 2022 : add fig and cmus tool (93bd8ca)