速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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


2019-05-21 09:4130997

评论 1 条评论

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

视觉大模型训练和推理加速

百度Geek说

人工智能 深度学习 transform 企业号 1 月 PK 榜

百度百舸 · AI 异构计算平台,加速自动驾驶模型迭代

百度Geek说

人工智能 自动驾驶 企业号 1 月 PK 榜

如何减少网站卡顿的代码级别详细文章

Yestodorrow

软件测试/测试开发 | 接口测试中,请求超时该怎么办?

测试人

软件测试 自动化测试 接口测试 测试开发

“天翼云杯”决赛收官!看看你pick的队伍战绩如何?

天翼云开发者社区

复习前端:JavaScript 字符串操作方法

devpoint

JavaScript 前端开发 字符串处理

扪心自问,我们在用户旅程的投入有多匮乏?

Yestodorrow

加速数字化转型,天翼云携手央国企积蓄发展新动能

天翼云开发者社区

BSN祝全体技术工作者新春快乐!

BSN研习社

小令动态丨令牌云2022年度盘点

令牌云数字身份

盘点2022

如何打造一支有战斗力的团队?

石云升

极客时间 1月月更 技术领导力实战笔记

架构5作业

梁山伯

北京有哪些java培训中心

小谷哥

大公司为什么禁止SpringBoot项目使用Tomcat?

程序员大彬

Java springboot

将混沌实验内建到持续交付过程中提升系统稳定性

QE_LAB

混沌工程 混沌测试 测试技术

web前端培训课程怎么选择

小谷哥

培训学习前端开发技术好吗?

小谷哥

高效学 C++|函数参数的引用传递和函数重载

TiAmo

c++ 编程语言、

重新思考边缘负载均衡

俞凡

架构 netflix 大厂实践

零代码应用搭建规范建议

明道云

数据可视化图表系列解析——雷达图

Data 探险实验室

数据分析 可视化 数据可视化 图表 可视化数据

再获认可!天翼云荣获“行业应用实践优秀合作伙伴”授牌

天翼云开发者社区

丢掉丑陋的 toast,会动的 toast 更有趣!

岛上码农

flutter ios 安卓 移动端开发 跨平台开发

软件测试/测试开发丨免安装免配置环境的免费 ios 调试工具 sib 来啦

测试人

软件测试 自动化测试 测试开发 ios测试

到底卡在了哪里,2023年再撒谎网慢就说不过去了

Yestodorrow

架构 可观测性 网站性能

参加前端培训班哪个好

小谷哥

大数据培训课程哪家比较好

小谷哥

IM通讯协议专题学习(八):金蝶随手记团队的Protobuf应用实践(原理篇)

JackJiang

网络编程 即时通讯 protobuf im开发

厉害了!天翼云位列中国医疗云基础设施服务市场榜首

天翼云开发者社区

明道云零代码应用治理分层分级指南与量表

明道云

多活数据中心链路智能调度场景

智维数据

数据中心 DNS 智能运维 应用交付平台 可视化数据

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