随着人工智能特别是大模型的飞速发展,对计算能力的需求呈指数级增长,推动了计算架构从单GPU节点向大规模异构集群的演进。在此背景下,系统性能瓶颈已从GPU内部计算转向多处理器间的数据交互效率,即“通信墙”问题。传统的互连技术难以满足现代AI工作负载对高带宽、低延迟的极致要求。为应对这些挑战,全向智感互联OISA(Omni-directional Intelligent Sensing Express Architecture)应运而生。OISA是一种旨在突破通信瓶颈的开放式GPU互连架构,其核心特点是原生支持共享内存语义,通过将通信操作抽象为GPU标准的内存读写和原子操作,并结合统一总线寻址(UMA)以及硬件与软件栈协同的地址转换与一致性维护机制,致力于简化并行编程,提高带宽效率并降低通信延迟。本文将深入剖析高效GPU间通信的必要性,阐述GPU的内存层次架构与通信语义基础,详细介绍OISA协议原生支持内存语义的核心要素,其支持先进的GPU内存管理抽象技术(如固定内存、统一虚拟寻址、按需页面迁移和设备自主内存管理)。最后,总结OISA的价值主张及其对未来高性能计算和AI硬件生态系统的潜在影响。
多GPU系统的通信语义
AI通信模型基础
多GPU间的交互可以抽象为两种基础模式:基于消息传递(Message Passing)和基于共享内存访问(Shared Memory Access)。这两种模式共同构成了通信语义的连接方式,并且是理解并行计算体系通信原理的核心,它们是表达并发算法的高级范式。
消息传递模型(Message Passing Model)
在这种模式下,不同的处理单元拥有各自独立的内存空间,单元之间通过明确发送和接收消息来进行数据交换和同步。在GPU卡间互联系统中,这对应于一个GPU显式地将数据打包并通过互连通道发送给另一个GPU,接收方再显式地接收这些数据。标准的MPI (Message Passing Interface) 库就可以用于实现这种模式的多GPU通信。
关于消息传递模型,其特点与适用场景在于需要明确规划和分离通信逻辑与计算逻辑,该模型在分布式远程内存系统中有大量应用。MPI是此模型的典型代表,在GPU集群上使用MPI通信时,如果管理不当,CPU同步开销可能导致GPU资源利用率不足。此模型的优势在于概念上隐藏了远端内存管理的复杂性,使得进程通信更直接;并且由于内存不直接共享,通常无需复杂的同步机制来防止数据竞争。然而,其劣势包括对于大数据量的传输,由于存在数据拷贝,通信速度可能受限,每次通信通常需要系统层面(如操作系统内核)的介入,并建立QP连接,以此带来较高的开销,与直接内存访问相比,资源消耗也可能更高。
图2:典型OISA消息传递的模型
共享内存访问模型(Shared Memory Access Model)
在这种模式下,多个处理单元可以访问同一个共享的内存区域。在多GPU系统中,这体现在一块全局内存区域(通常是其中一个GPU的显存,或者通过特定技术形成的统一寻址空间)可以被多个GPU直接读取和写入,无需显式的发送/接收操作。它们使得一个GPU能够直接访问另一个GPU的显存,或者GPU能够直接访问Host内存,概念上接近于共享内存模型。
关于共享内存访问模型,其核心原理是通过物理或虚拟地址空间的直接映射或重映射,构建出一个全局或部分全局的数据视图。多个处理单元能够使用标准的加载(Load)和存储(Store)指令直接访问远程单元的内存空间。在此模型下,数据移动过程被隐式地处理,底层依赖类似MMU内存管理单元的机制来管理地址映射。共享内存访问模型的显著优势在于极大地简化了并行编程,开发者在许多情况下能够像在单机多核共享内存环境中那样编写代码,无需直接处理底层数据传输的复杂性。通过直接访问而非显式拷贝,该模型能够高效支持对数据的细粒度访问和共享。一些库和框架正是基于这些原则,旨在实现处理单元直接发起的通信和远程内存访问,以提升可编程性并减少中央处理器的干预。然而,这种模型的实现也面临挑战。在多GPU处理单元系统中实现逻辑上的共享内存需要复杂的卡间互连硬件和配套软件来确保数据一致性并高效处理远程访问。此外,由于内存区域是共享的,必须精心设计同步机制,以防止数据竞争和潜在的不一致状态。
图3:典型OISA共享内存访问模型
“语义”的角色与同步机制
在多GPU卡间互联的语境下,先前讨论的消息传递和共享内存访问等模式具体体现为不同的“语义”(Semantics),这些语义定义了控制和解释通信操作的规则与含义。理解这些语义对于设计、优化和分析GPU卡间互联至关重要,这包括如何选择合适的通信方式、优化数据传输路径以及保证跨GPU之间的数据一致性。
鉴于GPU内存层次中不同层级(如寄存器、共享内存、设备全局内存)在延迟、作用域和可见性规则等物理特性上存在差异,它们需要适应OISA各自约束的通信和同步策略。特别是在分布式集群架构中,跨越不同设备甚至操作系统域的内存访问尤为复杂。在乱序执行或缓存的系统中,为了确保某个内存区域(例如,可能被多个处理单元通过共享地址空间访问的全局内存区域)的数据更新对其他处理器或GPU可见并保持正确的顺序,通常需要引入显式的内存栅栏(Memory Fence/Barrier)。内存栅栏是一种特殊的指令,它强制处理器在执行栅栏之后的任何内存操作之前,必须完成所有在栅栏之前的内存操作,以此确保内存状态的有序。
表1:内存语义和消息语义流量对比
OISA协议支持原生内存语义的核心要素
OISA内存语义的核心理念:GPU的共享地址空间
OISA内存语义的核心设计哲学,是将GPU间的通信定义在一个共享的地址空间之上。这意味着,一个GPU可以直接通过加载(Load)、存储(Store)等基本内存操作指令,访问由另一个GPU物理或逻辑上管理的内存区域。这种模式天然适合那些需要紧密耦合、进行细粒度数据交互的并行计算场景,典型应用包括大模型中频繁的参数同步和梯度交换。
在OISA的视角下,内存语义下对远程内存资源的直接操作,被逻辑上视为对本地内存能力的延伸。其交互方式不再依赖于特定的通信库 API(比如消息传递接口 MPI 的 send/recv 调用),而是直接利用处理器自身固有的内存访问指令集。整个设计的核心在于追求操作上的统一性以及以处理器为中心的简化,其潜在的理念是:在理想情况下,远程内存访问固有的复杂性应由底层系统完全隐藏,呈现给开发者一个更为简便、直观的编程模型。
原生内存操作对低延迟的内在要求
原生内存语义的有效性,很大程度上依赖于极低的通信延迟,通常在数百纳秒之内的范围。特别对于那些需要细粒度交互的并行应用而言,任何显著的延迟都可能迅速抵消编程模型简化带来的便利,甚至导致整体性能下降。
为了实现低延迟和高频率的状态更新,OISA架构充分利用了底层硬件和各技术层面的优化。为此,OISA在物理层和协议层都设计了特定的机制来降低延迟。例如,在物理层,OISA采用了更轻量化的前向纠错(FEC)机制,FEC 通过在发送端加入冗余数据,使接收端能够检测并纠正传输错误,从而避免因错误重传而引入的高延迟,选择“轻量化”方案,是权衡了纠错能力与编码/解码延迟的结果,旨在找到最佳的平衡点,OISA的 FEC 设计通过优化算法和参数来减少处理开销。此外,OISA还致力于提升交换芯片或网卡芯片每秒处理数据包(PPS)的能力,通过在交换芯片传统架构的推翻重构,改进缓存应用方法,优化数据包处理流水线,提高单位时间内可以转发或处理的数据包数量,能够有效减少数据包在网络设备中的排队和处理延迟。
OISA中的同步机制:多级内存栅栏(Memory Fences)
在共享内存模型中,保证内存操作的顺序性和可见性至关重要,为此,OISA架构提供了对内存栅栏(Memory Fences)操作的支持。内存栅栏是一种同步原语,它强制处理器在执行栅栏指令之后的操作之前,必须完成并确保所有在栅栏指令之前的内存操作结果对其他处理器可见。
OISA协议支持的GPU内存栅栏设计具备多级作用域,包括用于较小范围同步的局部(local)栅栏、用于更大范围同步的全局(global)栅栏,以及面向更大规模同步需求的集群级(cluster)栅栏。这种分级机制允许应用程序根据实际交互的范围和粒度来选择合适的同步强度,从而避免不必要的性能开销。局部栅栏可能用于同步同一GPU内不同线程块之间,或少数几个紧密协作的GPU之间的操作;全局栅栏可能用于更大范围的、例如一个计算节点内所有GPU的同步;而集群级栅栏则面向更大规模的同步需求。
OISA的集群级交互能够借助交换芯片中的硬件单元,将传统的有限规模交互提升至支持百卡甚至千卡Scale Up级别的全局同步。更重要的是,这种集群级栅栏支持仅刷新必要的内存区域,而非全量同步,从而显著节省了宝贵的互连带宽。这种机制对于大规模参数服务器架构中,尤其是参数更新与局部梯度计算等并行且有依赖关系的任务有显著效果。
OISA内存语义实现的三大支柱
OISA内存语义的技术实现主要依赖于三个核心要素来构建跨GPU的共享地址空间和直接访问能力。
通信操作被抽象为GPU标准内存指令,这意味着OISA将GPU间的远程数据读取、写入乃至原子更新等操作映射为GPU处理器自身支持的标准加载(Load)、存储(Store)和原子操作指令(Atomics)等。这使得应用程序开发者可以使用熟悉的内存操作模式来处理跨设备的数据共享和同步,而无需显式地构建、发送和接收消息;特别是对远端地址执行细粒度原子操作的能力,对于实现高效的分布式GPU卡间互联数据结构和同步算法至关重要。
OISA采用统一总线寻址机制(Unified Bus Addressing, UBA)来实现跨设备地址的透明解析,将物理上分散在不同GPU卡上的显存映射为一个逻辑上连续或统一管理的地址空间,使得应用程序在访问远程GPU内存时,可以使用全局统一的地址,无需关心目标数据具体位于哪个GPU上或感知底层的物理互连拓扑,这种地址空间的透明化极大地简化了并行编程的复杂性。
OISA的设计强调硬件与软件栈的协同工作来完成地址转换、数据传输以及一致性维护。在数据传输层面,硬件负责高效地路由和传递数据包;在地址转换层面,硬件(如 IOMMU)和软件(如驱动程序、运行时库)共同完成从虚拟地址到远程物理地址的转换。
除此之外,OISA在探索GPU内部硬件一致性协议可自动同步多端缓存状态,这意味着如果一个GPU修改了其缓存中某个共享数据块的状态后,硬件机制会自动将这一变更传播到其他拥有该数据块副本的GPU缓存中或使其失效,从而保证所有GPU看到的共享数据是一致的,这消除了传统基于软件的显存复制或手动缓存管理所需的开销和复杂性。
OISA协议与关键技术特性
目前OISA协议已经发布两个版本,核心成员正基于协议要求进行相关产品研发。关于OISA的具体版本和关键技术,OISA Gen1规范支持通过8个交换芯片互联多达128张GPU,任意两张卡间的互连带宽可达800GB/s,并且每个OISA交换芯片支持128个端口,交换容量高达51.2Tb/s。在此基础上,OISA Gen1.1的目标是将现有国产GPU的互联规模和带宽能力进一步提升当前量产产品的约15倍,理论峰值带宽可达TB/s级别,这就与系统全局设备内存带宽更为接近,理论上接近outstanding的带宽诉求。
支撑OISA内存语义实现的关键技术主要包括四个方面:一是采用统一报文格式,标准化精简的数据包结构以简化网络设备处理、提升效率和互操作性,在此基础上预留一部分bit位作为开放GPU互联不同GPU需求的私有扩展;二是多语义融合(Multi-Semantic)的协议设计,能够融合支持消息语义或内存语义访问模式,以适应不同的应用需求;三是多层次流控和重传机制(Multi-Level Flow Control and Retransmission),在不同层面保障大规模、高负载网络中数据传输的可靠性和稳定性,防止拥塞并实现无损传输;四是集合通信加速(Collective Communication Acceleration),内建对 All-Reduce、Broadcast、All-to-All 等分布式 AI 训练中常见的集合通信操作的硬件或底层软件加速支持,这些操作对性能至关重要。