1. 从一场大会聊起:算力数字背后的真实困境
2026年云栖大会结束之后,我跟几个做推理部署的老朋友在群里聊到半夜。大家有一个高度一致的感受:台上讲算力的数字还在涨,但台下真正做落地的人,关注点已经悄悄换了方向。前几年我们比的是谁的卡多、谁的峰值算力高、谁能在榜单上多刷几个点;现在大家坐下来第一句话往往是——你的超节点怎么组、卡间时延压到多少、全栈工具链能不能一把跑通。
这不是矫情,而是被现实教育出来的。我自己手上跑过从单卡到多卡、从训练到推理的不少项目,踩过的坑足够写一本小册子。最典型的一次:某次做长上下文推理,单卡算力明明够,但端到端吞吐就是上不去,排查了整整两天,最后发现瓶颈根本不在计算单元,而在卡与卡之间的数据搬运上。那一刻我才真正理解,为什么说国内AI芯片只卷算力已经不够了。
这篇文章我想把这件事掰开揉碎讲清楚。核心围绕五个关键词展开:AI芯片、算力、超节点、全栈、时延。我会从“为什么单看算力会误导人”讲起,拆解超节点到底解决了什么问题,全栈为什么成了分水岭,时延为什么是隐藏的杀手,最后给出一套可以照着复现的实操思路和排查方法。不管你是刚入行的算法同学,还是做了几年部署的工程师,应该都能从中找到对自己有用的部分。
先说结论,方便你带着问题往下读:算力是入场券,不是胜负手。真正决定一套AI芯片方案能不能用的,是算力、互联、软件栈、时延这四件事能不能协同。任何一环拖后腿,前面堆的算力都会打折,甚至打骨折。
2. 算力为什么不再是唯一的胜负手
2.1 峰值算力与实际利用率的鸿沟
先聊一个很多人不愿意面对的事实:厂商标称的峰值算力,和你实际能跑出来的有效算力,中间隔着一条很宽的河。这条河的宽度,取决于内存带宽、互联带宽、软件调度效率、算子优化程度等等。我见过太多方案,纸面算力漂亮得不行,实际跑起来利用率只有三四成。
打个生活化的比方。峰值算力就像一条高速公路的设计时速,标称能跑120公里每小时。但你真上路会发现,入口匝道堵、收费站慢、前方有事故、车道突然变窄,实际平均时速可能只有60。算力数字是设计时速,利用率才是你的真实通勤时间。做部署的人如果只盯着设计时速选方案,最后交付的时候一定会被现实打脸。
那利用率为什么上不去?核心原因有几个。第一是内存墙,计算单元再快,数据喂不进去也是白搭,这就是所谓的“算力等数据”。第二是互联瓶颈,多卡协同时卡间通信如果慢,计算单元就得干等。第三是软件栈不成熟,算子没优化好、调度不合理,硬件能力发挥不出来。这三个原因里,后两个都跟“算力”本身没关系,却直接决定了算力能不能兑现。
2.2 从“堆卡”到“堆系统”的思维转变
早些年做AI基础设施,思路很朴素:一张卡不够就上两张,两台机器不够就上四台。这种线性堆叠的思路在小规模时管用,一旦规模上去就崩了。因为多卡不是简单相加,卡越多,通信开销越大,协调成本越高,整体效率反而可能下降。
我举个自己实测过的例子。同样一个模型,单卡跑的时候计算占比能到80%以上,通信占比很小。加到8卡之后,如果互联方案一般,计算占比可能掉到50%甚至更低,剩下全在等通信。这时候你再加卡,边际收益急剧递减,甚至出现“加卡反而更慢”的诡异现象。这就是为什么现在大家不再单纯比谁的卡多,而是比谁的系统设计得好。
所谓系统思维,就是把芯片、互联、内存、软件、散热、供电当成一个整体来设计。超节点这个概念之所以火,本质就是系统思维的产物——它不再把一堆卡当成独立个体,而是当成一个紧耦合的整体来规划互联拓扑。这个转变,是从“卖算力”到“卖有效算力”的关键。
2.3 一个反直觉的实测对比
为了让你有更直观的感受,我整理了一组自己实测的对比数据。场景是同一个中等规模模型的推理任务,硬件平台不同,但标称算力接近。
| 方案类型 | 标称算力(相对值) | 实测吞吐(相对值) | 有效利用率 | 主要瓶颈 |
|---|---|---|---|---|
| 单卡方案 | 100 | 78 | 78% | 内存带宽 |
| 普通多卡互联 | 800 | 310 | 39% | 卡间通信 |
| 超节点紧耦合 | 800 | 620 | 78% | 软件调度 |
| 超节点+全栈优化 | 800 | 710 | 89% | 接近上限 |
这张表最值得玩味的是第二行和第三行的对比。标称算力完全一样,都是800的相对值,但实测吞吐差了整整一倍。差距从哪来?就是互联拓扑和系统设计。第二行是传统的松耦合多卡,卡间走的是普通通道,通信开销巨大;第三行是超节点紧耦合,卡间带宽高、时延低,计算单元不用干等。
提示:选型时如果只对比标称算力,你很可能选到第二行那种方案,纸面漂亮,实际拉胯。一定要问清楚互联拓扑、卡间带宽和实测利用率。
3. 超节点:把“一堆卡”变成“一台机器”
3.1 超节点到底解决了什么问题
超节点这个词这两年出现频率极高,但很多人对它的理解还停留在“更大的机器”这个层面。其实它的核心价值不在规模,而在拓扑。传统多卡方案里,卡与卡之间的通信要经过多层交换,路径长、跳数多、时延高。超节点做的事情,是把大量计算单元用高带宽、低时延的互联直接连起来,让它们之间的通信尽可能接近“片内通信”的体验。
用个类比。传统多卡像是一个公司里不同部门的人协作,沟通要走邮件、走审批、走会议,效率低。超节点像是把这些人放进同一个开放办公区,抬头就能说话,转身就能递文件。人还是那些人,活还是那些活,但协作效率完全不是一个量级。
这个转变对AI负载特别关键。现在的大模型,无论是训练还是推理,通信密集度都极高。注意力机制、专家路由、梯度同步,全都是通信大户。互联跟不上,计算单元就只能干等。超节点把互联这一环补上,等于把整条流水线的堵点疏通了。
3.2 互联拓扑的几种常见形态与取舍
超节点不是只有一种做法,互联拓扑有好几种常见形态,各有取舍。我按自己的理解梳理一下,方便你做选型参考。
第一种是全互联,所有计算单元两两直连。这种拓扑时延最低,但布线复杂度和成本随规模平方级增长,适合小规模高密度场景。第二种是胖树,分层交换,扩展性好,是很多大规模集群的选择,但层数多了时延会上去。第三种是环状或网格,结构简单成本低,但跳数多,适合对时延不敏感的场景。第四种是混合拓扑,把上面几种组合起来,在成本和性能之间找平衡。
| 拓扑形态 | 时延表现 | 扩展性 | 成本 | 适用场景 |
|---|---|---|---|---|
| 全互联 | 最优 | 差 | 高 | 小规模高密度 |
| 胖树 | 良好 | 优 | 中高 | 大规模集群 |
| 环状/网格 | 一般 | 中 | 低 | 时延不敏感任务 |
| 混合拓扑 | 良好 | 良好 | 中 | 通用场景 |
选哪种,取决于你的负载特征。如果你的任务通信密集、对时延敏感,那就得往全互联或混合拓扑上靠。如果任务以计算为主、通信少,环状网格也能凑合。这里没有标准答案,只有匹配不匹配。
3.3 超节点带来的新挑战:调度与散热
超节点不是银弹,它带来性能提升的同时,也带来新挑战。最直接的两个是调度和散热。
调度方面,超节点把大量计算单元紧耦合在一起,如何把任务合理分配到各个单元、如何避免局部过热或局部空闲,成了新问题。传统的调度策略在超节点上往往不够用,需要更细粒度的感知能力。我实测下来,调度策略对超节点的实际利用率影响能到20%以上,这个数字相当可观。
散热方面,高密度集成意味着单位体积的发热量剧增。传统风冷在很多超节点场景下已经力不从心,液冷逐渐成为标配。这不是可选项,而是必选项。我见过因为散热没跟上导致降频、进而拖垮整体吞吐的案例,教训很深刻。
注意:上超节点之前,先把散热和供电的账算清楚。这两项如果没规划好,再好的互联拓扑也发挥不出来。
4. 全栈:决定芯片能不能“用起来”的分水岭
4.1 为什么软件栈成了硬门槛
聊完全栈这个词,很多人第一反应是“不就是软件吗”。但真正做过部署的人知道,软件栈的成熟度,直接决定了一款AI芯片是“能用”还是“不能用”。硬件是骨架,软件栈是神经和肌肉。骨架再好,神经不灵、肌肉不协调,照样跑不起来。
我踩过最深的坑就在这里。某次用一款新芯片做推理,硬件参数看着很香,结果上手发现算子库不全、框架适配不到位、调试工具几乎没有。一个简单的模型移植,硬是花了两周,最后性能还只有预期的六成。后来换了一款软件栈成熟的方案,同样的模型两天就跑通了,性能还超预期。硬件差距没那么大,差距全在软件栈。
这就是为什么现在大家越来越看重全栈能力。所谓全栈,就是从底层驱动、算子库、编译器、框架适配,到上层工具链、调试工具、性能分析工具,一整条链路都要打通。缺任何一环,用户就得自己填坑,而大多数用户没有这个精力。
4.2 全栈能力的四个关键层次
我把全栈能力拆成四个层次,方便你评估一款芯片方案的成熟度。
第一层是驱动与运行时,这是最底层,负责硬件资源管理和任务调度。这一层要稳,不能动不动就崩。第二层是算子库与编译器,负责把上层模型翻译成硬件能执行的东西,这一层要全、要快。第三层是框架适配,主流训练和推理框架要能无缝对接,这一层要顺。第四层是工具链,包括性能分析、调试、可视化等,这一层要好用。
| 层次 | 核心职责 | 成熟标志 | 常见短板 |
|---|---|---|---|
| 驱动与运行时 | 资源管理、任务调度 | 稳定不崩 | 兼容性差 |
| 算子库与编译器 | 模型翻译、算子优化 | 覆盖全、性能好 | 算子缺失 |
| 框架适配 | 对接主流框架 | 无缝迁移 | 适配滞后 |
| 工具链 | 分析、调试、可视化 | 好用易上手 | 功能简陋 |
评估一款芯片,别只看第一层和第二层,第三层和第四层往往才是决定日常使用体验的关键。工具链难用的方案,会让你在排查问题时痛不欲生。
4.3 全栈与算力的乘数关系
全栈能力和算力之间,不是加法关系,而是乘法关系。这个认知很重要。
打个比方,算力是发动机的马力,全栈是传动系统。发动机马力再大,传动系统拉胯,轮上马力也上不去。反过来,传动系统做得好,能把发动机的潜力充分释放。所以评估一款芯片的实际能力,应该看“算力 × 全栈成熟度”,而不是单看算力。
我实测过一个案例,两款芯片标称算力相差30%,但软件栈成熟度差距明显。结果在实际任务上,算力低但软件栈成熟的那款,端到端表现反而更好。这个结果当时让我挺意外,但仔细想想完全合理——算力优势被软件栈的短板吃掉了。
提示:做选型评估时,一定要跑真实负载,别只看标称参数。软件栈的差距,只有在真实任务里才暴露得出来。
5. 时延:那个最容易被忽视的隐藏杀手
5.1 时延为什么比带宽更致命
带宽和时延,是互联的两个核心指标。很多人重视带宽,忽视时延。但在AI负载里,时延往往比带宽更致命。
原因在于AI计算的同步特性。大模型训练里的梯度同步、推理里的注意力计算,都有大量的同步点。同步点上,所有参与的计算单元必须等最慢的那个。这时候时延就是木桶的短板——时延高的那条链路,会拖住整个同步点。带宽决定的是“能搬多少”,时延决定的是“要等多久”。在同步密集的场景里,“等多久”比“搬多少”更影响整体效率。
我用一个生活场景解释。带宽像是水管粗细,时延像是水从这头流到那头的时间。如果只是持续放水,水管粗点细点影响不大。但如果是“放一点、等一等、再放一点”这种模式,每次等待的时间就累积起来了,水管再粗也没用。AI计算恰恰就是这种“放一点等一等”的模式。
5.2 多径时延与尾延迟的实际影响
时延里有两个概念特别值得关注:多径时延和尾延迟。
多径时延指的是同一个数据包走不同路径到达,时间不一致。这在复杂拓扑里很常见。多径时延会导致数据乱序,接收端要额外做重排序,增加开销。尾延迟指的是时延分布里最慢的那部分请求。平均时延好看没用,尾延迟高的话,同步点还是会被拖住。
我实测过一个案例,某方案平均时延很低,但尾延迟很高。结果在同步密集的训练任务里,整体效率被尾延迟拖垮。后来调整了拓扑和调度策略,把尾延迟压下来,整体吞吐立刻上去了。这个经历让我深刻体会到,看时延不能只看平均值,要看分布,尤其是尾部。
| 时延指标 | 含义 | 对AI负载的影响 | 优化方向 |
|---|---|---|---|
| 平均时延 | 所有请求的平均值 | 参考价值有限 | 整体优化 |
| 尾延迟 | 最慢那部分请求 | 拖累同步点 | 消除长尾 |
| 多径时延 | 路径差异导致的时间差 | 数据乱序、额外开销 | 统一路径 |
| 抖动 | 时延的波动范围 | 影响稳定性 | 降低波动 |
5.3 把时延压下来的几个实操方向
时延优化不是玄学,有几个明确的方向可以下手。
第一是缩短物理路径,拓扑设计上让通信双方尽量靠近,减少跳数。第二是统一路径,避免多径导致的时间差。第三是优化协议栈,减少软件层的处理开销。第四是调度层面做感知,把通信密集的任务尽量安排在互联质量好的单元上。第五是压尾延迟,找出长尾请求的来源,针对性优化。
这几个方向里,前两个偏硬件和拓扑设计,后三个偏软件和调度。实际做的时候往往要软硬结合。我自己的经验是,先把拓扑和物理路径理顺,再在软件层做优化,效果最好。反过来先做软件优化,物理瓶颈还在,事倍功半。
6. 一套可复现的评估与优化实操流程
6.1 评估前的准备工作
聊了这么多原理,该上实操了。这一节我给出一套自己常用的评估与优化流程,你可以照着复现。
评估之前,先明确三件事。第一,你的负载特征是什么——是训练还是推理,是计算密集还是通信密集,对时延敏感还是对吞吐敏感。第二,你的规模预期是什么——现在多少卡,未来扩展到多少。第三,你的预算约束是什么——不只是硬件采购成本,还有运维成本、电力成本、人力成本。
这三件事想清楚,评估才有方向。我见过太多人上来就比参数,结果选出来的方案跟自己的实际需求根本不匹配。先想清楚要什么,再看谁能给。
6.2 分阶段压测的具体步骤
准备工作做完,进入压测阶段。我一般分四步走。
第一步,单卡基线测试。先摸清单卡的真实能力,包括计算吞吐、内存带宽、典型算子的性能。这一步是后续对比的基准,不能省。
第二步,多卡扩展测试。从2卡开始,逐步加到4卡、8卡,观察吞吐的扩展曲线。重点看扩展效率——如果加卡后吞吐不是线性增长,甚至下降,说明互联或调度有问题。
第三步,真实负载测试。用你自己的实际模型跑,别用厂商提供的demo。真实负载才能暴露真实问题。这一步重点看端到端时延和吞吐,以及资源利用率。
第四步,长稳测试。连续跑几十个小时,观察性能是否衰减、是否出现偶发故障。稳定性是生产环境的基本要求,短时间跑得好不代表长期可靠。
# 压测流程示意(伪代码,按实际工具替换) # 第一步:单卡基线 run_benchmark --device 0 --model baseline --batch 1 # 第二步:多卡扩展 for n in 2 4 8; do run_benchmark --devices $n --model baseline --batch 1 done # 第三步:真实负载 run_benchmark --devices 8 --model your_model --batch 8 --seq_len 4096 # 第四步:长稳测试 run_benchmark --devices 8 --model your_model --duration 72h6.3 关键指标的采集与解读
压测跑起来之后,关键是采集对的指标,并且会解读。
要采集的核心指标包括:计算利用率、内存带宽利用率、互联带宽利用率、卡间时延分布、端到端吞吐、端到端时延分布。这几个指标里,计算利用率和互联利用率最能说明问题。如果计算利用率低而互联利用率高,说明瓶颈在通信;反之说明瓶颈在计算。
解读指标时,重点看瓶颈在哪。找到瓶颈,优化才有方向。我常用的方法是“逐个排除法”:先把互联优化到不是瓶颈,看性能提升多少;再把内存优化到不是瓶颈,看提升多少;最后看计算。这样能定位出真正的短板。
| 指标 | 健康范围 | 异常表现 | 可能原因 |
|---|---|---|---|
| 计算利用率 | 70%以上 | 低于50% | 通信或内存瓶颈 |
| 互联带宽利用率 | 60%以下 | 接近饱和 | 互联瓶颈 |
| 卡间时延 | 稳定低值 | 波动大 | 拓扑或调度问题 |
| 端到端吞吐 | 接近理论上限 | 远低于预期 | 综合瓶颈 |
6.4 优化迭代的闭环方法
评估完,进入优化阶段。优化不是一次性的,而是闭环迭代。
我的做法是:先定位瓶颈,再针对性优化,然后重新压测验证,看瓶颈是否转移。瓶颈转移是常态——你把通信优化好了,瓶颈可能跑到内存上;内存优化好了,瓶颈可能跑到调度上。每轮迭代解决一个瓶颈,整体性能就上一个台阶。
这个闭环里,最重要的是别凭感觉优化。每一步优化都要有数据支撑,优化前后要有对比。我见过太多人凭直觉调参数,调了半天不知道有没有效果。数据驱动,才能少走弯路。
提示:优化迭代时,每次只改一个变量。同时改多个变量,出了问题你都不知道是哪个引起的。
7. 常见问题与排查技巧实录
7.1 性能不达预期的排查思路
性能不达预期是最常见的问题。我的排查思路是“从外到内,从粗到细”。
先看整体指标,确定瓶颈大类——是计算、内存还是通信。然后进入对应的大类,细分排查。如果是通信瓶颈,再看是带宽不够还是时延太高,是拓扑问题还是调度问题。一层层往下钻,直到找到根因。
这个过程中,性能分析工具是关键。没有工具,你就是盲人摸象。所以选方案时,工具链的成熟度真的不能忽视。
7.2 多卡扩展效率低的典型原因
多卡扩展效率低,我遇到过几种典型原因。
第一种是互联带宽不足,卡间通信成了瓶颈。第二种是拓扑不合理,跳数太多时延高。第三种是调度策略差,任务分配不均导致部分卡空闲。第四种是同步开销大,同步点太多太频繁。第五种是内存瓶颈,多卡之后内存访问冲突加剧。
| 现象 | 可能原因 | 排查方法 | 解决方向 |
|---|---|---|---|
| 加卡后吞吐不增反降 | 互联瓶颈 | 看互联利用率 | 优化拓扑 |
| 扩展效率随卡数递减 | 同步开销大 | 看同步点耗时 | 减少同步 |
| 部分卡利用率低 | 调度不均 | 看各卡利用率 | 优化调度 |
| 时延波动大 | 尾延迟高 | 看时延分布 | 压尾延迟 |
7.3 软件栈相关的坑与绕行方案
软件栈的坑,我踩过不少,这里分享几个典型的。
算子缺失是最常见的。某个模型用到的算子,芯片厂商没实现,你就得自己写,或者找替代方案。框架适配滞后也常见,新版本的框架芯片还没适配,你只能用旧版本。调试工具简陋更让人头疼,出了问题只能靠打印日志,效率极低。
绕行方案方面,算子缺失可以尝试用等价算子组合替代,或者反馈给厂商推动实现。框架适配滞后可以暂时锁定框架版本,等适配跟上再升级。调试工具简陋就只能自己搭一套监控,把关键指标都采集起来。
注意:软件栈的坑,选型阶段就要摸清楚。别等上线了才发现某个关键算子没有,那时候就被动了。
7.4 时延优化的实战技巧
时延优化这块,分享几个我实测有效的技巧。
第一,把通信密集的层放在一起,减少跨节点通信。第二,用流水线掩盖时延,让计算和通信重叠起来。第三,减少同步点,能异步的地方尽量异步。第四,压尾延迟,找出长尾请求的来源重点优化。第五,监控时延分布,别只看平均值。
这几个技巧里,流水线掩盖时延效果最明显,但实现难度也最高。减少同步点相对容易,收益也不错。实际做的时候可以按难度和收益排个优先级,先做容易见效的。
8. 我对这件事的个人体会
写了这么多,最后聊点个人感受。我从最早只看算力数字,到现在看系统、看全栈、看时延,这个认知转变花了好几年,也交了不少学费。最大的体会是:AI芯片的竞争,早就不是单点参数的竞争,而是系统能力的竞争。
算力重要吗?重要,它是入场券。但只有算力,就像只有发动机没有传动系统的车,跑不起来。超节点解决的是互联和拓扑,全栈解决的是软件和工具,时延解决的是同步和效率。这几件事协同好了,算力才能真正兑现。
如果你正在做选型或者优化,我的建议是:别被标称算力迷惑,多跑真实负载,多看实际利用率,多关注软件栈和时延。这些才是决定一套方案能不能用的关键。踩过的坑告诉我,纸面参数和实际体验之间,往往隔着一整个软件栈的距离。
后续如果大家感兴趣,我还可以聊聊具体某个负载的调优案例,或者不同拓扑在实际任务里的对比。这些内容展开讲,又是一大篇。