跳转到主要内容
每个本地模型都需要足够的内存来存储其权重、KV 缓存以及部分工作开销——当模型无法完全装入 VRAM 时,卸载机制决定了哪些部分在 GPU 上快速运行,哪些部分在 CPU 上较慢运行。本页介绍容量规划理论和卸载机制;如需按 GPU 和模型大小分类的现成 VRAM 表格,请参阅 GPU 模型适配指南——本页不再重复这些表格。

容量计算公式

模型权重占用的字节数由精度决定,每个参数对应固定的字节数: GGUF Q4_K_M 属于混合精度,平均每参数字节数约为 0.5–0.56,而非固定的 0.5,因为 K 量化为不同张量分配不同的位宽——请参阅 量化 了解如何解读这些名称。 将参数量乘以每参数字节数得到原始权重大小,然后在此基础上增加约 20%,以容纳 KV 缓存、激活值和框架开销(在适度上下文长度下):
Hugging Face 在 15B+ 模型上直接测量了这一规律:约 29 GB(bf16)、约 ~15 GB(8-bit)和约 ~9.5 GB(4-bit)——请参阅 Hugging Face LLM 优化指南。更长的上下文会在该 1.2× 基线之上增加更多 KV 缓存;请参阅 KV 缓存与上下文 了解其缩放原因。
此公式是用于权重容量规划的估算值,并非精确值。实际数值应为你计划运行的特定量化版本的实际 GGUF 文件大小,加上目标上下文长度所需的 KV 缓存。请参阅 GPU 模型适配指南 查看详细示例和交互式估算器。

实际竞争内存的资源

以下三项共享同一池 VRAM(或统一内存):
  • 模型权重 — 模型加载后固定不变,不受提示词长度影响。
  • KV 缓存 — 随上下文长度和批处理大小增长;请参阅 KV 缓存与上下文。
  • 激活值和框架开销 — 每次前向传播期间所需的工作内存较小,大致对应上述公式中的 1.2× 系数。
权重是最大且最可预测的成本。KV 缓存是可能让你感到意外的部分,因为它在上下文增长之前是隐形的。

卸载:当模型无法完全装入时

如果模型的权重无法完全装入 GPU 的 VRAM,llama.cpp 等后端允许你将模型拆分到 GPU 和 CPU 上运行,而不是直接失败。这通过 --n-gpu-layers(简写 -ngl)标志控制:它设置有多少模型层加载到 GPU 上,其余层保留在系统内存中。
  • 完全卸载(-ngl 设置得足够高以覆盖所有层):整个模型在 GPU 上以全速运行。
  • 部分卸载:部分层在 GPU 上运行,其余层在 CPU 上使用系统内存运行。这使得大于 VRAM 的模型能够实际加载并运行,但需付出代价。
  • 无卸载(-ngl 0):整个模型仅在 CPU 上运行。
部分卸载的代价是速度,而非正确性——无论哪种方式,输出结果相同。CPU 侧层和系统内存的内存带宽远低于 GPU VRAM,回顾 推理如何工作 可知,解码阶段受内存带宽限制:生成的每个令牌都必须读取相关层,因此任何位于较慢内存中的层都会成为每一步的瓶颈。从 GPU 卸载到 CPU 的层越多,生成速度越慢——一旦模型从内存溢出到磁盘,速度可能会急剧下降。
如果模型溢出到磁盘(交换空间)而非保留在内存中,请预期严重的速度惩罚——磁盘带宽比内存慢几个数量级,更不用说 VRAM 了。将磁盘溢出视为选择更小模型或更激进量化的信号,而不是强行运行的情况。
在 llama.cpp 仓库 中查找你使用的后端的确切标志名称和行为;其他后端(LM Studio、Ollama)通过其自身设置暴露相同概念,通常底层基于 llama.cpp。

统一内存如何改变局面

在具有 统一内存 的系统上——Apple Silicon 和 AMD 的 Strix Halo 平台——CPU 和 GPU 共享单个内存池,而不是 GPU 拥有自己独立且较小的 VRAM。这改变了卸载的计算逻辑:
  • 容量:统一内存系统可以加载比具有固定 VRAM 的独立 GPU 大得多的模型,因为“VRAM”池可以大到等于机器的总 RAM(上限为分配给图形使用的部分)。
  • 带宽:同一内存池的带宽低于独立 GPU 上的专用 GDDR 内存。完全装入统一内存的模型解码速度仍慢于完全装入独立 GPU VRAM 的相同模型,因为解码速度取决于带宽,而不仅仅是容量。
实际上,统一内存将权衡从“是否能装入”转变为“装入后运行速度如何”——它解决了最初迫使卸载的容量问题,但并不会同时带来 GDDR 级带宽。请参阅 GPU 模型适配指南 了解特定统一内存系统与独立 GPU 的对比。

深入了解更多

推理如何工作

为什么解码阶段首先受内存带宽限制。

KV 缓存与上下文

随对话增长而非仅随模型增长的内存使用部分。

量化

缩小每参数字节数以改变容量公式中最大的输入变量。

GPU 模型适配指南

VRAM 表格、交互式估算器以及常见硬件的适配情况。

模型适配并运行后

容量规划和卸载让模型在你的硬件上运行,无论是完全在 GPU 上还是与 CPU 拆分运行。一旦它在 localhost 上响应请求,下一步就是从其他位置访问它。

为其提供稳定的端点

Tokios 不选择、托管或微调模型——一旦它在本地运行,Tokios 将其转换为一个稳定的、经过身份验证的端点,你可以从任何地方调用。