这个系列写到第三篇,确实进入了信息量最大的部分。前两篇我们聊过“超节点算力”为什么会成为大模型时代的底座,也聊过算力平台整体建设的思路。这第三篇我把重点放到“关键技术”四个字上,围绕 Scale-up 高速互连、通信与计算重叠、显存池化、全局调度、断点续训这些真正决定一个超节点能不能跑起来、跑得稳、跑得快的底层细节展开。如果你正准备搭一套面向大模型训练或推理的集群,或者你已经在维护类似的算力平台,这篇会很对你的胃口。全文不会给你画大饼,我会尽量把每个关键环节背后的原理和取舍讲清楚,也会分享一些实际部署时踩坑之后的经验。
1. 超节点到底是什么:从“集群”到“逻辑大卡”的范式变化
1.1 为什么传统集群在超大模型面前开始吃力
很多同学入门时会有一个朴素的疑问:大模型训练不就是用很多服务器一起跑吗,多插几台机器、多堆几张加速卡,算力不就上去了?
理论上是这样,但真实工程里,问题远没有这么简单。大规模并行训练有两大天然约束:一是显存,二是通信。显存决定模型能不能塞进去,通信决定模型塞进去之后能不能高效地协同算。早期百亿甚至千亿参数模型时代,一个训练任务通常分布在几十到几百张加速卡上,卡与卡之间依赖服务器内部的 PCIe 交换或者普通万兆/二十五万兆以太网。千卡规模以下,这套架构还能凑合跑,因为通信量虽然大,但相对可控。
一旦参数规模冲到万亿以上,问题就变了。你让 1000 张卡协同训练一个万亿参数模型,每一步迭代都要做梯度同步和参数更新,哪怕是千兆级别的带宽,光是 etc. 的全局规约 AllReduce 就会把时间吃掉一大半。实际表现就是 GPU 算力利用率低得惊人,MFU(Model FLOPs Utilization,模型算力利用率)能掉到 30% 以下。你买的算力,大量时间不是在算,而是在等数据,在排队,在网络传输的间隙里空转。
这时候只有两条路:要么减少通信量,要么降低通信延迟、提高通信带宽。超节点的核心思路,其实就是在后者上做文章。
1.2 超节点不是“更大的服务器”,而是“一张逻辑大卡”
我第一次接触超节点类方案的时候,第一反应也就是“这是不是把服务器做大一点,一台机器里塞更多卡?”后来真正看内核设计和调度逻辑,才意识到这个理解是错的。超节点不是为了造出更大的单机,而是要在一个尽可能大的范围内,把通信延迟压缩到接近单卡内部互连的水平,让调度器、训练框架和开发者把这一整片资源当作一张巨大的加速卡来用。
打个不那么精确的比方,传统集群像是把一万人分散在几百间办公室里,每次要协同做事就得靠打电话、跑腿送文件;超节点则是把一万个人请进同一个开放式大厅,虽然大家仍坐在不同工位,但互相之间喊一嗓子就能听到,甚至能直接递纸条,信息流动速度和密度完全不同。
从物理形态看,超节点通常由几十张到上百张加速卡组成,卡与卡之间通过专用高速互连技术(比如 NVLink 类、UALink 类或 CXL 类)组成一个高带宽、低延迟的 Scale-up 域。这个域对外可以整体承接任务,对内则由专门设计的拓扑结构保证任意两张卡之间都有足够带宽和足够低的延迟。用户和作业系统并不关心卡具体插在哪台机器上,只知道自己申请到的是一个“大设备”。
1.3 从用户视角理解算力、Token、API 的关系
既然选题热搜里有“算力、token、API 是否相同”这个问题,我先花点篇幅把它讲透,因为超节点概念最容易在这三个词上把人绕晕。
算力是物理能力,token 是语言模型处理文本的基本单位,API 是使用能力的接口,三者完全不是一个层面的东西。你训练或者推理大模型时,算力最终体现在“每秒能处理多少 token”。在矩阵运算层面,供应商会标称加速卡的 TFLOPS/TOPS,但这只是理论峰值。真实推理场景中,用户看到的是“每秒生成了多少个字”,也就是 tokens/s,这个指标由算力、显存带宽、模型大小、并发请求数共同决定。API 则是把底层算力封装成服务的一种形式,用户调用 API 时并不直接接触卡和节点,只需要发送文本,拿回文本。
举一个直观例子:假设某推理引擎在处理一个 70B 模型时,单张加速卡每秒大约能生成几十个 token,那么用户调用 API 体验到的速度就由这个数字决定。超节点在其中的价值是让并行的多个加速卡协同得像一张大卡一样,使单次请求可以占用更多显存和算力,从而在更低的延迟下处理更长的上下文、更大的模型。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 藏在硬件里的关键战役:Scale-up 互连与拓扑设计
2.1 Scale-up 和 Scale-out 不是非此即彼
行业里经常提 Scale-up 和 Scale-out。Scale-out 是横向扩张,多台服务器通过以太网或 InfiniBand 连起来;Scale-up 是纵向强化,让卡与卡之间的互连速度远超传统网络。
超节点最核心的特征,就是在一个较大的范围内做高性能 Scale-up。传统单机内部 8 张卡之间的带宽可以做到几百 GB/s 甚至更高,但跨节点后就掉到几十 GB/s 甚至更低,中间的落差就是节点墙。超节点要打破的正是这堵墙:让跨节点的通信带宽尽量向节点内看齐,不要求完全一致,但至少不要让通信时间成为绝对瓶颈。
具体来说,现代超节点内部通常有两层网络设计。一层是短距离、高带宽的 Scale-up 网络,负责同一个超节点内的加速卡互联;另一层是 Scale-out 网络,负责超节点与超节点之间、以及超节点与存储系统之间的连接。训练任务如果压缩在单个超节点内,主要依赖前者;当任务大到需要多个超节点协同,就会依赖后者。
从技术路线上看,NVIDIA 的 NVLink/NVSwitch 方案是最早把多卡高速互连产品化的代表,之后业界也在推进更开放的 UALink、CXL 等互联标准。开放数据中心委员会(ODCC)近两年把“超节点”作为重点议题,本质上也是在推动这类高速 Scale-up 互连变成可统一调度的资源池。对于做平台的人来说,意味着未来不会只有一家厂商的私有协议,多厂商互通是大概率趋势。
2.2 全互联、环形、Torus:拓扑选型怎么取舍
高速互连不只是把线插上就行,内部连接拓扑结构直接决定带宽、延迟、成本和可维护性。早期 GPU 服务器内部常用全互联方式,也就是每张卡都和其他卡建立一条独立的高速通道,但这会导致线缆数量和交换端口数量暴涨。
假设有 N 张卡做全互联,每张卡都要有 N-1 个高速端口,整体端口数按 N 的平方级别增长。比如 8 卡全互联,一张卡只需 7 个端口;但如果做到 64 卡甚至 128 卡,这个数量就会变成 63、127,无论芯片的 SerDes 通道数还是背板布线空间都完全承受不住,成本也高到离谱。所以实际超节点的拓扑基本都会在“全互联”和“环形/Torus”之间做一个折中。
环状拓扑的优点是每个节点只需要少量端口,布线简单,成本低;缺点是数据在一次通信中可能要经过多跳,每经过一跳延迟都会增加,而且中间链路故障容易影响整环。为了让“大厅里的每个人都能快速喊话”,业界倾向于采用多轨、多维的设计,比如 2D/3D Torus 或者在关键层级引入交换芯片,让通信尽量在有限跳数内完成。
我在实际测试里观察到一种现象:拓扑设计不合理时,即使链路单点带宽非常高,一旦出现几十个节点同时发起通信,热点链路上的拥塞就会让整体吞吐断崖式下降。所以超节点的拓扑验证工作不能只看空闲状态延迟,一定要跑高并发全矩阵通信压测,比如模拟大规模并行训练时的 AlltoAll 通信,才能暴露真实问题。
2.3 光互连、LPO/CPO 和未来超节点的形态
当超节点扩大到几十张卡以上,电信号在 PCB 和线缆上的损耗变得不可接受,距离稍长就必须换成光互连。这就带来一个新的问题:传统可插拔光模块在高速率下功耗和体积都很高,一个超节点内部有几百条光链路时,光是光模块的成本和空间就会占掉一大块。
于是业界在探索两条路:LPO(线性驱动光互连)和 CPO(共封装光学)。LPO 去掉了传统光模块里的 DSP 芯片,由交换芯片直接驱动光器件,功耗和延迟更低;CPO 则是把光引擎和交换芯片封装在同一个基板上,距离更近,信号完整性更好。这两条技术路线对超节点的意义在于,它能让大规模全互联拓扑在工程上变得可落地。
如果你正在做超节点选型评估,我建议多关注线缆和光模块的可靠性。高速互连不是说通了就行,误码率、链路抖动、插拔损耗都会直接影响大规模分布式训练。训练任务一旦跑起来,单条链路降速都可能让整个任务的迭代时间变长,严重的话还会导致梯度同步超时而失败。所以许多生产级超节点对链路状态有实时监控,不仅能发现链路 Down,还能通过误码统计提前预警链路“亚健康”。
3. 通信与内存的暗战:并行训练背后的关键技术点
3.1 计算和通信如何重叠:让等待不再那么痛苦
硬件只是超节点的骨架,真正让算力跑满要靠软件把这些硬件资源调度起来。大模型训练最常用的做法是数据并行、张量并行、流水线并行、专家并行等多种并行策略的组合。这些策略本质上都是在做同一件事:把模型参数、梯度、优化器状态、激活值切分到不同加速卡上,分摊显存压力,同时尽可能提高并行度。
组合并行之后,卡与卡之间每步训练都会产生大量通信。比如张量并行中,前向和反向计算涉及的大量矩阵分块结果需要跨卡 AllReduce;数据并行中,每个数据并行副本的梯度又需要全局求和。通信量大不可怕,可怕的是通信和计算不能重叠,导致计算单元在那里空等网络数据。
要想让计算和通信重叠,工程上有几个关键手段:一是细粒度切分,把计算划分成更小的算子块,让每个块计算完一部分后立刻发起通信,而不是等整层计算完;二是依赖异步执行流,利用 CUDA 概念里的多条流机制,让通信操作放入独立的流中和计算流并行执行;三是合理的通信调度顺序,让同一个节点内的通信和跨节点通信交错进行。业界很多提速工作,本质都是在啃这些“把等待时间藏到计算时间里去”的活。
举例来说,在流水线并行中,如果只做粗粒度的分层切分,一个阶段在计算时,其他阶段可能处于空闲状态。更精细的做法是把一个小批次再切成若干微批次,让不同阶段轮流处理微批次,形成流水线效应。虽然流水线切换本身也有开销,但整体吞吐通常能提升一大截。
3.2 显存池化:从“单卡显存”到“超节点统一内存”
很多不熟悉训练系统的人会以为只要卡足够多,显存就足够大。实际训练一个万亿参数模型,权重、梯度、优化器状态、激活值以及推理时的 KV Cache,消耗的显存会远远超过模型体积本身。
算一笔粗略账:一个 1 万亿参数的稠密模型,如果用混合精度训练,模型权重和梯度通常用 FP16 或 BF16 存储,大概需要 2TB 权重和 2TB 梯度。但 Adam 优化器还额外保存了每个参数的 FP32 主权重副本,以及一阶动量、二阶动量的 FP32 副本,这部分大约又是 12TB。光参数和优化器状态就接近 16TB,这还不算激活值和中间结果。即便用张量并行把状态切到多卡上,单卡显存压力依然非常严峻。
超节点带来的一个重要能力是显存池化。过去每个任务、每张卡各自管各自的显存,卡间不能复用;超节点通过统一的 Coherence/内存池机制,让一个任务的大块显存需求可以被多个卡协同满足,某些卡计算空闲时还可以把显存暂时“借”给别的任务。这和操作系统的虚拟内存思想很像——不要让内存成为一块一块孤岛,而要让它可以弹性流动。
在推理场景里,这种池化价值尤其明显。长上下文推理时,KV Cache 会随序列长度线性增长,比如一个拥有 64 层 Transformer、多头维度较大的模型,处理几十万 token 上下文时 KV Cache 可轻松达到几十 GB。如果某个用户请求的上下文特别长,单卡容易被局部占用耗尽,而超节点统一的缓存管理层可以把 KV Cache 分散到多卡,或者按需换入换出,极大提升长上下文任务的稳定性和吞吐。
3.3 从通信模式看训练框架如何利用超节点
并行训练里最常见的通信模式有两种:AllReduce 和 AlltoAll。
AllReduce 用于数据并行梯度同步:每张卡算完自己那部分梯度后,把梯度向量加起来,让每张卡都拿到全局平均后的梯度。AlltoAll 则常见于 MoE(混合专家)模型中,因为每个 token 经过路由层后会去不同的专家计算,于是每张卡都需要把自己负责的一部分 token 发给对应专家所在的卡,这是一个典型的“每个人都要给其他人发一部分数据”的通信模式。
超节点引入后,从训练框架角度看,通信图的形态没有根本改变,但通信矩阵的带宽上限和延迟上限变了。比如同样是执行一次跨 64 卡的全量 AllReduce,在传统千兆/万兆集群上可能需要几百毫秒,而在超节点的高带宽网络里可以压缩至几毫秒甚至更低。框架层对超节点的适配重点,其实是把原本针对“跨节点慢速通信”做的很多优化策略重新调参,因为通信很快时,有些原来显得昂贵的计算优化反而不再必要,而有些原本被网络藏起来的计算开销则变成了新瓶颈。
如果你自己维护训练框架,建议做一套简易的通信基准测试,分别测节点内和跨节点的 AllReduce/AlltoAll 带宽与延迟,再对比训练日志里的通信占比。很多号称“网络不够快”的性能问题,最后排查下来其实是框架没把通信跟计算重叠好,或者通信算子启动开销过大。
4. 系统软件是隐形的“第四支柱”:调度、路由与容错
4.1 把超节点变成资源池:调度器的关键设计
硬件拓扑再强,如果没有一套好用的资源管理层把超节点暴露给上层任务,实际运营还是会很痛苦。传统调度器处理的是“一台服务器上的几张卡”,而超节点时代调度器的对象更像是一个个“虚拟加速域”,每个域可能包含几十张卡,并且这些卡之间存在严格的拓扑亲和性要求。
我的经验是,调度器必须至少做到三点。第一,拓扑感知:当用户申请一个需要 N 张卡的训练任务时,调度器要尽量把 N 张卡分配在同一个超节点内,如果超节点装不下,也要优先把任务拆分到尽可能少的超节点上,避免一个任务横跨太多网络域。第二,资源隔离:不同任务共享同一个超节点时,要防止某个任务的大流量通信把整个网络打爆,需要做网络级 QoS,而不能只做显存和算力上的隔离。第三,弹性伸缩:大模型训练任务可能会动态申请额外资源做并行策略调整或 checkpoint 保存,调度器要能灵活满足这种增量请求。
很多算力平台会再封装一层,把底层多台加速服务器的资源整合成“算力资源池”,对外提供统一资源。你买 API 也好,租裸算力也好,本质上都是这种资源池对外提供的能力。对于用户而言,不需要关心平台的具体部署位置,但如果你要自建集群,最先要做的不是买卡,而是先想清楚你准备怎么管理这些卡。管理不清晰,堆再多卡也是浪费。
4.2 路由、拥塞控制与流量工程
超节点内部通信路径非常多,如果不加控制地让数据随意流动,很容易出现局部拥塞。例如 40 张卡同时向第 10 张卡发数据,如果路由算法把流量全部引到同一组链路上,热点就会产生,整体延迟迅速升高。
因此超节点交换网络通常要支持更精细的路由和拥塞控制机制。底层无拥塞网络常用 RoCE(RDMA over Converged Ethernet)或者 InfiniBand,它们依赖 PFC(优先级流控)、ECN(显式拥塞通知)、DCQCN(数据中心量化拥塞通知)等机制来保证无损传输。但在超节点这种高并发全互连场景里,只靠这些传统机制还不够,还需要拓扑感知的流量调度。
实际部署时,我最常看到的问题是 PFC 风暴:某一条链路上微小的拥塞没有及时被 ECN 标记,接收端触发 PFC 暂停帧,反向阻塞了连接同一交换机的所有流量。排查的时候,网络监控里看到某个端口上 PFC 计数疯狂增长,就说明拥塞控制参数没调好。超节点场景我一般建议把 ECN 阈值调低,宁可让 RDMA 流量稍微减速,也不要让 PFC 波及无辜链路。
4.3 超大规模训练的容错:断点续训和链路降级
超节点把几十上百张卡绑成一个逻辑大卡,可也带来一个新的脆弱性:单点故障影响面变大了。过去有 4 台普通服务器做分布式训练,其中一台出问题,任务挂掉后损失的是这台机器的算力;现在如果超节点里有一张卡或者一条链路出问题,整个逻辑大卡上的训练任务可能都要中断。超节点规模越大,可靠性和容错设计就越关键。
生产级超节点至少要做好以下几件事。一是反向链路检测,不仅关注链路 Up/Down,也要关注误码率,因为高速链路偶尔的误码可能不会直接断链,但会导致数据重传,进而拖慢集体通信。二是拓扑感知的断点续训,保存 checkpoint 时要记录任务当前所在卡的拓扑位置,恢复时优先分配到同样的拓扑结构上,否则可能因为拓扑变化导致通信性能大幅下降。三是分阶段 checkpoint 策略,避免所有卡同时向共享存储写入巨大模型文件,造成存储带宽瓶颈。
我见过很多新团队首次跑大规模训练时,总是等到任务彻底崩了才想到恢复方案,结果一崩就要从最近的 checkpoint 重新来。而 checkpoint 的保存频率、保存位置、是否做异步保存,都会成为容量规划和性能优化的关键点。建议从初期就把“训练中断恢复演练”作为一个常态化工程环节,不要让“万一出问题”变成“必然出问题”。
4.4 Token 处理、推理与训练的性能建模
既然热搜词里有“tokens/s”“算力 TOPs 对照表”这类问题,我也顺带展开聊聊如何在超节点环境下做性能估算。
推理场景的吞吐通常用 tokens/s 表示,但 tokens/s 是一个结果指标,它由很多底层因素决定。如果你只看加速卡的理论 TOPS 值,会严重高估真实能力,因为推理过程除了矩阵乘法,还有大量访存操作、注意力计算、采样、KV Cache 读写操作。在实际的 decoder 阶段,每一步生成新 token 时,计算量相对较小却需要把完整的权重和 KV Cache 读一遍,这时算力往往处于“喂不饱”的状态,性能瓶颈转移到了显存带宽上。
这也是为什么许多推理优化会把模型量化到 INT8/FP8,因为量化的目的不仅是减少显存占用,更是减少内存读取量。设一个极端情况:同样一次矩阵运算,如果权重是 FP16,每算一个结果需要读 2 字节;如果换成 INT8,就读 1 字节,模型在相同带宽下吞吐能提升近一倍。当然,量化带来精度损失和复杂度,是否值得取决于业务场景。
回到超节点,它让你可以把一个很大的模型装进一个逻辑上更连续的内存空间,推理引擎可以用更大的 batch size 服务更多并发请求。你说用户 API 快不快,往往不是看单次算得快不快,而是看在大批并发请求下是否仍然能保持稳定延迟。
5. 常见问题与排查技巧实录
5.1 训练时算力利用率一直很低,该从哪里查起
如果你发现加速卡虽然在工作,但利用率只有百分之二三十,第一步不是去调超参数,而是去采样看看时间到底花在哪了。结合我自己的排查经验,先用 profiler 抓一个训练 step 的 timeline,看计算、通信、空转、数据加载分别占了多少时间。
如果通信时间占比很高,优先检查网络是否存在拥塞、通信算子是否与计算算子重叠不足。如果数据加载占比较高,优先看数据管道的预处理能力是否匹配得上超节点的高速计算能力。这里有个容易被忽略的点:很多时候 CPU 端的数据加载和预处理会成为瓶颈,因为加速卡算得太快,喂数据的 CPU 反而跟不上。解决办法是数据预处理多进程化、样本预加载、使用高性能文件系统缓存。
5.2 所有卡都能通信,但 AllReduce 性能远低于预期
这种问题通常出现在链路或交换层,而不是应用层。可以先用专门的带宽测试工具,比如 nccl-tests 对不同卡数、不同数据大小跑一遍,确认瓶颈。
如果单卡到单卡带宽很高,但全局 AllReduce 掉速率,大概率是网络拓扑造成的问题。比如在普通叶脊网络里,不同机架间通信要经过多台交换机,流量在多条等价路径上如果哈希不均,就会出现偏斜。解决办法是启用动态路由或者全局负载均衡,也可以调整 AllReduce 的实现,将通信流量拆分到网卡多队列上,避免单队列成为瓶颈。
还有一个高频坑是网卡中断绑定问题。高速网卡在跨 NUMA 节点访问时,如果中断没有绑定到正确的 CPU 核心,就会因 CPU 处理中断不及时而造成吞吐下降。这在小规模测试中往往不明显,一旦把超节点所有卡都跑起来,效果就非常显著。
5.3 训练损失突然冲高甚至不收敛,超节点要背锅吗
损失冲高不一定就是超节点问题,但大规模集群训练时确实有一种典型故障叫做“通信静谧恶化”。比如某条链路误码后没有被正确重传,导致某个梯度张量里混入了错误数据;又比如某张卡的显存出现偶发错误,在计算时产生 NaN。
排查这类问题,我的习惯是先做“最小化复现”,把并行度降下来,同时开启确定性算法开关,看问题是否可复现。然后逐步恢复并行度,观察问题在哪一个规模出现。如果只在超大集群出现,可以并行做链路健康检查和卡健康检查,不要一上来就怀疑算法本身。
5.4 怎么从一张卡推断整个超节点的处理能力
很多刚开始接触算力选型的人会试图用“单卡 TOPS × 卡数”估算整体算力,这个方式只能用来做快速画像,不能用来做精确规划。因为分布式系统的加速比存在通信开销,通常有一个最佳并发度。当卡数增加时,可能刚开始接近线性增长,随后增速放缓,甚至因为通信瓶颈出现吞吐回退。
实操中我会先用一套典型模型跑一个缩放测试,从 8 卡、16 卡、32 卡逐步往上加,记录每个配置下的吞吐和 MFU,画出扩展曲线。用这条曲线去判断,一个任务到底该配多大超节点规模,而不是盲目追求“越大越好”。超节点的“大”是能力上限,不是每次都必须打满。
6. 超节点落地建设的三大标配:网络、散热与持续运营
6.1 别只盯着算力卡,网络与存储要匹配
搭一个超节点,最容易犯的错是买了几十张高端加速卡,结果外围网络还停留在百G甚至更低,也没有规划分布式并行文件系统,导致模型 checkpoint 保存和加载慢得离谱。
从算力架构规划的角度看,超节点对网络的诉求不再是传统的“能通就行”,而是要求低时延、无损、高并发下仍能保持稳定吞吐。实际选型时,Scale-up 域主要依赖高速背板和专用交换机,Scale-out 域最好也要规划 400G 甚至 800G 级别的上行链路,避免在跨节点梯度和数据读取环节形成瓶颈。存储方面推荐采用全闪存并行文件系统,并把高带宽的缓存层放在距离计算节点更近的位置,这些都会直接影响训练效率和恢复速度。
6.2 散热、功耗与布线的工程细节
超节点的高密度算力意味着更大的功耗和更高的发热密度。风冷方案在传统机房也许够用,但在一个机柜塞进几十张高功耗加速卡的情况下,基本都会过渡到液冷方案。液冷不仅是散热方式的替换,还会影响机柜结构、管路设计、漏液检测和运维流程。
部署阶段我特别建议提前做好液冷管路与网络布线的隔离,不要等到出问题再去改。因为高密度环境下,网络光纤和液冷管路交错出现,很容易在维护时碰到脆弱接头。曾经有朋友遇到过光纤弯折角度过大导致链路误码率升高,排查了很久才发现是光纤走线时被其他管路压住,这类问题在超节点高频次维护中会非常常见。
6.3 算力平台选型的一点个人建议
最后提醒一下,选择超节点相关算力平台时,不要只比较 TOPS 和显存,更要多关注网络架构、任务调度能力、故障恢复速度以及技术支持响应。算力不是只看峰值,那只是纸面能力。真正影响你生产力的,是实际跑任务时的稳定性和可管理性。
如果你的团队没有专门做网络优化的专家,我不建议一开始就自建一套硬件全部自研。可以先利用商业化或者云端的超节点算力资源把模型验证跑通,等团队经验沉淀到一定程度,再逐步考虑自建。我的体会是,超节点革命不只是硬件的革命,更是工程体系灵活性的考验——谁能让算力稳定跑满,谁才能真正享受这份红利。
