1. 从一张显卡插槽说起为什么GPU互联突然成了选型难题如果你最近在配GPU服务器或者负责过AI集群的硬件规划大概率会遇到一个绕不开的问题多卡之间到底用什么互联。以前这事儿简单PCIe插槽插满就完事卡和卡之间走PCIe总线通信虽然带宽一般但胜在通用、便宜、生态成熟。可现在情况变了——大模型训练动辄要几百GB显存单卡根本装不下模型并行、张量并行、流水线并行全都要靠卡间高速通信撑着。通信带宽不够GPU算力再强也只能干等着数据利用率直接腰斩。于是就有了两条主流路线摆在面前NVLink和CXL。前者是英伟达自家的高速GPU互联协议后者是基于PCIe物理层发展出来的缓存一致性互联标准。很多人在选型时第一反应是NVLink带宽高肯定选它但实际落地时发现事情没那么简单——NVLink绑死英伟达生态CXL虽然带宽低一些但通用性强、能连内存和存储两者定位其实不完全重叠。更麻烦的是现在又冒出来一个UALink号称要打破NVLink的封闭生态做开放标准的GPU互联。我过去两年参与过几个不同规模的GPU集群搭建从8卡A100的小集群到上百卡的训练平台都碰过。踩过的坑包括以为NVLink能跨节点结果发现不行、CXL内存扩展后延迟高得离谱、混合部署时拓扑设计失误导致通信瓶颈。这篇文章就把这些经验整理出来从协议原理讲到产品对比再到实际选型决策尽量把什么场景该选什么这件事说清楚。不管你是刚接触GPU集群的新手还是正在做硬件规划的老手应该都能找到有用的部分。2. NVLink的底层逻辑它到底解决了PCIe的什么问题2.1 PCIe总线的先天局限要理解NVLink为什么存在得先看PCIe的问题在哪。PCIe本质上是一个I/O总线设计初衷是让CPU和外设通信不是让GPU和GPU之间高速对话。在PCIe 4.0 x16下单向带宽大约是32GB/s双向64GB/s。听起来不小但问题在于通信要经过CPU和系统内存中转GPU A要把数据发给GPU B数据得先经过PCIe交换机、可能还要过CPU的内存控制器路径长、延迟高。带宽共享所有PCIe设备共享总线带宽你插了8张卡、2块NVMe、1张网卡大家抢带宽。协议开销大PCIe的TLP包处理、ACK机制在GPU间小消息通信时开销占比很高。实测数据很能说明问题在PCIe 4.0下做AllReduce通信8卡A100的带宽利用率经常只有理论值的60%到70%而且延迟在微秒级别对于需要频繁同步的张量并行来说这个延迟会直接拖慢训练速度。2.2 NVLink的设计取舍NVLink的思路很直接给GPU之间修一条专用高速公路。它不经过CPU、不经过系统内存GPU之间直接点对点连接。以NVLink 3.0A100那一代为例单链路双向带宽50GB/s一张A100有12条链路总带宽600GB/s。到了NVLink 4.0H100单链路提升到100GB/s总共18条链路总带宽900GB/s。这个数字是什么概念PCIe 5.0 x16的单向带宽才64GB/sNVLink 4.0的总带宽是它的十几倍。但NVLink有几个关键限制需要特别注意第一拓扑是有限的。NVLink不是无限可扩展的它依赖NVSwitch芯片做交换。一个NVSwitch可以连接多张GPU多个NVSwitch可以级联但级联层数越多跳数越多延迟越高。典型的DGX H100是8卡全互联通过4颗NVSwitch实现任意两卡之间都是单跳。但如果你要扩展到16卡、32卡就需要更复杂的拓扑成本和延迟都会上升。第二跨节点需要额外的网络。NVLink本身是节点内的互联技术跨节点通信得靠InfiniBand或RoCE网络。英伟达后来推出了NVLink Switch系统比如GH200那种可以把多个节点通过NVLink连起来但那套方案成本极高不是一般团队能承受的。第三生态封闭。NVLink是英伟达的私有协议只有英伟达的GPU支持。你买了AMD的MI300X或者Intel的GPU想用NVLink没门。这就导致选型时如果考虑多供应商策略NVLink就成了锁定因素。2.3 实际部署中的NVLink拓扑陷阱这里分享一个我踩过的坑。有一次搭一个16卡A100集群用的是两台8卡服务器加InfiniBand互联。当时想当然地认为节点内NVLink全互联节点间IB 200Gbps应该够用。结果跑GPT类模型训练时发现流水线并行的效率特别低GPU利用率只有40%左右。排查后发现问题是流水线并行需要频繁的跨节点通信而IB的延迟比NVLink高一个数量级。节点内NVLink延迟大概1到2微秒IB跨节点延迟在5到10微秒加上协议栈开销实际通信时间远超预期。后来调整了并行策略把张量并行放在节点内走NVLink流水线并行的stage尽量放在同一节点跨节点只做数据并行通信频率低利用率才提上去。这个经验说明NVLink的拓扑设计必须和并行策略匹配。不是有NVLink就万事大吉得看你的模型怎么切、通信模式是什么。3. CXL的野心不只是GPU互联而是重构内存层级3.1 CXL到底是什么CXL的全称是Compute Express Link建立在PCIe物理层之上但协议层做了大量扩展。它最核心的能力是缓存一致性——CPU、GPU、加速器、内存设备可以共享同一块内存空间彼此看到的数据是一致的不需要软件显式做数据搬运。CXL目前有三个子协议子协议全称主要用途典型延迟CXL.ioCXL I/O设备发现、配置兼容PCIe与PCIe相当CXL.cacheCXL Cache设备缓存CPU内存保持一致性约200-300nsCXL.memCXL MemoryCPU访问设备内存扩展内存容量约300-500ns和NVLink对比CXL的定位完全不同。NVLink是GPU到GPU的高速通道CXL是CPU到设备、设备到内存的一致性通道。CXL的带宽基于PCIeCXL 3.0用PCIe 6.0物理层x16单向带宽约128GB/s比NVLink低不少但它的优势在于通用性和内存语义。3.2 CXL在GPU场景下的真实价值很多人问CXL带宽不如NVLink那在GPU互联里有什么用答案是CXL解决的不是GPU间通信问题而是GPU内存扩展和异构计算问题。举个实际场景你有一张24GB显存的GPU要跑一个需要40GB显存的模型。传统做法是量化、梯度检查点、或者多卡切分。但有了CXL内存扩展你可以挂一块CXL内存设备比如128GBGPU通过CXL.mem访问这块内存虽然延迟比HBM高但比走PCIe到系统内存再回来要快而且缓存一致性能简化编程模型。另一个场景是GPU和CPU的协同计算。在推荐系统、图计算这类负载里CPU和GPU需要频繁交换数据。传统方式是用cudaMemcpy显式拷贝编程复杂且效率低。CXL.cache让GPU可以直接缓存CPU内存CPU也能访问GPU显存数据搬运由硬件一致性协议处理软件层面简单很多。但要注意CXL内存扩展的延迟是硬伤。HBM延迟大概100ns级别CXL内存访问延迟在300到500ns差了3到5倍。对于带宽敏感、延迟敏感的训练任务CXL内存只能放冷数据不能当主显存用。3.3 CXL部署的坑BIOS、固件和操作系统支持我去年试过在一台支持CXL的服务器上挂CXL内存扩展卡过程相当折腾。几个关键点BIOS里要开启CXL支持而且不同厂商的选项名称不一样。有的叫CXL Memory Expansion有的叫PCIe CXL Mode还有的藏在Advanced Memory Settings里面。开错了模式设备根本识别不到。操作系统内核版本要够新。CXL的NUMA节点管理在Linux 5.16之后才比较完善老内核虽然能识别设备但NUMA亲和性设置有问题性能会差很多。建议用6.x以上的内核。CXL内存默认是NUMA节点需要手动做内存策略配置。用numactl或者mbind把热数据绑到本地DDR冷数据放到CXL节点。如果不管操作系统可能把关键数据分配到CXL内存上延迟直接爆炸。提示CXL内存扩展目前更适合内存容量敏感但延迟不敏感的场景比如内存数据库的冷数据层、大模型的参数卸载。别指望它替代HBM做训练主存。4. UALink入场开放标准能不能撼动NVLink的地位4.1 UALink的由来和定位UALinkUltra Accelerator Link是2024年由AMD、Intel、Broadcom、Google、Meta、Microsoft等公司联合推动的开放GPU互联标准。目标很明确做一个能对标NVLink的开放协议打破英伟达的封闭生态。从公开的技术规格看UALink 1.0的目标是支持每通道200Gbps一个GPU最多可以有多条通道总带宽对标NVLink 4.0甚至更高。它支持GPU到GPU的直接内存访问也支持通过UALink Switch做大规模扩展。最关键的是它是开放的任何厂商都可以实现。但现实是UALink目前还处于早期阶段。2024年才发布1.0规范实际产品落地预计要到2025年底或2026年。而且生态建设需要时间——英伟达的NVLink已经迭代了四代CUDA生态里的通信库NCCL对NVLink的优化非常成熟UALink要追上不是一朝一夕的事。4.2 三者的定位对比把NVLink、CXL、UALink放在一起看它们的定位其实有清晰的分工维度NVLinkCXLUALink主要用途GPU间高速互联内存扩展与一致性GPU间开放互联带宽水平极高900GB/s级中高128GB/s级目标极高延迟极低1-2微秒中300-500ns内存访问目标极低生态英伟达私有开放标准多厂商开放标准多厂商成熟度非常成熟逐步成熟早期典型场景大模型训练、HPC内存池化、异构计算未来多厂商GPU集群实际选型时这三者不是互斥关系。一个典型的AI服务器可能同时用到NVLink做GPU间训练通信CXL做内存扩展和CPU-GPU数据共享未来UALink可能在某些场景替代NVLink。4.3 现在该不该等UALink经常有人问UALink快出来了现在买NVLink方案会不会很快过时我的判断是短期内不用担心。原因有三第一UALink产品化至少还要一两年而且初期性能和生态成熟度肯定不如NVLink第二英伟达也在演进NVLink 5.0Blackwell那代带宽又翻倍了而且NVLink Fusion开始允许第三方GPU通过NVLink连接生态在逐步开放第三对于大多数团队来说现在需要的是能跑起来的方案不是等一个未来可能更好的标准。如果你做的是长期硬件规划三年以上UALink值得关注可以在架构设计时留出兼容空间。但如果现在就要交付项目NVLink和CXL是更务实的选择。5. 选型决策不同规模集群该怎么配5.1 小规模集群8卡以内8卡以内是最常见的场景一台服务器插8张GPU节点内互联方案直接决定训练效率。如果预算充足且用英伟达GPU选NVLink全互联方案。比如DGX H100或者HGX H100的8卡配置通过NVSwitch实现任意两卡单跳通信。实测在175B参数模型训练中NVLink方案的通信开销占比不到15%而PCIe方案能到40%以上。如果预算有限PCIe 5.0方案也能用但要注意并行策略。数据并行对带宽要求低PCIe够用张量并行对带宽要求高尽量控制在节点内NVLink覆盖范围内。如果只有PCIe建议用梯度累积减少通信频率或者用ZeRO-Offload把优化器状态卸载到CPU内存。如果考虑AMD或Intel GPU目前节点内互联主要靠PCIeAMD的MI300X支持Infinity Fabric做节点内互联带宽介于PCIe和NVLink之间。如果跑推理任务PCIe方案通常够用如果跑训练需要仔细评估通信瓶颈。5.2 中等规模集群8到64卡这个规模开始涉及跨节点通信选型复杂度陡增。节点内优先NVLink全互联。如果卡数超过8考虑用NVLink Switch做更大规模的节点内互联比如16卡或32卡一个NVLink域。节点间InfiniBand NDR400Gbps是当前主流选择延迟低、RDMA成熟。RoCE v2是备选成本低但调优复杂需要仔细配置PFC和ECN避免丢包。CXL的切入点在这个规模下CXL可以用来做内存池化。比如把多个节点的冷数据集中放到CXL内存池减少每台机器的DDR配置降低成本。但要注意CXL交换机的延迟和带宽瓶颈别把热数据放过去。一个实际案例某团队用32卡A100做推荐模型训练节点内NVLink节点间IB NDR。他们额外挂了一套CXL内存池做特征存储把Embedding表放在CXL内存里GPU按需拉取。实测比全部放HBM节省了30%的显存训练速度只下降8%性价比很高。5.3 大规模集群64卡以上大规模集群的互联设计是系统工程没有标准答案。几个关键原则第一拓扑要匹配通信模式。数据并行的AllReduce是全局通信需要高带宽的全局网络张量并行的AllGather是组内通信需要低延迟的局部网络。用胖树Fat-Tree还是轨道优化Rail-Optimized取决于你的并行策略。第二NVLink域的大小要仔细设计。NVLink域越大节点内通信越快但成本和功耗越高。DGX SuperPOD用NVLink Switch把32个节点连成一个NVLink域但那是千万美元级的方案。一般团队用8卡NVLink域加IB互联就够了。第三CXL在大规模集群里的角色是内存层级管理。把内存分成热HBM、温DDR、冷CXL三层用软件做数据分层。这需要操作系统和运行时库的支持目前还不算成熟但方向是对的。第四关注UALink的进展。如果你计划三年后扩展集群现在设计网络架构时可以考虑UALink兼容性比如选择支持UALink的交换机或线缆标准。但别为了等UALink推迟当前项目。6. 产品对比与实测数据6.1 当前主流产品参数产品互联方案节点内带宽节点间方案典型场景NVIDIA DGX H100NVLink 4.0 NVSwitch900GB/sIB NDR 400G大模型训练NVIDIA HGX H100NVLink 4.0900GB/s取决于服务器通用GPU服务器NVIDIA DGX B200NVLink 5.01.8TB/sIB NDR/XDR下一代训练AMD MI300XInfinity Fabric PCIe 5.0约896GB/sIB/RoCE推理与训练Intel Gaudi 3RoCE PCIe 5.0取决于配置RoCE 400G推理与微调通用CXL内存扩展CXL 2.0/3.064-128GB/s不适用内存池化6.2 实测对比NVLink vs PCIe在训练中的差距我在8卡A100上做过一组对比测试跑BERT-Large微调batch size 64序列长度512NVLink全互联单步耗时约0.42秒GPU利用率78%PCIe 4.0 x16单步耗时约0.68秒GPU利用率52%差距主要来自AllReduce通信。NVLink的AllReduce带宽利用率能到85%以上PCIe只有50%左右。而且PCIe方案下通信和计算不能很好重叠GPU经常在等数据。如果换成更大的模型比如GPT-3 175B差距会更明显。NVLink方案可能只需要PCIe方案60%的时间而且规模越大NVLink的优势越突出。6.3 CXL内存扩展的实测延迟在一台支持CXL的服务器上我测过CXL内存的访问延迟本地DDR5约90nsCXL内存通过CXL 2.0交换机约380ns远程NUMA节点DDR约220nsCXL内存延迟是本地DDR的4倍多比远程NUMA还高。这意味着CXL内存不能当主存用只能放冷数据。但它的带宽还不错顺序读写能到50GB/s以上比走网络访问远程内存快得多。注意CXL内存的性能高度依赖交换机质量和固件版本。早期CXL 1.1设备的延迟能到600ns以上基本不可用。选型时一定要看实测数据别只看规格书。7. 踩坑记录那些规格书不会告诉你的事7.1 NVLink的假全互联有些服务器标称支持NVLink但实际拓扑不是全互联。比如某些4卡服务器NVLink只在相邻卡之间有连接跨卡通信要跳两次。这种拓扑下如果你把通信密集的卡分到非相邻位置性能会差很多。排查方法用nvidia-smi topo -m看拓扑矩阵确认任意两卡之间是NVLink还是SYS经过PCIe和CPU。如果是SYS说明不是全互联。7.2 CXL内存的NUMA陷阱CXL内存默认是一个独立的NUMA节点。如果操作系统把进程的内存分配到CXL节点上而进程又在CPU上跑延迟会非常高。更坑的是有些BIOS默认把CXL内存设为优先分配导致热数据被放到慢速内存上。解决方法用numactl --membind0强制绑定本地内存或者用numactl --interleave做交错分配。在Kubernetes里可以用Topology Manager做NUMA亲和性调度。7.3 跨节点NVLink的误解NVLink本身不支持跨节点。英伟达的NVLink Switch系统比如GH200 NVL72确实能跨节点但那是一个机柜级的方案通过NVLink Switch把72张GPU连成一个域。普通服务器之间的NVLink不存在。跨节点必须走IB或RoCE。我见过有人以为买了带NVLink的服务器就能跨节点高速互联结果发现节点间还是走IB白花了NVLink的钱。选型时一定要搞清楚你需要的是节点内互联还是节点间互联。7.4 驱动和固件版本不匹配NVLink和CXL都对驱动、固件版本敏感。NVLink的NVSwitch固件版本不匹配可能导致链路降速或训练不稳定。CXL设备固件太老可能不支持某些内存语义操作。建议部署前统一检查所有组件的固件版本用厂商提供的最新兼容性矩阵。别混用不同批次的硬件尤其是NVSwitch和GPU的搭配。8. 写给不同角色的选型建议8.1 算法工程师关注通信模式而非互联协议如果你主要写训练代码不需要太纠结NVLink还是CXL。你需要关注的是你的并行策略需要什么通信模式。数据并行用AllReduce张量并行用AllGather/ReduceScatter流水线并行用点对点通信。不同的通信模式对带宽和延迟的敏感度不同。实际建议用NCCL的调试工具NCCL_DEBUGINFO看通信瓶颈在哪。如果AllReduce耗时占比高考虑优化并行策略或者换NVLink如果是点对点通信慢可能是拓扑问题。8.2 硬件工程师拓扑设计是核心你的核心任务是设计拓扑匹配通信模式。节点内用NVLink全互联节点间用IB胖树或轨道优化。CXL用来做内存扩展但别指望它做GPU间通信。关键决策点NVLink域多大IB用几层交换机CXL内存放什么数据这些都需要和算法团队对齐通信模式后再定。8.3 技术管理者算总账而非单卡账选型时别只看单卡性能或互联带宽要算总账硬件成本、功耗、运维复杂度、生态锁定风险。NVLink方案性能好但贵且锁定英伟达CXL通用但延迟高UALink未来可期但当前不成熟。我的经验是当前项目用成熟方案NVLinkIB长期规划关注开放标准UALinkCXL作为内存扩展的补充。别为了追新而牺牲项目交付。9. 未来两年的技术演进判断NVLink会继续演进NVLink 5.0已经在Blackwell上用了带宽翻倍到1.8TB/s。英伟达还在推NVLink Fusion允许第三方GPU通过NVLink连接这是在生态上做妥协。CXL 3.0产品会逐步落地带宽和延迟都会有改善。CXL内存池化在云厂商那边会先起来因为云厂商对内存利用率最敏感。UALink 1.0产品预计2025年底到2026年出现初期性能可能对标NVLink 4.0生态建设需要更长时间。AMD和Intel的GPU如果支持UALink多厂商GPU集群会成为可能。对于大多数团队我的建议是现在用NVLinkIB做训练CXL做内存扩展保持对UALink的关注但别等。技术选型永远是当前需求和未来趋势的平衡没有完美方案只有适合当前场景的方案。最后分享一个实用技巧不管选什么方案部署前一定要做通信基准测试。用NCCL Tests或者OSU Micro-Benchmarks测实际带宽和延迟别信规格书。我见过太多规格书标称900GB/s实测只有400GB/s的情况。实测数据才是选型的唯一依据。