最近行业里有两件事放在一起看特别有意思:一家存储芯片头部厂商交出了单季542亿美元的财报,数字亮眼到不像传统半导体周期里该出现的;另一家则是由某搜索巨头母公司开源了一套代号AX的底层AI技术栈。表面上一个在卖硬件,一个在捐软件,赛道也不重,但你把这两件事放在同一张桌上,会发现它们恰好从两端戳中了AI基础设施的瓶颈:一端是物理硬件的供给吃紧,另一端是软件工程化的效率塌方。
这篇文章就是沿着这两条线展开的。我会先拆解两个信号背后的行业逻辑,再分别讲硬件层和软件层的瓶颈具体卡在哪里,接着聊聊两层瓶颈怎么互相放大,最后把我在实际项目中遇到过的、和这两类瓶颈直接相关的排查经验整理出来。适合正在做AI训练推理平台、大模型落地,或者准备卡位AI基础设施这个方向的开发者参考,看完能对你手头系统的瓶颈定位有一个更具体的判断框架。
1. 两则行业信号,拼出一张瓶颈地图
1.1 存储大厂的财报,暴露了算力的“喂饭速度”问题
存储芯片头部厂商一季营收冲到542亿美元,这不是普通的内存涨价周期能解释的。核心驱动力就一个:AI硬件对存储的需求已经从“够用”变成了“饥渴”。GPU的算力翻倍速度远远快于显存带宽和容量的爬升速度,训练一个大模型,计算单元大部分时间都在等数据从显存、内存或者远端存储里搬过来。业界把这叫存储墙,通俗一点说,就是CPU/GPU饿了,但食堂上菜的速度跟不上。
这个542亿美元的体量,说明下游为了绕过存储墙,正在不惜成本地囤HBM高带宽内存、加大系统内存容量、部署全闪存存储。我接触过的一些训练集群,计算节点的内存已经从单条32GB换到64GB甚至128GB,存储节点动不动就是PB级全闪阵列。大家嘴上说的是为了跑更多数据,本质都是在给算力等饭吃的间隙抢时间。
1.2 大厂开源底层技术栈,说明竞争已经烧到了工程层
另一条线,某头部科技公司把代号AX的内部AI技术栈开源出来。这事的信号意义比代码本身大。过去几年大模型竞争的主战场在模型架构和训练技巧,但到了今天,各家手里的模型结构已经拉不开差距,真正决定落地速度的反而是底层工具链:编译器怎么把算子优化到位、分布式运行时怎么在千卡集群上稳定跑、调试和性能剖析工具好不好用。
把这一层开源,等于默认了“AI基础设施的下一阶段是生态战”。硬件能力再强,如果软件层不能让开发者把每一份算力都用干净,最终跑出来的效果就要打折扣。AX这个动作,本质上是把厂商自己验证过的工程能力拿出来当作公共资源,让生态里的其他玩家站在同一个更好的基线上往前跑。
1.3 所谓“两层瓶颈”,到底指什么
把两个事件放一起看,AI基础设施的瓶颈其实分布在两个层面上:
- 第一层是物理供给层:存储带宽、互连带宽、功耗散热、产能供应。这一层的特征是硬约束,靠写代码解决不了,必须靠硬件迭代和资源投入。
- 第二层是软件工程层:算子实现、编译优化、分布式并行、部署推理、可观测性。这一层的特征是软约束,硬件买了、炉子搭了,但能不能把炉子的热效率用好,全看软件。
这两层常常被混在一起讨论,但它们的变化节奏完全不同。硬件层的瓶颈按年迭代,软件层的瓶颈则可以靠工程优化在几个月内缓解。认清自己当前卡在哪一层,比盲目堆配置更关键。
2. 物理层瓶颈:存储、互联与功耗的硬约束
2.1 存储墙:显存带宽决定训练吞吐的天花板
先看存储。现在训练大模型的标配是HBM系显存,但HBM的产能就那么多,价格被市场抬得很高。这个存储芯片厂商542亿美元的财报里,大头就是HBM和服务器内存。厂商赚得越多,说明AI硬件越缺这东西,也说明带宽已经成了算力的计价单位。
为什么带宽这么关键?训练过程里每个算子的核心逻辑都是把数据读进来、算完、写回去。算子本身的计算时间可能只有几微秒,但数据搬运时间可能占到几十微秒。整个训练步骤的耗时就由“搬运+计算”共同决定。如果计算单元算得再快,数据过不来,核心也只能空转。
举一个实际数字。一个7B模型用FP16混合精度训练,激活值加梯度的单次吞吐大概是几十GB的量级。在PCIe 5.0 x16的理论带宽下,搬运这些数据就需要几秒。所以大家宁愿把所有张量都塞进显存,靠HBM那数TB/s的带宽撑场面,也不想动辄把数据经过CPU内存绕一圈。显存容量一旦不够,被迫做张量卸载或者重计算,训练速度立刻断崖式下跌。
2.2 互联墙:多卡协作时,通信延迟会吃掉加速比
存储之外,卡与卡之间的通信也是一个悄无声息的瓶颈。单卡训练早就喂不动大模型了,所以有了数据并行、张量并行、流水线并行等分布式策略。但无论哪种并行,训练过程中都要频繁同步梯度或者中间激活值。这个同步动作走的网络路径,决定了一个集群在卡数翻倍时,能不能真的获得接近翻倍的算力。
现实中多卡效果远达不到线性扩展。我从实际调优中得到过一个经验:一个8卡节点内用高速互连,通信成本还可以接受;但跨节点走以太网,每一步训练的通信时间可能从毫秒级涨到几十毫秒。当通信时间占比超过30%后,加机器已经不再显著加速,反而会把整体稳定性拖下来。
道理可以用生活场景类比:四个厨师合作做一道菜,如果切菜的人每切一刀都要和其他人开个会同步进度,最后做菜的速度大概率还不如一个厨师闷头干。多卡训练同理——同步机制越重,协作成本越高,集体效率反而下降。
2.3 功耗墙:性能往上涨,散热先扛不住
硬件层还有一个容易被低估的瓶颈:供电和散热。AI芯片的TDP已经普遍到了几百瓦,一台训练节点的功耗轻松超过3000W。传统风冷在这个密度下已经逼近极限,液冷方案正在从可选变成必选。
我自己最开始搭建训练服务器的时候对散热预算没概念,结果机房空调功率配小了,夏天高温直接触发硬件降频,训练任务速度掉了一截。后来换了液冷机柜并把机房空调余量配到1.5倍,才把性能稳定下来。这个经验就是:硬件采购不是只看算力指标,功耗和散热预算要跟算力一起算进去,否则设备在降频状态下跑,等于花全款买了个低频版。
存储芯片厂商财报里的利润暴涨,一部分也来自功耗敏感的AI数据中心愿意为高能效的低功耗存储芯片支付溢价。功耗是基础设施的长期成本项,省下来的每一瓦都是在给训练预算续命。
3. 软件层瓶颈:从算子到集群的工程鸿沟
3.1 算子层:手写融合Kernel,性能差距可能超过一个数量级
第二层瓶颈不在硬件而在代码。现在主流深度学习框架能让开发者用Python写模型,但这个方便是牺牲性能换来的。框架底层每个算子都要启动一次kernel,而kernel启动本身有固定开销,算子越碎,启动开销占比越高。
业界标准的解法是算子融合:把多个连续操作合成一个kernel,一次性启动完成,减少中间张量的读写和kernel启动次数。比如将“矩阵乘+激活函数+Dropout”融合成一个算子,显存访问量能减少一半以上。
实际项目中我见过一个真实案例,某个推荐模型训练脚本直接按教科书写法硬跑,batch size调满也跑不满GPU利用率。后来用profiler定位问题,发现大部分时间是花在小算子的启动和通信上。把关键路径上的十几个算子手工融合成五个之后,同样的GPU利用率从40%出头涨到了85%以上。这个差距就是软件工程能力的体现,也是AX这类底层技术栈要解决的问题。
3.2 分布式层:并行策略与通信重叠的复杂度被严重低估
单卡优化搞定之后,多卡分布式训练是一个更大的坑。数据并行其实算简单的,难的是模型太大,一张卡放不下,必须做张量并行和流水线并行。这时候你面临的不只是切分模型那么简单,还涉及通信拓扑、显存负载均衡、计算通信重叠等一系列问题。
我见过很多团队第一次跑千卡集群训练,代码不加任何分布式优化直接上,结果通信时间占了40%以上。后面通过引入通信计算重叠,把梯度通信放在下一层前向计算的间隙里执行,训练速度才提了近一倍。这个优化思路简单来说就是:把等待通信的时间用计算填上,让通信和计算像两条并行流淌的河流,而不是一前一后排队过闸。
分布式训练的复杂度还体现在调参上:并行切分的份数、通信的batch size、梯度的压缩比例,每一个参数都影响整体效率。很多团队在这里投入的时间远超他们当初的预期,这也是为什么大厂开源的训练框架和运行时组件这么受关注——它们把大量分布式工程经验打包成了现成的组件。
3.3 部署层:训练好了不等于服务端能扛住
训练端的瓶颈解决了,部署端还有自己的问题。这里最典型的是显存不够用:训练好的大模型动不动几十GB甚至上百GB,推理服务要扛并发,显存立刻捉襟见肘。于是有了量化、蒸馏、剪枝、KV Cache优化等一系列手段。
以量化为例,把模型权重从FP16压缩到INT8,理论上显存占用减半,推理速度还能提升。但量化不是简单调个参数就行,每层对量化的敏感度不一样,混合精度量化方案的选择直接决定上线后的效果。还有推理时的显存管理,连续批处理和PagedAttention这类技术,直接把显存利用效率抬上了一个台阶。
这一层是“最后一公里”,也是用户真正感知体验的地方。很多项目训练很顺,一上线就被推理延迟打回原形,根源往往是只关注了模型的训练性能,没有给推理服务做一个系统性的性能压测和优化。
4. 两层瓶颈的交叉放大效应
4.1 存储受限时,有哪些软件手段能“软硬兼施”
前面讲硬件瓶颈很多人会有一个误区,觉得既然是物理限制,软件就束手无策了。现实不是这样。当显存带宽不足时,软件优化能做的事情非常多。
第一个手段是减少中间张量落地。一个网络层的前向输出不用马上写回显存,可以直接在寄存器里参与下一步运算,或者跟下一步算子融合。第二个手段是重计算,不求一次性把所有中间结果都存住,反向传播的时候再用算力换时间重新算一遍。第三个手段是把部分不敏感的层切成低精度,减少数据搬运量。三个手段叠加,能在不换硬件的情况下把训练速度提升20%到50%。
这些做法说白了就是用算法和工程的巧劲,去绕过物理层的硬限制。但要注意,软件优化也有自己的天花板,一旦数据搬运压到不能再压,瓶颈还是会回到硬件上。所以好的基础设施设计要两手抓:既要实时监控硬件指标,也要把软件优化能力沉淀成工具链。
4.2 软件低效时,再贵的硬件也会被白白浪费
反过来看,软件层的时间浪费对硬件的消耗更隐蔽。GPU利用率低、通信等待时间长、kernel启动过于频繁,每一样都让昂贵硬件在空转。空转的时候,功耗一分不少,算力一分没用到,这是基础设施最大的隐性浪费。
我在一个模拟项目里见过某团队把最新型号的AI加速卡插进机柜,跑了一个经典Transformer模型,结果GPU利用率只有30%出头。最后定位问题,既不是存储带宽不够,也不是互联带宽不够,而是他们的训练脚本跑在单进程上,完全没有利用多卡并行。加装四张卡之后利用率反而更低了,因为通信同步开销直接拖垮了性能。直到重构为数据并行并加上梯度累积,性能才真正提升。
这个例子说明,硬件和软件必须匹配才能发挥价值。单独看任何一项指标都是健康的,组合在一起却可能系统性低效。判断基础设施瓶颈,不能只看单点,要看整个链路的协同情况。
4.3 AX开源的解法方向:把底层能力开放出来,降低工程门槛
再看AX开源这件事,它隐含的思路恰好针对上面的交叉放大效应:把底层硬件控制能力和工具链一起开源,让上层开发者可以更直接地驾驭硬件,而不是在框架的抽象后面隔着一层又一层。
开源的价值不在于代码本身,而在于降低门槛。大厂自己训练千卡集群积累的调度、通信、容错经验,通过开源变成公共财产以后,中小团队就不需要从零踩坑。这对整个行业的软件层瓶颈是一个正向缓解:硬件规格短期不会突飞猛进,但同样的硬件,能被更多人用出更高的效率。
我个人的判断是,这种“硬件+开源软件”的组合拳会成为头部玩家锁住生态的常规操作。毕竟单卖硬件的时代已经过去了,未来的基础设施竞争,比的是谁能让开发者在最短时间内把算力用足,谁就掌握了定义标准的机会。
5. 实操中踩过的坑与关键瓶颈定位思路
5.1 显存明明够用,训练还是很慢,优先怀疑存储带宽
我经常遇到的情况是:设备管理里看显存占用率不到70%,但训练吞吐就是提不上去。这时候很多人会继续调高batch size,结果只是把显存塞得更满,速度变化微乎其微。
正确的做法是先跑一轮性能剖析,重点看kernel执行时间和数据搬运时间。如果数据搬运时间占比偏高,说明瓶颈在存储带宽而不是显存容量。此时该做的是算子融合和减少中间张量,而不是无脑堆batch size。
5.2 多卡扩展时加速比不理想,优先分析通信拓扑
加了两倍卡,速度只提升了1.2倍,这是分布式训练最常见的失望时刻。遇到这种情况,先别看单卡算力,去看通信时间。用一个简单的打点工具把每一步的通信耗时单独打印出来,如果这个数字随卡数增长明显变大,瓶颈就在互联拓扑。
我之前调一个8卡任务,发现加速比只有1.5倍,直接查通信,发现默认走了以太网回环,绕了一大圈。手动指定了高速互连路径,通信耗时降了七成,加速比立刻升到接近5倍。多卡任务里,通信路径的配置细节往往比模型结构改动更影响最终效率。
5.3 开源项目装好了却跑不起来,先排查编译工具链和驱动版本
拿到AX这类开源代码,第一跑失败是最常见的事。很多失败根本不是代码问题,而是依赖环境不匹配。常见的坑包括:CUDA版本太旧、编译好的算子库与本地GPU架构不匹配、Python包版本冲突。
我的习惯是先在干净的容器环境里装一遍,把所有依赖版本固定下来,再跑官方测试用例。如果官方用例通过,基本可以确定问题出在你自己的数据和配置上;如果官方用例也挂了,优先检查驱动和加速库版本。排查逻辑要有顺序,别一上来就怀疑算法逻辑。
5.4 一个快速自查清单
| 现象 | 优先排查方向 | 常用手段 |
|---|---|---|
| GPU利用率低但显存充足 | kernel启动开销、算子碎片化 | 算子融合、提升batch size到带宽饱合 |
| 多卡加速比不随卡数线性增长 | 通信拓扑、同步开销 | 指定高速互连、通信计算重叠 |
| 训练吞吐不如预期 | 存储带宽、数据加载管线 | 减少中间张量、异步数据加载 |
| 推理延迟超标 | 显存带宽、量化策略、批处理大小 | KV Cache优化、动态批处理、量化 |
| 开源代码跑不通 | 依赖环境、编译器版本、驱动 | 干净容器固定版本、官方用例验证 |
要提醒一句的是,这个清单只是排查的起点,不是万能药。每个系统都有自己的特殊负载特征,排查瓶颈必须以实测数据为准,不要凭感觉猜。
5.5 关于瓶颈定位,我的一个实用方法论
最后分享一个我在多个项目里验证过的方法论:先做端到端打点,再逐层缩小范围。也就是先记录一个完整训练步或一次推理的全部时间,拆成计算、通信、数据加载、kernel启动几个大块,找到占比最大的部分;再对占比最大的部分做细分,定位到具体算子或具体通信原语。这个“先整体后局部”的方式比一上来就盯着某个指标瞎调要高效得多。
我在实际使用中发现,很多人排查瓶颈失败,不是能力不够,而是从一开始就问错了问题。比如还没确认是不是数据加载问题,就开始调GPU参数,花了大半天毫无进展。如果你从完整链路开始拆,往往半小时就能锁定真正的瓶颈层。
科技行业里很多热点来得快去得也快,但存储大厂财报和开源底层项目背后的信号是一致的:AI基础设施的竞赛已经从前端的模型创新,转向了后端的工程效率。硬件层的存储、互联、功耗三重墙,叠加软件层的算子、分布式、部署三重坎,构成了当前AI从实验室走向规模化落地的真实阻力。我个人在处理基础设施问题时最深的体会是,别把注意力全放在堆硬件上,也别全寄托于某个大厂的开源魔法。回到负载本身,用数据找出自己系统真正的瓶颈点,才是效率最高的一条路。这个思路,放到两个多月后再回看这两条新闻,依然不会过时。