一文读懂GPU通信互联技术:到底什么是GPUDirect、NVLink、RDMA?

2024-02-26 15:44

本文主要是介绍一文读懂GPU通信互联技术:到底什么是GPUDirect、NVLink、RDMA?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家过年好哈,我是老猫,猫头鹰的猫。

在之前的文章中,我们详细介绍过PCIeRDMANVlinkCXL等互联技术。

但很多小伙伴在后台留言,想让我更系统的介绍GPU的通信互联技术,毕竟单篇技术的介绍,并不能让大家对GPU互联技术有一个系统全面的了解。

Image

所以,今天我们就通过这篇文章来详细的介绍下GPU通信互联技术。

为什么需要GPU互联技术?

我们都知道,在GPU未出现前,CPU一直是计算机中的绝对核心,甚至连存储、内存、网络等子系统的能力都是CPU说了算。

比如,一个CPU能够支持多大的内存,CPU都是有严格要求的。甚至同样一颗CPU,只是支持不同的内存,都能卖两个价格。

这也导致了Intel的"独断专行",其它人想对CPU做点"手脚"那是被限制的死死的,可以说Intel真正做到了"此路是我开,此树是我栽,要想此路过,留下买路财",这直接导致了英特尔在产品创新方面一直"挤牙膏"。

但人算不如天算,没想到大数据分析、AI、视觉渲染、基因分析以及EDR仿真等需求的突然爆发,给了NVIDIA的GPU带了巨大增长空间。

Image

GPU的快速增长超出了所有人的预料,它几乎彻底颠覆了CPU在计算机系统中的地位,而传统的根据CPU为核心设计的互联通信方式在GPU高速增长的情况下开始慢慢成为了阻碍,原有的通信技术已经成为效率阻碍。

比如,传统方式如果想把数据从存储系统转运到GPU显存中,由于历史原因此过程受CPU管理。随着计算负载从较慢的CPU转移到较快的GPU后,I/O逐渐成为系统的性能瓶颈。

面对这种情况,那么GPU就要在原有的计算机里"开路"了。

为了更好的让大家理解GPU互联技术,本文按照GPU的使用模式分为两种方式来讲解,分为单机多卡GPU互联技术多机多卡GPU通信技术

好不,不多说了,我们马上开始。

一、单机多卡GPU通信技术

谈到GPU"开路"的通信技术,我们就不得不聊到GPUDirect这项技术。

1、GPUDirect

GPUDirect是NVIDIA开发的一项技术,可实现GPU与其他设备(例如网络接口卡 (NIC) 和存储设备)之间的直接通信和数据传输,而不涉及CPU。

使用GPUDirect,网络适配器和存储驱动器可以直接读写GPU内存,减少不必要的内存消耗,减少CPU开销并降低延迟,从而显著提高性能。

Image

发展到今天,GPUDirect技术发展经历了四个阶段:

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

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

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

如今,GPUDirect 技术已经逐渐完善,形成了包括GPUDirect Storage、GPUDirect RDMA、GPUDirect P2P 和 GPUDirect Video四组重要技术的组合。

1)GPUDirect Storage

对AI和HPC应用而言,随着数据规模的不断扩大,数据加载时间对系统性能影响越发显著。随着GPU计算速度的快速提升,系统I/O(数据从存储读取到GPU显存)已经成为系统瓶颈。

Image

GPUDirect Storage提供本地存储(NVMe)/远程存储(NVMe over Fabric)与GPU显存的直接通路,它可以减少不必要的系统内存拷贝(通过bounce buffer)。它可应用网卡NIC和存储系统附近的DMA引擎,直接向GPU显存写入/读取数据。

Image

2)GPUDirect RDMA

RDMA (Remote direct memory access)技术可使外围PCIe设备直接访问GPU显存。GPUDirect RDMA被设计用来支持GPU间快速跨机通信。它能减轻CPU负载,同时也能减少不必要的通过系统内存进行的数据拷贝。

Image

GPUDirect RDMA在CUDA Toolkit中提供支持。您可联系网络供应商下载相关驱动,来使用RDMA功能。它对Tesla and Quadro GPU都是可用的。

3)GPUDirect for Video

GPUDirect for Video提供一个服务于frame-based的通过优化的流水线功能。设备包括:frame grabbers、video switchers、HD-SDI capture、CameraLink device,它可以把视频帧高效地向GPU显内中写入/读出。

Image

过去处理视频的第三方硬件与GPU交互时,会引入不必要的延迟,如图6左边所示。有了GPUDirect for Video技术,I/O设备和GPU可达到很好的同步(两个设备driver间拷贝数据),同时能减少CPU的负载。GPUDirect for Video由第三方公司的SDK提供,开发者对视频流进/出GPU(通过OpenGL, DirectX or CUDA在子帧的传输过程 )有充分的控制能力[7]。

4)GPUDirect P2P

GPUDirect P2P支持GPU之间通过memory fabric(PCIe或NVLink)直接进行数据拷贝。CUDA driver原生支持P2P技术,开发者可使用最新的CUDA Toolkit和driver来实现GPU间直接通信[6](一般用于机内通信)。

2、NVLink

介绍完GPU Direct技术后,我们来看一下另一项机内互联技术NVlink。

当训练数据不断增长时,PCIe 的带宽满足不了需求,会逐渐成为系统瓶颈。为提升多 GPU 之间的通信性能,充分发挥 GPU 的计算性能,NVIDIA 于 2016 年发布了全新架构的 NVLink。这项技术不仅仅是SLI技术的升级,而且是对GPU如何互连的根本性重新思考。

Image

NVLink 是一种高速、高带宽的互连技术,用于连接多个 GPU 之间或连接 GPU 与其他设备(如CPU、内存等)之间的通信。NVLink 提供了直接的点对点连接,具有比传统的 PCIe 总线更高的传输速度和更低的延迟。

NVLink代表了多GPU互连技术的逻辑演变,不仅在速度方面,而且在架构设计方面。NVLink的结构由可以双向传输数据的高速数据通道组成。与传统的基于总线的系统不同,NVLink采用点对点连接,有效减少瓶颈并提高数据吞吐量。最新的迭代提供高达900GB/s的带宽,比SLI的功能有了显着增强。

NVLink与众不同的关键功能之一是它支持网状拓扑的能力。与旧技术的菊花链或中心辐射型拓扑相比,网格设置允许GPU之间实现更通用且数量更多的连接。这在数据中心和高性能计算应用程序中特别有用,在这些应用程序中,复杂的数据路由是常态。

统一内存是NVLink的另一个特点。这允许GPU共享公共内存池,从而实现更高效的数据共享并减少在GPU之间复制数据的需要。这对于机器学习和大数据分析等应用程序来说是一个巨大的推动,在这些应用程序中,大型数据集通常超过单个GPU的内存容量。

NVLink还改善了延迟,这是任何高性能计算设置中的一个关键因素。较低的延迟可确保GPU之间更快的数据传输和同步,从而实现更高效的并行计算。这是通过NVLink的直接内存访问 (DMA) 功能实现的,允许GPU直接读写彼此的内存,而不需要CPU的参与。NVSwitch

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

3、NVSwitch

单服务器中8个GPU卡可以依靠NVLink实现全连接。超过8个之后,就要依靠NVSwitch来实现了。

Image

NVIDIA NVSwitch将多个NVLink加以整合,在单个节点(如 NVIDIA HGX A100)内以NVLink的较高速度实现多对多的GPU通信,从而进一步提高互联性能。NVLink和NVSwitch 的结合使NVIDIA得以高效地将AI性能扩展到多个GPU,每个GPU都有12个连接NVSwitch 的NVLink链路,可实现高速的多对多通信

Image

二、多机之间GPU卡通信技术

随着大数据分析、科技计算、AI 计算等应用对算力需求巨大,单机形态已经不能满足用户需求,

多机多卡的计算是一个常态,多机间的通信是影响分布式训练的一个重要指标。在这里我们谈谈多机之间GPU卡的通信技术,主要有RDMA、GPUDirect RDMA和IP over InfiniBand等技术。

1、RDMA

在我们之前的《RDMA--让数据中心"狂飙"?》文中详解介绍过RDMA这个技术,有兴趣的可以转移到对应文章阅读。

在在传统的 TCP/IP 网络通信中,数据发送方需要将数据进行多次内存拷贝,并经过一系列的网络协议的数据包处理工作;数据接收方在应用程序中处理数据前,也需要经过多次内存拷贝和一系列的网络协议的数据包处理工作。经过这一系列的内存拷贝、数据包处理以及网络传输延时等,服务器间的通信时延往往在毫秒级别,不能够满足多机多卡场景对于网络通信的需求。

Image

RDMA(Remote Direct Memory Access)是一种绕过远程主机而访问其内存中数据的技术,解决网络传输中数据处理延迟而产生的一种远端内存直接访问技术。

目前 RDMA 有三种不同的技术实现方式:

InfiniBand(IB):IB是一种高性能互连技术,它提供了原生的RDMA支持。IB网络使用专用的IB适配器和交换机,通过RDMA操作实现节点之间的高速直接内存访问和数据传输。

RoCE(RDMA over Converged Ethernet):RoCE是在以太网上实现 RDMA 的技术。它使用标准的以太网作为底层传输介质,并通过使用RoCE 适配器和适当的协议栈来实现RDMA功能。

iWARP:iWARP是基于TCP/IP协议栈的RDMA实现。它使用普通的以太网适配器和标准的网络交换机,并通过在TCP/IP协议栈中实现RDMA功能来提供高性能的远程内存访问和数据传输。

Image

使用RDMA的优势如下:

零拷贝(Zero-copy) - 应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下。数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。

内核旁路(Kernel bypass) - 应用程序可以直接在用户态执行数据传输,不需要在内核态与用户态之间做上下文切换。

不需要CPU干预(No CPU involvement) - 应用程序可以访问远程主机内存而不消耗远程主机中的任何CPU。远程主机内存能够被读取而不需要远程主机上的进程(或CPU)参与。远程主机的CPU的缓存(cache)不会被访问的内存内容所填充。

简单来说,RDMA更像一个去掉中间商的技术,让数据能够快速获取。不再在操作系统、CPU等环节浪费时间。

2、GPUDirect RDMA

GPUDirect RDMA 结合了GPU加速计算和 RDMA(Remote Direct Memory Access)技术,实现了在GPU和RDMA网络设备之间直接进行数据传输和通信的能力。它允许GPU直接访问RDMA网络设备中的数据,无需通过主机内存或CPU的中介。

Image

GPUDirect RDMA通过绕过主机内存和CPU,直接在GPU和RDMA网络设备之间进行数据传输,显著降低传输延迟,加快数据交换速度,并可以减轻 CPU负载,释放CPU的计算能力。另外,GPUDirect RDMA 技术允许GPU 直接访问RDMA网络设备中的数据,避免了数据在主机内存中的复制,提高了数据传输的带宽利用率

3、IPOIB(IP over InfiniBand)

IPOIB是一种在 InfiniBand 网络上运行IP协议的技术。它将标准的IP协议栈与 IB 互连技术相结合,使得在IB网络上的节点能够使用IP协议进行通信和数据传输。

IPOIB 提供了基于RDMA之上的IP网络模拟层,允许应用无修改的运行在 IB 网络上。但是,IPoIB仍然经过内核层(IP Stack),会产生大量系统调用,并且涉及CPU中断,因此IPoIB性能比RDMA通信方式性能要低,大多数应用都会采用RDMA方式获取高带宽低延时的收益,少数的关键应用会采用IPoIB 方式通信。

Image

在大规模计算中,单机多卡场景下使用GPUDiect、NVLink技术,分布式场景下使用 GPUDirect RDMA技术,可以大大缩短通信时间,提升整体性能。

Nvidia 数据中心明星产品

1、Magnum IO

Nvidia Magnum IO是数据中心IO的并行化、智能化架构,它是IO的加速平台。该架构最大限度地提升存储、网络、多节点和多GPU通讯性能,为大型语言模型、推荐系统、成像、仿真和科学研究等全球重要的应用优化实现加速。

Image

它可以最大化很多重要应用的存储、网络、多节点和多GPU通信性能。利用存储IO、网络IO、在网计算和IO管理简化和加速数据移动、访问、多GPU和多节点管理。Magnum IO支持Nvidia CUDA-X库,同时能利用一系列Nvidia GPU和Nvidia网络硬件拓扑实现高吞吐和低延迟。

2、DGX

DGX是一个完整的超级计算机,它是一套完整的人工智能解决方案,包括硬件设备、软件工具和优化,具有很高的集成度和易用性,适用于企业和研究机构。DGX的系列产品有:DGX-1、DGX-2、DGX A100、DGX H100、DGX GH200、DGX SuperPod、DGX BasePod。

3、HGX

HGX是一个计算模组,整合了NVIDIA GPU 、 NVLink 、 NVIDIA 网络以及全面优化的 AI 和高性能计算 (HPC) 软件堆栈的全部功能,可提供最高的应用性能并加快获得见解的速度。

虽然在系统完备性上不如DGX,但它可进行灵活的配置调整,适用于云服务提供商和大型数据中心。HGX的系列产品有:HGX A100、HGX H100、HGX H200。

总结:

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

END

这篇关于一文读懂GPU通信互联技术:到底什么是GPUDirect、NVLink、RDMA?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/749363

相关文章

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作