ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SRAM与HBM:AI推理内存墙下的分工、博弈与优化实践

SRAM与HBM:AI推理内存墙下的分工、博弈与优化实践 SRAM和HBM一个藏在芯片内部当快手一个堆在封装旁边当容量担当。AI推理跑起来以后它们俩的“博弈”实际上每天都在每个数据中心的机箱里上演——你调的batch size、模型量化、KV Cache策略最后都会变成这两个存储技术之间的平衡问题。这篇文章会从原理、实测数据到部署经验一次性把SRAM和HBM在AI推理里的分工与博弈逻辑讲透。适合做大模型服务优化、GPU算力选型以及对底层芯片架构感兴趣的工程师参考。先说结论SRAM和HBM不是二选一的关系它们是同一个访存层次结构里的上下级。真正值得博弈的不是“谁取代谁”而是“缓存该做多大、HBM该上多宽两者怎么配合才能把token吞吐拉到最高”。下面我把背后的技术逻辑一层层拆开。1. 为什么AI推理会被内存卡脖子先看现象。跑大模型推理的时候GPU利用率经常不低但如果你用工具盯一下HBM带宽利用率会发现很多场景下几乎压在90%以上而计算单元反而在等数据。这就是典型的“内存墙”问题计算吃得太快存储供给跟不上。LLM推理分为两个阶段prefill阶段要并行处理整段prompt计算强度高decode阶段一个token一个token往外蹦每次生成都要把模型的全部权重从头到尾读一遍。读权重这个动作是纯访存操作计算量相对很小所以decode几乎就是内存带宽的游戏。模型越大这个压力越明显。以70B模型为例BF16精度下权重就有140GB一次decode就要从HBM里搬140GB出来。如果目标吞吐是20 tokens/s每秒就要读2.8TB字节。这个数字已经逼近单张H100的3.35TB/s理论带宽如果再跑并发请求带宽马上成为瓶颈。所以AI推理的内存问题不是“够不够用”这么简单而是容量、带宽、延迟三个维度同时在卡你。2. 重新认识SRAM和HBM一个快而贵一个大而猛2.1 SRAM片上缓存里的“闪电侠”SRAM全称是Static Random Access Memory静态随机存取存储器。它的每个bit用6个晶体管组成触发器来锁存状态不需要像DRAM那样周期性地刷新。因为不需要刷新也没有行激活和预充电这些步骤它的访问速度极快能跟上CPU/GPU的计算时钟延迟通常在1纳秒到几纳秒级别。代价是面积和成本。一个SRAM单元要6个晶体管而DRAM只要1个晶体管加1个电容组合同样容量时SRAM芯片面积大得多、贵得多。所以你在芯片规格里看到的SRAM永远是KB到MB级别比如GPU的L1/L2缓存或者专用加速器里的片上内存都在这个量级。现实中不会有人拿SRAM做几十GB的主存那不是技术问题是经济学问题。2.2 HBM堆出来的片外带宽怪兽HBM全称是High Bandwidth Memory高带宽内存。它的本质还是DRAM但走了一条完全不同的路线通过硅通孔TSV把多个DRAM die垂直堆叠起来再用超宽的数据总线连接到底层逻辑die上然后通过封装基板和GPU连在一起。这样做的好处是数据总线可以达到1024bit远高于普通DDR内存的64bit所以带宽成倍增长。HBM颗粒直接贴在GPU芯片旁边走线短延迟也比传统DDR低。HBM3E时代单颗颗粒的带宽能到1TB/s以上多颗堆起来就是3TB/s、8TB/s再加上单颗容量从8GB、16GB一路涨到36GB直接解决了带宽和容量的双需求。代价则是工艺复杂、良率要求高、成本贵这也是HBM一直很紧俏的原因。2.3 对比一个负责瞬时的“手边抽屉”一个负责海量的“仓库”拿做菜来类比。SRAM就是你案板上那个调料盒伸手就能拿到但盒子容量很小HBM是你身后的冷藏库容量大、拿取也快但总归要走几步比案板慢一个数量级。真正的厨师不会把整个冷库塞进案板而是把最常用、最急需的东西放在手边其他放仓库。AI芯片也是这个逻辑SRAM做缓存和临时计算区HBM做整个模型的大本营。维度SRAMHBMDRAM位置片上和计算单元同一颗die片外通常通过2.5D封装和GPU相连延迟纳秒级极快相对高约百纳秒级容量单芯KB到几十MB单卡GB到上百GB带宽片上可非常高但总量有限极高HBM3E可达TB/s级别成本单位容量极贵相对便宜但比DDR贵典型角色L1/L2缓存、共享内存、片上暂存主存、模型权重、KV Cache存放地3. AI推理场景下真正的内存压力来自哪里3.1 权重读取decode阶段绕不开的“全量扫描”大模型推理的decode阶段每生成一个token都要对模型所有层做一次前向计算而每一层的权重都必须从HBM里搬进来。假设一个7B模型BF16权重约14GB70B就是140GB175B就是350GB。哪怕参数量不变单token生成的HBM流量就是一个模型的全身体积。这个特性决定了单张GPU在不做任何优化的情况下decode性能上不去的核心原因是带宽而不是算力。一块A100的HBM带宽大概2TB/s跑70B模型token生成速率理论上限也就14 tokens/s左右实际还要被其他访存开销打折。这也解释了为什么网上很多推理框架在单卡小模型上都能跑几十tokens/s模型一上70B就断崖式下跌——不是GPU变弱了是内存带宽被扛穿。3.2 KV Cache容量压力的另一个大头除了权重Transformer推理还有一个不断增长的内存占用KV Cache。为了让后续token能参考之前的历史信息每一层都要把已经算好的Key和Value缓存下来。这个缓存的大小和上下文长度、batch size、层数、KV注意力头数量成正比。以Llama-2 70B这样规模的模型为例单请求每token的KV Cache开销大约在0.3MB左右。上下文拉长到4K时单请求就要多占1GB以上看起来还好但如果并发32个请求同一个上下文长度KV Cache占用就直接冲到30GB以上。这时候HBM容量是否足够往往比带宽还关键。很多推理系统的OOM或者长上下文崩溃都是KV Cache把显存撑满了。3.3 并发和批处理让瓶颈更加复杂批量推理通常会提升吞吐但代价是HBM容量和带宽同时被放大。batch变成NKV Cache大约也变成N倍而decode时从HBM读取的权重总量不变所以每条请求的带宽利用率上升单请求延迟会略有增加但总吞吐提高。不过内存系统不会让你白嫖这个效率。batch增大会加剧缓存未命中率SRAM覆盖不住更多请求的中间数据HBM带宽上限仍然卡死总吞吐。实际调优时你会发现模型加载进HBM后能支撑多大并发不仅取决于算力还取决于每请求平均占据的HBM流量。这个流量模型不搞明白加并发只会更快撞墙。4. SRAM在推理里的隐藏价值从FlashAttention到算子融合4.1 FlashAttention是SRAM最漂亮的“代言人”Attention机制里需要计算注意力矩阵QK^T对于长度为L的序列这个矩阵大小是L×L。在长上下文场景下这个矩阵在HBM里存进存出会浪费大量带宽。FlashAttention的思路很简单不把整个注意力矩阵落到HBM而是把Q、K、V分块读进SRAM在SRAM里反复算小块的softmax最后再写出结果。效果是让注意力矩阵的中间读写变成了“在SRAM里完成”。以4K序列长度为例注意力矩阵大约是32MB的量级如果不优化它就要在HBM里反复读写用了FlashAttention片外流量减少到原来的几分之一。实测在A100上长序列训练和推理都有明显提速这个收益完全来自SRAM的块级复用能力。这就是“小缓存大作用”的典型。4.2 算子融合把临时数据尽量留在SRAM里传统写法会把一个算子做成一个kernel读数据算完把结果写回HBM下个kernel再读出来。比如QKV投影、Residual、LayerNorm、激活函数这些本来就是连续计算如果中间每一步都回写HBM带宽消耗会翻好几倍。算子融合就是把这一串操作合并到一个kernel里中间结果只存在SRAM/寄存器中。实测中把LayerNorm和残差加法融合进前面的矩阵乘法kernel能减少几十GB/s的HBM流量。对推理引擎来说这个优化有时候带来的速度提升甚至比换一张卡还明显。因为HBM带宽是固定资源每省一次多余读写就等于把带宽预算让给了真正需要的权重读入。4.3 SRAM存内计算边缘侧的另一种玩法如果你关注过端侧AI加速芯片会发现很多低功耗芯片走的是“SRAM为主”的路线——把权重直接存在片上SRAM里甚至让存储单元参与计算即存内计算、CIM。这种方案在几个瓦的功耗预算内能做小规模推理比如语音唤醒、人脸识别、1B以下的端侧模型。代价是SRAM容量上不了大模型而且模拟存内计算存在精度损失数字方案成本高。所以这条路只适合边缘场景服务器端的AI推理主战场仍然是HBM大容量加上SRAM缓存加速的组合。这里没有谁替代谁只有场景倒逼下的技术取舍。5. 为什么不能拿SRAM替代HBM一场“伪博弈”5.1 从成本看同样容量下SRAM贵到没朋友我们做个极限推演如果想把一张A100上的40GB HBM全部换成SRAM相同容量下SRAM的die面积大概是HBM的十倍甚至更多还得全部堆在计算die旁边。这样GPU核心面积会大得离谱功耗、良率、散热全部爆表。HBM之所以能堆栈上容量靠的是DRAM单bit成本低而SRAM单bit面积大、有持续漏电大容量场景根本不划算。芯片工程师设计时会算得要死每多一分SRAM面积都会挤压计算单元的面积导致算力下降每少一分SRAM又会让缓存命中率降低浪费HBM带宽。最后能得到的最优解通常是一个“够用就好”的L1/L2容量加上尽可能宽、尽可能大的HBM。5.2 从延迟看HBM也替代不了缓存反过来用HBM当缓存用也不行。虽然HBM比DDR快但相对SRAM的纳秒级HBM的延迟和刷新过程仍不够快。一个访存请求如果在SRAM命中几个周期就能拿到数据如果miss到HBM几百个周期起步。如果让所有指令都去“远方仓库”取数哪怕仓库再快计算流水线也会被阻塞到怀疑人生。这就是访存层次结构的铁律越靠近计算核心的存储必须越快哪怕容量小越往外才是容量和带宽的天下。SRAM和HBM在物理上分属不同层级所以讨论“替代”本身就是一个伪命题。真正能做的是把SRAM的命中率和HBM的带宽做最大化优化。5.3 缓存命中率才是真正的胜负手既然不能替代那“博弈”在哪里在于你往SRAM里放什么数据。同样一块SRAM放权重、放KV Cache、放中间激活收益完全不同。实测里合理设置预取策略、调整算子分块大小缓存命中率能从60%提到90%以上等价于把HBM带宽需求砍掉一大截。这时候HBM和SRAM协同得越好推理性能越强而不是单一靠某一边。具体实践比如针对固定batch重复使用的权重块可以设计kernel让它留在L2里对于不同算子的中间矩阵控制好tile大小保证SRAM不溢出又不多次回写对长序列注意力像FlashAttention那样分块迭代。这些全是“内存博弈”的真实操作。6. 从Ampere到Blackwell内存层次结构的演进实践6.1 三代GPU的关键内存参数对比看NVIDIA三代主流GPU你能清晰看到HBM容量和带宽的增长路径。A100最高80GB HBM2e带宽约2TB/sL2缓存40MBH100 SXM是80GB HBM3带宽3.35TB/sL2缓存50MBBlackwell B200则把HBM容量推到192GB带宽约8TB/s。每一代都把HBM带宽翻倍式拉高同时增大片上缓存。产品HBM容量HBM类型带宽片上缓存大致A100 80GB80GBHBM2e约2TB/sL2 40MBH100 SXM80GBHBM33.35TB/sL2 50MBB200192GBHBM3e约8TB/s片上缓存继续扩大你会发现HBM总带宽跑得比“单卡必须跑满所有参数”还要快这说明厂商很明白AI推理的带宽需求。同时SRAM侧的L2也在涨因为把常用权重和激活缓存在片上能有效降低对HBM的请求压力。这个演进不是单纯堆料而是在容量、带宽、缓存命中率之间反复找平衡。6.2 为什么架构师在容量和带宽之间反复横跳增加HBM容量最直接的好处是能装下更大的模型和更长的KV Cache。但容量上升往往伴随颗粒数增加带宽总量并不一定线性增长。增加HBM带宽则需要提高堆叠层数或总线频率工艺难度和发热随之上涨。架构师要同时满足训练和推理两种场景训练更看重带宽和算力推理更看重容量和时延稳定性。所以你会看到一些推理专用芯片会刻意把HBM容量做成96GB、128GB而通用GPU选择80GB配更大带宽的路线。没有绝对最优只有针对目标负载的次优解。这也是为什么市面上会有那么多不同的AI芯片流派有的狂堆SRAM支持大模型融合有的走HBM带宽路线有的走量化减重路线核心都是围绕内存系统做文章。6.3 推理优化算法的本质都是“少碰HBM”vLLM的PagedAttention解决的是KV Cache碎片化问题目的是把HBM用得更“密”FlashAttention减少的是注意力的中间读写Flash-Decoding也是同理连续批处理减少的是调度带来的空隙让HBM带宽持续被利用。所有看上去很高级的推理框架优化往内存层面拆解都是在干同一件事减少重复的HBM流量提高每一字节访存的效率。在实机评测里我用同一个模型在相同的H100上跑不同框架优化充分的版本每秒tokens可以比朴素实现高出一倍多而GPU峰值算力利用率几乎没变差距全在内存访问模式上。所以选型的时候别只看显存大小还要看框架怎么操作SRAM和HBM之间移动数据。7. 常见误区与排障经验7.1 误区一SRAM越快越大越好账面看确实如此但实际工程里更大的SRAM意味着更大的面积和功耗。占用面积之后计算核心数量就少了功耗上去散热就压不住。而且当你把缓存容量加到一定程度命中率提升带来的收益会越来越小远不如把那些面积留给计算单元。所以别迷信“缓存越大越牛”关键要看工作集的复用率和kernel的访存模式。如果你在做AI加速器选型或配置正确的做法是看工作负载的实际复用情况。大batch、长序列推理对缓存要求高可能需要更大L2小batch、低并发场景缓存收益有限HBM带宽更重要。7.2 误区二HBM带宽已经够大为什么还要优化访存HBM带宽再大也是有上限的。实测一个70B模型在H100上跑decode随便一个朴素kernel就能让带宽利用率冲到80%以上这时候就算你把核心频率拉高性能也上不去。而FlashAttention这类优化是通过减少总访存量来“腾挪”带宽空间让有限带宽服务更多有效计算。所以不是HBM不够是你的算法让HBM重复搬了太多不需要的数据。在排查性能故障时如果发现HBM带宽跑满而算力利用率偏低第一反应不是换卡而是看数据搬运路径是不是有中间变量来回写是不是注意力矩阵全量落过盘kernel里能不能融合更多算子往往优化几轮之后同样的硬件性能能明显好转。7.3 误区三内存瓶颈只看容量和带宽不看延迟和一致性容量、带宽是宏观数字但实际推理系统还会受到延迟波动的影响。HBM的延迟虽然比DDR低但和SRAM差距依然巨大。延迟一高计算流水线就停摆如果多个kernel串行访存延迟会因为排队被进一步放大。另外多卡并行时数据一致性和NVLink/PCIe传输也是干扰项你对内存系统的控制能力远不止显存数字那么简单。排查经验里有个很典型的坑当你把模型切到多卡会发现单卡访存变少了但卡间通信频繁整体延迟反而变大。这时候要检查是否有过多的KV Cache在卡间传输或者LCI低复杂度策略是否合理。内存问题从来不是单点问题要放到整个访存路径里看。7.4 快速速查三种内存问题怎么定位症状瓶颈点优先检查方向token生成速度低GPU算力利用率不高HBM带宽看HBM带宽利用率尝试FlashAttention/算子融合长上下文时OOM或延迟突然飙升HBM容量计算KV Cache大小启用量化、分页缓存必要时用小模型小batch表现不错大batch吞吐不升反降缓存容量排队检查L2缓存命中率、连续性调度、重组kernel分块这些都是我实际部署推理服务时的默认排查流程比直接换机器省钱得多。8. 部署时我是怎么选内存配置的最后分享一套我自己一直在用的判断方法。拿到一个模型我先估算权重体积和KV Cache的峰值需求。权重按参数量乘以每参数字节注意量化后的差别KV Cache按最大上下文长度和最大并发batch算一个上界然后把两者加起来就是HBM容量的最低线。之后我会算目标吞吐下的带宽需求。比如70B模型用INT8量化后权重约70GB希望跑到30 tokens/s那带宽需求就是2.1TB/s以上。再看硬件HBM规格够不够如果不够要么降吞吐预期要么走张量并行把权重分散到多卡让每卡分到的权重访问量变小。内存协调整合上我会优先开启这些优化FlashAttention是否有兼容版本、KV Cache是否走分页管理、能否把LayerNorm和残差融合进矩阵乘、batch调度之间的软切换是否平滑。这些优化做完再回头测HBM带宽利用率看瓶颈是否从存储侧转移回计算侧。我个人在实际操作中的体会是内存优化没有一步到位的银弹每次调整都是和物理规律讨价还价。只要多花时间看火焰图里占比最大的访存热点再对照HBM流量数据往往比盲目堆硬件见效更快。SRAM和HBM的博弈如果玩明白了同样的卡也能多跑不少业务量这笔账怎么算都不亏。
返回列表