算力增长与内存带宽的错位
过去二十年间,单芯片的计算能力实现了惊人的飞跃。数据显示,计算能力提升约 6,000 倍。然而,这种算力的爆发并未直接转化为工作负载速度的同等增长。工程师在分析性能时经常发现,尽管芯片算力翻倍,但实际工作负载的性能提升微乎其微。这是因为现代芯片大部分时间处于空闲状态,正在等待从内存中获取数据。这种计算能力与数据传输速度之间的巨大差距被称为“内存墙”(Memory Wall)。
"Over the past two decades, the compute capabilities of single chips have grown about 6,000 times. You would expect that workloads would be six times as fast, but this is not the case."(在过去的二十年里,单芯片的计算能力增长了约6000倍。你会期望工作负载的速度也快六倍,但事实并非如此。)
这种错位对于构建、训练或部署模型的企业至关重要。它解释了为什么芯片算力翻倍并不总能带来两倍的性能提升。同时,它也揭示了不同工作负载对批处理(Batching)策略反应的差异:有些场景下批处理能显著提升性能,而在另一些场景中则无效。理解这一机制是优化AI加速器和模型部署的基础。
计算与带宽的增长轨迹对比
为了量化这一现象,我们需要观察两个关键指标在2006年至2026年期间的增长曲线。首先是计算能力(Compute),通常以每秒浮点运算次数(FLOPS)衡量。在2006年初,视频GPU的计算能力仅为数千亿次运算/秒。而到了2025年,NVIDIA B200芯片的计算能力达到了约 2,000万亿次(即2 Petaflops)运算/秒。这表明计算能力实现了约 6,500倍 的增长。
与此同时,另一个关键指标是内存带宽(Memory Bandwidth),以每秒字节数(Bytes/sec)衡量。与计算能力的指数级增长相比,内存带宽的增长要缓慢得多。两者之间的差距不仅存在,而且随着时间推移正在不断扩大。目前,计算能力与内存带宽之间的缺口约为 7倍。这个不断扩大的鸿沟正是“内存墙”的核心定义:更快的芯片并不意味着更快的工作负载,前提是数据无法以所需的速度喂给芯片。
"The gap that you see between these two is actually keeps widening. So, and this gap is what we call the memory wall."(你看到的这两者之间的差距实际上在不断扩大。这个差距就是我们所说的内存墙。)
算术强度与Roofline模型解析
要理解性能瓶颈,必须引入算术强度(Arithmetic Intensity)这一概念。它定义为每移动一个单位字节数据所执行的数学运算次数,即 FLOPS/Byte。根据算术强度的不同,工作负载分为两种模式:
- 计算受限(Compute Bound):如果每个字节能执行大量运算,工作负载处于此模式。此时增加算力可提升性能。
- 内存受限(Memory Bound):如果每个字节执行的运算很少,工作负载处于此模式。此时瓶颈在于数据传输速度。
为了可视化这一关系,我们使用Roofline模型。该模型的X轴为算术强度(FLOPS/Byte),Y轴为可达到的带宽(FLOPS/sec)。图中包含两条关键界限: - 内存带宽上限:由硬件物理限制决定的最大数据传输速率。 - 峰值计算能力(Peak Compute):芯片每秒能执行的最大运算次数。
这两条线相交于一点,称为屋顶点(Ridge Point)。对于NVIDIA B200 GPU: - 峰值计算能力:约 2.25 Petaflops/sec(单卡,BF16精度)。 - 内存带宽:8 Terabytes/sec。
通过计算得出B200的屋顶点值为 281 FLOPS/Byte(即 2.25 Petaflops / 8 TeraBytes)。注意,官方规格常标注36 Petaflops,但那是针对8卡集群且涉及稀疏计算的数据,单卡需除以8得到约2.25 Petaflops。
"If my arithmetic intensity is greater than the ridge point, in this case the 281 number, I am compute bound."(如果我的算术强度大于屋顶点,即这里的281这个数值,我就处于计算受限模式。)
LLM解码与预填充阶段的性能差异
Roofline模型能精准定位具体工作负载的瓶颈。以大型语言模型(LLM)的两个核心阶段为例:
1. 解码阶段(Decode Stage) 在自回归生成中,每次仅生成一个Token。模型需要从内存读取大量权重数据来执行单次推理。其算术强度极低,约为 1 FLOPS/Byte。由于 1 < 281(B200的屋顶点),解码阶段处于严重的内存受限模式。这意味着,即使向该工作负载投入更多算力芯片,性能也不会显著提升,因为瓶颈在于数据无法及时从内存传输到计算单元。
2. 预填充阶段(Prefill Stage) 在提示词处理中,模型执行大规模GEMM操作。此时算术强度超过 1,000 FLOPS/Byte。由于 1,000 > 281,预填充阶段处于计算受限模式。此时增加算力或优化算法能直接带来性能提升。
"In the decode stage... The arithmetic intensity of the decode is usually in this regime, far left to the ridge point. And that places me... in the memory bound regime."(在解码阶段……算术强度通常处于这个区间,远在屋顶点左侧。这使得我……处于内存受限模式。)
批处理优化与架构设计启示
针对解码阶段的内存受限问题,批处理(Batching)成为关键优化手段。其核心逻辑是:通过同时服务多个请求,复用已加载到内存中的权重数据。虽然每次生成的Token数量不变(算术强度看似未变),但通过并行处理,在相同的内存传输开销下执行了更多的数学运算。这有效地提高了整体算术强度,使其更接近屋顶点,从而提升吞吐量。
这就是为什么成熟的LLM推理框架如 vLLM、SGLang 和 TensorRT-LLM 都采用批处理和连续批处理技术。它们并非改变硬件,而是通过调整工作负载特性来适应现有的内存墙限制。
"Batching... helps basically move your arithmetic intensity, increases the arithmetic intensity and moves it closer to the ridge point."(批处理……基本上帮助移动你的算术强度,增加算术强度并使其更接近屋顶点。)
这一分析表明,硬件保持不变时,改变工作负载特性(如使用批处理)是突破性能瓶颈的有效途径。工程师在优化前,应首先估算工作负载的算术强度,并对照硬件规格中的峰值内存带宽和计算能力,确定优化方向:是提升数据传输速度(如使用HBM、近存计算),还是增加算力。
结论
视频的核心论点在于揭示“内存墙”是限制AI工作负载性能提升的根本瓶颈。尽管芯片算力在过去二十年增长了约6,000倍,但内存带宽增长缓慢,导致两者间存在巨大缺口。通过Roofline模型和算术强度(FLOPS/Byte)的分析,我们可以明确区分工作负载是处于“计算受限”还是“内存受限”。
具体到LLM,解码阶段因算术强度低(~1 FLOPS/Byte)而受限于内存带宽,单纯堆砌算力无效;而预填充阶段因算术强度高(>1,000 FLOPS/Byte)则受限于计算能力。因此,批处理技术通过复用内存数据提高算术强度,成为优化解码阶段性能的关键。理解这一机制有助于工程师在基准测试前预判瓶颈,并针对性地选择优化策略(如改进内存架构或调整工作负载调度),而非盲目追求更高算力的芯片。