【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

GPU 通信技术初探(一)

  • 2019-05-21
  • 本文字数:4633 字

    阅读完需:约 15 分钟

GPU通信技术初探(一)

自 2007 年 NVIDIA 率先推出 GPU 加速器后,由于 GPU 的超强的计算能力,现已广泛应用于物理、生物科学、化学、天气预报等需要高性能计算的领域。实际运用中,为缩减计算时间,应用程序往往同时使用多卡进行并行计算,这里的多卡包括单个服务器多张 GPU 卡(下简称单机多卡),和多个服务器,且每个服务器分别有多张卡的场景(下称多机多卡)。同时,由于用于计算的数据量较大,GPU 多卡之间的通信尤为重要,本文主要探索 GPU 单机多卡和多机多卡两种场景下的通信技术,并对部分技术进行实测。

1、单机间 GPU 通信

1.1 GPU Direct

使用 GPU Direct 技术,多个 GPU、网络和存储设备可以直接读写主机和设备内存,减少不必要的内存拷贝和 CPU 开销,降低网络延迟,进而获得性能的提升。


GPUDirect 技术发展有三个阶段:


  • 2010 年,GPU 支持与网卡,存储等设备共享内存页,即 GPUDirect Shared Memory;

  • 2011 年,NVIDIA 推出 GPUDirect P2P(Peer-to-Peer),支持同一 PCIe 总线上的 GPU 之间的内存访问;

  • 2012 年底,GPUDirect RDMA 完美的解决了计算集群节点间 GPU 卡 PCIe 总线的通信问题。该技术将在多机的 GPU 通信中详细说明。


1.1.1 GPUDirect Shared Memory


GPUDirect SharedMemory 支持 GPU 与第三方 PCIe 设备通过共享的 host memory 实现共享内存。下图对未使用 GPUDirect 和使用 GPUDirect 后的 GPU 之间通信的数据拷贝进行了对比。



图 1:without GPUDirect vs with GPUDirect(来源


可以看出支持 GPUDirect SharedMemory 后,GPU 之间的通信仅需要两次拷贝:


  • 先从 GPU 缓存拷贝到系统内存

  • 对端 GPU 缓存从系统内存拷贝数据


相较于未使用 GPUDirect 减少了一次数据拷贝,降低了数据交换的延迟。


1.1.2 GPUDirect P2P



图 2:GPUDirect P2P 通信(来源


GPUDirect P2P 支持相同 PCIe root complex 下的 GPU 之间的直接互访显存,如上图所示,GPU 之间的通信不需要将数据拷贝到 CPU host memory 作为中转,进一步的降低了数据交换的延迟。

1.2 NVLink

GPUDirect P2P 技术中,多个 GPU 通过 PCIe 直接与 CPU 相连,而 PCIe 3.0*16 的双向带宽不足 32GB/s,当训练数据不断增长时,PCIe 的带宽满足不了需求,会逐渐成为系统瓶颈。为提升多 GPU 之间的通信性能,充分发挥 GPU 的计算性能,NVIDIA 于 2016 年发布了全新架构的 NVLink。


NVLink 1.0 与 P100 GPU 一同发布,一块 P100 上,可集成 4 条 NVLink 连接线,每条 NVLink 具备双路共 40GB/s 的带宽,整个芯片的带宽达到了 160GB/s(4(NVLink 连接线)40GB/s),相当于 PCIe 3.016 的 5 倍。


NVLink 2.0 版本与 Tesla V100 GPU 一同发布,NVLink 2.0 每个方向的信号发送速率从 20GB/s 增加到 25GB/s,每条 NVLink 双信道最大达到 50GB/s。单个 V100 GPU 支持 6 条 NVLink 连接线,总带宽最大可达 300GB/s(6(NVLink 连接线)*2(双向)*25GB/s),是 PCIe 3.0 带宽的将近 10 倍。


1.2.1 拓扑



图 3:NVLink 拓扑(来源


上图是使用 NVLink 连接 8 个 Tesla V100 的混合立体网络拓扑。图中也以看出每个 V100 GPU 有 6 个 NVLink 通道(绿色连接线),8 块 GPU 间无法做到全连接,2 个 GPU 间最多只能有 2 个 NVLink 通道 100GB/s 的双向带宽。有趣的是 GPU 0 和 3,GPU 0 和 4 之间有 2 条 NVLink 相连,GPU0 和 GPU1 之间有一条 NVLink 连接线,GPU 0 和 6 之间没有 NVLink 连接线,也就是说 GPU0 与 GPU6 之间的通信仍然需要通过 PCIe。


1.2.2 实测


测试方法及环境:参考 cuda sample 的 readme,在 ubuntu16.04 镜像中安装好 cuda toolkit 10.0,编译好二进制,然后保存镜像。在华为云 CCI(Cloud Container Instance)服务中,使用刚制作好的镜像,选择规格:GPU 计算加速型 P2(支持 NVLink 的 Tesla V100 32G * 8 卡) 


创建一个无状态负载。测试结果及说明如下:



图 4:GPU 间连通性矩阵


该图为 GPU 之间的连通性,图中可以看出任何两个 GPU 设备之间是否可以直接通信,考虑到该服务器支持 NVLink,即可以看出任两个 GPU 设备之间是否有 NVLink 连接,但是无法看出 GPU 设备间 NVLink 的连接线个数。



图 5:Disable P2P vs Disable P2P 单向的带宽


该图测试的是 enable GPUDirect P2P 和 Disable GPUDirect P2P 的单向带宽数据 。图中数据可看出,Enable GPUDirect P2P 时,两个 GPU 间通信带宽最大可达到 48.34GB/s,接近两条 NVLink 的理论带宽 50GB/s;部分 GPU 间通信带宽在 24GB/s 左右,接近一条 NVLink 连接线的理论带宽 25GB/s;11GB/s 左右的带宽为 PCIe 带宽。


从这组数据也能够看出 GPU 之间的 NVLink 连接线个数如下表所示,与前面的 NVLink 拓扑图一致:




图 6:Disable P2P vs Disable P2P 双向的带宽


该图测试的是 enable GPUDirect P2P 和 Disable GPUDirect P2P 的双向带宽数据 。图中数据可看出,Enable GPUDirect P2P 时,两个 GPU 间通信带宽最大可达到 96.50GB/s,接近两条 NVLink 的双向通信的理论带宽 100GB/s;部分 GPU 间通信带宽在 48GB/s 左右,接近一条 NVLink 连接线双向通信的理论带宽 50GB/s;14-18GB/s 的带宽为 PCIe 带宽



图 7:Disable P2P CPU vs GPU 时延矩阵



图 8:Enable P2P CPU vs GPU 时延矩阵


上面两张图为 enable GPUDirect P2P 和 Disable GPUDirect P2P 的时的 GPU 和 CPU 时延数据,可以看出 enable GPUDirect P2P 后,时延下降明显,只要用 NVLink 连接,GPU 时延从 17us 下降到不足 2us,CPU 时延也从 8us 多下降到不足 3us。


从上面的测试结果也能看出单机多卡中,有 NVLink 连接的 GPU 之间的通信性能提升明显。但是如果进行单机训练时只需要用到 2 卡或者 4 卡时,如果随机分配 GPU 卡,岂不是会出现 GPU 之间没有 NVLink 连接线?不用担心,华为云 CCI 服务在调度层保证了基本不会出现该问题,调度时会保证 GPU 之间有 NVLink 连接线,从而能充分享受到 NVLink 技术带来的性能提升。

1.3 NVSwitch

前面也看到,NVLink2.0 技术使得单服务器中 8 个 GPU 无法达到全连接,为解决该问题,NVIDIA 在 2018 年发布了 NVSwitch,实现了 NVLink 的全连接。NVIDIA NVSwitch 是首款节点交换架构,可支持单个服务器节点中 16 个全互联的 GPU,并可使全部 8 个 GPU 对分别达到 300GB/s 的速度同时进行通信。


下图为 16 个 GPU 通过 NVSwitch 全连接拓扑图。



图 9:NVSwitch 全连接拓扑(来源

2、多机间的 GPU 通信

2.1 RDMA & Infiniband

2.1.1 RDMA


由于计算数量巨大,多机多卡的计算/训练已经是一个常态,多机间的通信是影响分布式训练行的一个重要指标。在传统的 TCP/IP 网络通信中,如下图所示,数据发送方需要将数据进行多次内存拷贝,并经过一系列的网络协议的数据包处理工作;数据接收方在应用程序中处理数据前,也需要经过多次内存拷贝和一系列的网络协议的数据包处理工作。经过这一系列的内存拷贝、数据包处理以及网络传输延时等,server 间的通信时延往往在毫秒级别,不能够满足多机多卡场景对于网络通信的需求。



图 10:TCP/IP 网络通信


RDMA(Remote Direct Memory Access)就是为了解决网络传输中数据处理延迟而产生的一种远端内存直接访问技术,RDMA 技术原理及其与 TCP/IP 架构的对比如下图:



图 11:传统模式 vs RDMA 模式网路通信


可以看出 RDMA 模式的数据传输没有经过一系列的网络协议的数据包处理,通过网络设备,服务器 1 可以直接读写服务器 2 的内存。使用 RDMA 技术的优点主要有:


  1. Kernel Bypass: 旁路内核,CPU 卸载。实测中 40Gbps 流量 CPU 占有率只有 5%

  2. zero copy: 内存零拷贝,直接从网卡复制到应用内存,服务器内部处理时延低至 1~2 微秒

  3. 因此 RDMA 可以实现服务器间的超低时延、超高吞吐量传输。


2.1.2 RDMA 的三种硬件实现


目前 RDMA 有三种不同的硬件实现:


  1. Infiniband(IB):专为 RDMA 设计的网络,从硬件层面保证可靠传输,同时由于这是一种新的网络技术,需要支持该技术的 NIC 和交换机。

  2. RoCE(RDMA over Converged Ethernet):RoCE 是一种允许通过以太网进行 RDMA 的网络协议。RoCE 有 2 个版本:RoCE v1 和 RoCE v2。RoCE v1 是一种链路层协议,允许在同一个广播域下的任意两台主机直接访问;RoCE v2 基于 UDP 层协议,实现了路由功能,RoCE v2 针对 RoCE v1 进行了一些改进,如引入 IP 解决扩展性问题,可以跨二层组网等。

  3. iWARP(internet Wide Area RDMA Protocol:允许在 TCP 上执行 RDMA 的网络协议。在大型组网的情况下,iWARP 的大量 TCP 连接会占用大量的额外内存资源,对系统规格要求较高。



图 12:三种 RDMA 技术的软件栈 (来源)

2.2 GPU Direct RDMA

2.2.1 简介


GPUDirect RDMA 技术支持 Server1 的 GPU 内存可以通过同一 root complex 下的网卡直接访问对端 Server2 的 GPU 内存,如下图所示。GPU 通信通道中无需 CPU 参与,大幅度降低了 CPU 间通信的延迟。



图 13:GPUDirect RDMA (来源)


将 GPUDirect 1.0 与 GPUDirect RDMA 的通信进行对比,也能看出使用 GPUDirect RDMA 进一步减少了 GPU 通信的数据复制次数,进一步降低了通信延迟。



图 14:GPUDirect 1.0 vs GPUDirect RDMA


2.2.2 性能


中科曙光基于 GPUDirect RDMA 的性能测试的结果显示,GPUDirect RDMA 在小包通信的传输带宽和网络延迟方面可以带来至少 3 倍的性能提升(数据来源)。


在 40Gbps 以太网上测试 GPUDirect RDMA 的性能测试结果如下。



图 15:enable GDR vs disable GDR 吞吐量 (来源)


上图比较了不同的 I/O size,使用 GPUDirect RDMA 和不使用的吞吐量数据。结果显示 I/O size 越大,GPUDirect RDMA 的优势越明显,在 I/O size 在 8192 时,GPUDirect RDMA 有 4 倍的性能提升。



图 16:enable GDR vs disable GDR 时延 (来源)


上图为不同的 I/O size 下,使用 GPUDirect RDMA 和不使用时的时延数据。数据显示在使用 GPUDirect RDMA 后,时延显著降低,从接近 20 微妙下降到 10 微妙左右。

2.3 IPOIB

IPoIB(Internet Protocol over InfiniBand),指利用物理 IB 网络(包括服务器上的 IB 卡、IB 连接线、IB 交换机等)通过 IP 协议进行连接,并进行数据传输。它提供了基于 RDMA 之上的 IP 网络模拟层,允许应用无修改的运行在 Infiniband 网络上。但是,IPoIB 仍然经过内核层(IP Stack),即会产生大量系统调用,并且涉及 CPU 中断,因此 IPoIB 性能比 RDMA 通信方式性能要低,大多数应用都会采用 RDMA 方式获取高带宽低延时的收益,少数的关键应用会采用 IPoIB 方式通信。

3、总结

本文主要介绍了 GPU 间通信技术,包括单机多卡间的 GPUDirect 和 NVLink 技术,多机多卡间的 IPOIB 和 GPUDirect RDMA 技术。在大规模计算中,单机场景下使用 NVLink 技术,分布式场景下使用 GPUDirect RDMA 技术,可以极大的缩短通信时间,提升整体性能。


当前华为云 CCI (Cloud Container Instance)服务已提供搭载 NVLink 的 Tesla V100 服务器,同时支持 IB 卡用于分布式场景下通信加速,后续我们选择一些训练场景进行实测。

4、参考

NVIDIA GPUDirect


GPUDirect RDMA,让加速更深入


NVIDIA GPUDirect™ Technology – Accelerating GPU-based Systems


浅析GPU通信技术(上)-GPUDirect P2P


浅析GPU通信技术(中)-NVLink


浅析GPU通信技术(下)-GPUDirect RDMA


NVLINK 结构


NVIDIA NVSWITCH:The World’s Highest-Bandwidth On-Node Switch


NVSWITCH AND DGX-2:NVLINK-SWITCHING CHIP AND SCALE-UP COMPUTE SERVER


Accelerating High Performance Computing with GPUDirect RDMA


S8474 - GPUDirect: Life in the Fast


Mellanox OFED GPUDirect RDMA


How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-05-21 09:4128906

评论 1 条评论

发布
用户头像
能看看nvidia-smi topo -mp的具体拓补情况吗
2020-06-02 17:32
回复
没有更多了
发现更多内容

你愿意被管理么?

escray

学习 极客时间 朱赟的技术管理课 6月日更

【布道API】浅谈API设计风格

devpoint

Rest API 6月日更

缓存穿透、缓存雪崩、缓存击穿问题与优化方案

Skysper

Python——字符串转换与处理

在即

6月日更

大道看“虚实”,DOM的虚实并进

法医

Vue 大前端 6月日更

操作系统内核是什么?Linux内核又是什么?读完这篇文章,我终于知道了

奔着腾讯去

c++ 操作系统 内存管理 Linux内核 进程管理

异构内存及其在机器学习系统的应用与优化

白玉兰开源

人工智能 机器学习 解决方案 第四范式 傲腾

Mybatis 二级缓存简单示例

Java mybatis

Packer 自动化镜像 Windows 安装过程

HoneyMoose

Java--JVM运行流程

是老郭啊

Java JVM JVM原理

做通才还是专才,你会怎么选?

架构精进之路

认知提升 6月日更

5分钟速读之Rust权威指南(十九)

wzx

rust 生命周期

这些书都学完,绝对是编程界的大佬

看山

Java 程序员 6月日更

SpringBootApplication注解

梦倚栏杆

读深入ES6记[二]

蛋先生DX

ES6 6月日更

MySQL基础之六:连接查询

打工人!

myslq 6月日更

递归全排列问题(两种方法 Java实现)

若尘

数据结构 递归 6月日更

Kubernetes手记(5)- 配置清单使用

雪雷

k8s 6月日更

高性能 JavaScriptの七 -- 编程实践小技巧

空城机

JavaScript 大前端 6月日更

【21-1】21 连更第一篇

耳东@Erdong

6月日更

【Vue2.x 源码学习】第八篇 - 数组的深层劫持

Brave

源码 vue2 6月日更

【Flutter 专题】109 图解自定义 ACERadio 单选框

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

Locust完成gRPC协议的性能测试

陈磊@Criss

数字化转型背景下的测试转型

BY林子

敏捷测试 测试转型

浅谈Java中的TCP超时

Hoswey_洪树伟

Java、

spring-beans 注册 Beans(四)BeanDefinition

梦倚栏杆

当人工智能遇上视频直播——基于Agora Web SDK实现目标识别

dajyaretakuya

深度学习 音视频 WebRTC 声网 TensorFlow.js

云原生推动全云开发与实践

阿里巴巴云原生

云原生

Python——输入输出:加减乘除四则运算的程序

在即

6月日更

阿里云边缘容器服务、申通 IoT 云边端架构入选 2021 云边协同发展阶段性领先成果

阿里巴巴云原生

云原生

公司:离职就是一场危机管理

石云升

创业 职场经验 6月日更

GPU通信技术初探(一)_硬件_华为云原生团队_InfoQ精选文章