【AI】LLM的芯片硬件视角
内存带宽是王道 : 对于追求低延迟、高吞吐量的LLM推理芯片(特别是用于聊天、实时翻译等场景),提升内存带宽(如采用更先进的HBM、增加带宽)比单纯堆砌计算单元(如MAC阵列)可能带来更显著的性能收益。大容量内存是基础 : 模型本身和不断增长的KV Cache都需要巨大的内存。设计时必须考虑如何支持足够大且快速的内存,否则会严重限制模型能处理的上下文长度。
推理时,资源消耗是怎样的,特别是QKV矩阵的处理、内存占用以及性能瓶颈。
1. 设定一个具体场景
为了让说明更清晰,我们先设定一个典型的LLM和硬件环境:
- LLM模型 : 一个拥有70亿(7B)参数的中等规模模型。
- 数据类型: FP16 (半精度浮点数,每个参数占2个字节)。
- 隐藏层维度 ( d_model ): 4096。
- 层数 ( n_layers ): 32层。
- 注意力头 ( n_heads ): 32个。
- 硬件 : 一块典型的AI加速卡(如GPU)。
- 片外内存 (Off-chip Memory) : HBM (高带宽内存),容量为24 GB,带宽为 900 GB/s。
- 片上内存 (On-chip Memory) : SRAM,速度极快但容量很小,例如几MB。
2. 资源消耗分解
LLM推理时的内存消耗主要分为两大部分: 模型权重 和 激活值(KV Cache) 。
a. 模型权重 (静态)
这是模型固有的大小,在推理期间保持不变。
- 存储位置 : 在推理开始时,所有模型权重从主存(如硬盘)加载到AI加速卡的HBM中。因为权重数据量巨大(GB级别),远超SRAM的容量,所以它们常驻于HBM。
- 容量计算 :
- 70亿参数 x 2字节/参数 = 140亿字节 ≈ 14 GB 。
- 这14GB包括了所有Transformer层中的Q、K、V投影矩阵( Wq , Wk , Wv )、输出投影矩阵( Wo )、前馈网络(FFN)层的权重、词嵌入矩阵等。
结论 : 仅模型权重就需要14GB的HBM,这解释了为什么大模型需要高显存的GPU。
b. KV Cache (动态)
这是理解推理瓶颈的关键。在自回归生成(即逐字生成)的模式下,为了避免重复计算,模型需要将已经计算过的前面所有token的**Key (K) 和 Value (V)**向量存储起来。这个存储区域就是KV Cache。
- 存储位置 : KV Cache也存储在HBM中。它的特点是随着生成文本的增长而动态变大。
- 何时存入 : 在处理输入提示(Prompt)或生成每一个新token时,模型会计算当前token的K和V向量,然后将它们 追加 到HBM中的KV Cache里。
- 容量计算 :
- 每一层、每一个token都需要存储一个K向量和一个V向量。
- 每个向量的维度是 d_model (4096)。
- 所以,对于一个长度为 seq_len 的序列,KV Cache的大小为: size = seq_len × n_layers × 2 (K和V) × d_model × 2 (FP16字节)
- 我们来算一下在不同序列长度下的占用:
- 当序列长度为2048时 : 2048 × 32 × 2 × 4096 × 2 ≈ 1.07 GB
- 当序列长度为8192时 : 8192 × 32 × 2 × 4096 × 2 ≈ 4.29 GB
结论 : KV Cache的大小与序列长度成正比。对于长文本应用,KV Cache会占据大量内存,甚至超过模型权重本身,成为内存容量的瓶颈。一个24GB的HBM,在放下14GB权重后,留给KV Cache和其他开销的只有约10GB,这直接限制了模型能处理的最大序列长度。
3. QKV矩阵的存取与运算流程
现在我们来回答最核心的问题:QKV矩阵如何存取和运算,以及瓶颈在哪里。LLM的推理过程可以分为两个阶段:
阶段一:Prefill (提示处理阶段)
这个阶段是并行处理输入的整个提示(Prompt)。
-
数据流 :
- 模型的 Wq , Wk , Wv 等权重矩阵从HBM中被读取到计算单元附近的SRAM中(如果SRAM能放得下的话,通常是分块读取)。
- 输入的整个Prompt(比如500个token)的嵌入向量形成一个大矩阵( 500 x 4096 )。
- 执行 矩阵-矩阵乘法 ,一次性计算出所有500个token的Q, K, V向量。
- 计算出的K和V向量( 500 x 32层 x 2 x 4096 )被 写回 到HBM中,形成了初始的KV Cache。
-
性能瓶颈 :
- 这个阶段的特点是计算量巨大(大规模的矩阵乘法),计算/访存比很高。
- 因此,这个阶段通常是 计算密集型 (Compute-Bound) 。瓶颈在于芯片的原始计算能力(FLOPS)。 阶段二:Decoding (解码生成阶段)
这个阶段是逐个生成新token,是典型的流式应用场景(如聊天机器人)。
-
数据流 (以生成第501个token为例) :
- 模型只处理第501个token,输入是一个小向量( 1 x 4096 )。
- 执行 矩阵-向量乘法 ,计算出这个新token的Q向量。
- 关键步骤 : 为了计算注意力,这个新的Q向量需要和 之前所有500个token 的K向量进行计算。为此,整个KV Cache( 500 x 32层 x … )必须从HBM中 全部读取 到片上。
- 计算完成后,得到新的注意力结果,并最终生成第501个token。
- 同时,为第501个token新计算出的K和V向量被 追加 到HBM的KV Cache中,使其增长到501个token的长度。
-
性能瓶颈 :
- 在这个阶段,每次只生成一个token,涉及的计算主要是矩阵-向量乘法,计算量相对较小。
- 但是,每生成一个token,都必须完整地读一遍不断增长的KV Cache。当序列变长时(例如几千个token),从HBM读取KV Cache所需的时间远远超过了计算本身的时间。
- 计算/访存比非常低。
- 因此,这个阶段是 访存密集型 (Memory-Bandwidth-Bound) 。瓶颈在于 HBM的带宽 。
总结与对芯片设计的启示

给芯片工程师的启示 :
- 内存带宽是王道 : 对于追求低延迟、高吞吐量的LLM推理芯片(特别是用于聊天、实时翻译等场景),提升内存带宽(如采用更先进的HBM、增加带宽)比单纯堆砌计算单元(如MAC阵列)可能带来更显著的性能收益。
- 大容量内存是基础 : 模型本身和不断增长的KV Cache都需要巨大的内存。设计时必须考虑如何支持足够大且快速的内存,否则会严重限制模型能处理的上下文长度。
- SRAM的重要性 : 尽可能增大片上SRAM的容量,如果能将更多的KV Cache(尤其是最常访问的部分)缓存在SRAM中,将极大缓解HBM的带宽压力,是重要的优化方向。
- 数据流和调度 : 芯片设计需要考虑如何高效地分块(Tiling)和调度数据流,以最大化数据复用,减少对HBM的重复访问。例如,在解码阶段,如何组织计算以优化KV Cache的读取是关键。
总而言之,LLM推理时,硬件资源消耗是动态变化的。处理长上下文时,内存容量和带宽往往比纯粹的计算速度更先成为系统的天花板。
更多推荐


所有评论(0)