LLM 推理系列(六):内存容量——端侧 AI 的入场券

LLM 内存占用的构成:三大核心部分的量化分析

要理解内存瓶颈,首先需要精确拆解 LLM 在运行时到底消耗了什么。其内存占用主要由三个动态和静态的部分构成,每一部分都有其详细的计算规则。

1. 模型权重(Model Weights)

这是模型最基础、最主要的内存开销,可以理解为模型的”知识库”。其大小由参数量和数据精度(Precision)决定。

  • 数据精度与字节数

    • FP32(单精度浮点):每参数占 4 字节。
    • FP16/BF16(半精度浮点):每参数占 2 字节,是当前推理最常用的格式。
    • INT8(8位整型):每参数占 1 字节(量化后)。
    • INT4(4位整型):每参数占 0.5 字节(量化后)。
  • 计算公式

内存占用(GB)≈ 参数量(十亿)× 单个参数大小(Bytes)

基于此公式,我们可以清晰地看到不同规模模型在加载时对内存的静态需求:

模型规模(参数) FP16(2 Bytes/Param)
7B(70亿) ≈ 14 GB
13B(130亿) ≈ 26 GB

注:为方便估算,此表采用 1GB = 10^9 Bytes 的近似值。

这个静态值直接决定了模型能否被加载进手机的”生死线”。从表中可见,一个未经优化的 7B 模型,仅权重部分就超过了市面上绝大多数手机的内存上限。

2. 激活值(Activations)

在模型进行前向计算(即”思考”过程)时,每一层网络都会产生临时的中间数据。这部分内存占用是动态的,在处理长文本的 Prefill(预填充)阶段会达到峰值。

  • 经验估算法:精确计算激活值内存较为复杂,因为它与具体模型架构和推理引擎实现紧密相关。在工程实践中,一个实用的快速估算法则是,激活值的峰值内存约等于模型权重(FP16)的 25%。对于一个 14GB 的 7B 模型,其激活值峰值约为 3.5GB。

3. KV Cache

这是在 Decoding(解码/逐字生成)阶段为了加速计算而设计的缓存机制。它存储了注意力机制已经计算过的键(Key)和值(Value),避免重复计算。

  • 核心特点:KV Cache 的大小与上下文长度(Sequence Length)成正比,是长对话或长文总结场景下最主要的内存增长点。
  • 精确计算公式
KV Cache 内存(Bytes)≈ 2 × 上下文长度 × 模型层数 × 注意力头个数 × 注意力维度 × 精度(Bytes)

不同模型的具体架构参数不同,导致 KV Cache 大小差异巨大。以一个采用了 GQA 结构优化的现代模型,如 Qwen2-7B(拥有 28 个 Transformer 层,K/V 注意力头为 4 个,每个头的维度为 128)为例,在 FP16 精度下,处理 4096 个 Token 的上下文,其 KV Cache 占用约为:

2 × 4096 × 28 × 4 × 128 × 2 Bytes ≈ 235 MB

综合内存占用分析

现在,我们将一个典型的、未经优化的 7B 模型的 FP16 内存占用进行加总,看看它的峰值需求有多庞大:

内存组成部分 FP16(未优化)
权重内存(静态) ≈ 14.0 GB
激活值内存(动态峰值,估算) ≈ 3.5 GB
KV Cache(4K tokens,典型值) ≈ 2.1 GB
预估总内存峰值 ≈ 19.6 GB

注:KV Cache 大小因模型结构而异,此处采用一个典型非 GQA 优化模型的数值以展示问题的严重性。

结论已经非常清晰:一个未经优化的 7B 模型,其近 20GB 的峰值内存需求,在移动端是绝对无法满足的物理限制。这使得下一章将要讨论的内存优化技术,不再是”可选项”,而是让端侧大模型成为现实的”必需品”。

内存优化技术:在有限容量下实现可能

在物理内存有限的前提下,软件和算法层面的优化是让大模型在端侧运行的关键。这些技术主要围绕内存占用的三个核心部分展开。

1. 权重量化(Weight Quantization)

这是最核心、效果最显著的模型压缩技术。其原理是将高精度(如 FP16)的浮点数权重,转换为低精度(如 INT8 或 INT4)的整数,从而大幅减少模型的存储体积。

  • 技术细节:为保证精度,现代量化方案(如 GPTQ/AWQ)普遍采用分组量化(Grouped Quantization)。即将权重分为多个小组(例如每 32 个或 64 个为一组),并为每个小组计算独立的量化参数(Scale,即比例尺)。
  • 有效比特率(bpw):这也意味着量化后的实际成本会略高于其标称位数。例如,对一个 INT4 量化模型,如果每 32 个权重共享一个 FP16(16 bit)的 Scale,则每个权重的平均占用为 (32 × 4 + 16) / 32 = 4.5 bpw。
  • 优化结果:基于 4.5 bpw 计算,一个原本需要 14GB 的 7B 模型,其权重体积可以被压缩至约 3.7 GB,使其具备了在移动设备上加载的可能性。

2. 激活值优化

主要用于降低处理长序列时产生的瞬时内存峰值,核心思路是”以时间换空间”。

  • 激活重计算(Activation Recomputation):不在内存中保留所有中间层的激活值,而是在需要时通过前向计算从上一个”检查点”重新推导。
  • 分块预填充(Chunk Prefill):将长输入切分成小块,逐块进行计算并填充 KV Cache。每处理完一小块,其对应的激活值内存即可释放,从而避免了巨大的瞬时内存开销。

3. KV Cache 优化

旨在降低长上下文场景下的内存占用。

  • KV Cache 量化:同样可以将 KV Cache 中的数据从 FP16 量化至 INT8,直接将其内存占用降低 50%。
  • 模型结构优化(GQA):分组查询注意力(Grouped-Query Attention, GQA)是目前主流的优化结构。它通过让多组”注意力头”共享同一套 K 和 V 缓存,在大幅降低 KV Cache 内存占用的同时,实现了性能和效果的最佳平衡。

4. 混合存储方案

当上述优化仍无法满足需求时,最后的手段是利用速度较慢但容量巨大的闪存。

  • 内存卸载(Offloading):将当前不活跃的模型层(比如 Embedding 层)或较早的 KV Cache 从 RAM 中转移到闪存,需要时再加载回来。这是一种以牺牲响应速度(延迟)为代价,换取更大有效容量的终极方案。

优化成效分析:全新的内存占用

经过上述一系列组合拳式的优化,我们现在可以重新计算同一个 7B 模型在端侧运行时的实际内存占用:

内存组成部分 优化后(4-bit 量化 + GQA)
权重内存(4.5 bpw) ≈ 3.7 GB
激活值内存(动态峰值,估算) ≈ 0.9 GB
KV Cache(4K tokens,Qwen2-7B,INT8) ≈ 0.12 GB
预估总内存峰值 ≈ 4.7 GB

最终结论

分析指向一个明确的结果:物理内存容量是端侧 AI 能力的根基,而软件优化则是在这个根基上实现效率最大化的手段。


   转载规则


《LLM 推理系列(六):内存容量——端侧 AI 的入场券》 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
LLM 推理系列(七):投机解码(Speculative Decoding) LLM 推理系列(七):投机解码(Speculative Decoding)
概述投机解码(Speculative Decoding)是一种新兴技术,用于加速大型语言模型(LLM)的推理过程。该方法不仅能够显著提升推理速度,还能保持解码质量,因此受到广泛关注。本文将简要介绍投机解码的实现原理,并探讨对该算法原始实现的
2026-02-15
下一篇 
LLM 推理系列(五):内存带宽——端侧 LLM 的第一瓶颈 LLM 推理系列(五):内存带宽——端侧 LLM 的第一瓶颈
在 AI 大模型席卷一切的今天,我们都期待手机成为真正的”口袋里的AI大脑”。但你有没有感觉,手机上的 AI 助手总是慢半拍?无论是想让它快速总结一篇长文,还是在图片编辑时使用”AI消除”功能,那种等待的延迟感,总在提醒我们”理想与现实的差
2026-02-05
  目录