当前位置:首页 > 软件工具 > 正文

8GB 显存跑 128K 上下文:KV cache 根本装不下,靠的是卸载

约 3602 字 · 预计阅读 10 分钟
一句话总结:Strata 0.2.10 宣称 8GB 显存能跑 128K 上下文。我按 8B 模型算了一遍:128K 的 KV cache 在 FP16 下要 64GB,压到 4bit 也要 16GB,都远超 8GB 卡能分给 KV 的 4GB。所以它一定不是在显存里装下这么多——是把 KV 挪到了内存或者磁盘上。

看到"8GB 显存跑 128K 上下文"这个说法,我第一反应是不可能。

不是怀疑工具做得不好,是这组数字在物理上对不上。

8GB 显存跑 128K 上下文:KV cache 根本装不下,靠的是卸载

图 1:8K 刚好压线,32K 差 4 倍,128K 差 16 倍

一、先算 128K 的 KV 要多少显存

KV cache 的公式是固定的:

KV 字节数 = 2(K 和 V)× 层数 × hidden 尺寸 × 每元素字节 × token 数

拿一个 8B 模型举例:32 层,hidden 4096,FP16 存(每元素 2 字节)。

def kv_gb(layers, hidden, tokens, bytes_per=2):
    return 2 * layers * hidden * bytes_per * tokens / (1024 ** 3)

print(kv_gb(32, 4096, 8192))     # 4.0 GB
print(kv_gb(32, 4096, 32768))    # 16.0 GB
print(kv_gb(32, 4096, 131072))   # 64.0 GB

128K 上下文,光 KV cache 就要 64GB。

这还没算权重。8B 模型按 4bit 量化约 4GB,加起来 68GB。

8GB 的卡,装不下。

二、8GB 卡的真实上限是多少

把权重那 4GB 扣掉,剩 4GB 给 KV。

KV 精度 每 token 最多支持
FP160.5 MB8,192 token(8K)
8bit0.25 MB16,384(16K)
4bit0.125 MB32,768(32K)

就算把 KV 压到 4bit——这已经是精度损失明显的程度了——上限也只有 32K。

离 128K 差 4 倍。

所以问题不是"优化得够不够",是有 60GB 的数据不在显存里。

三、要开到 128K,只能卸载

那 128K 怎么跑起来的?只剩一种可能:KV cache 不放在显存里。

常见做法有三种:

CPU 卸载。 KV 存在系统内存,需要的时候按层搬进显存。内存便宜、容量大,64GB 内存装 128K 的 KV 刚好够。

磁盘卸载。 存到 SSD,容量更大,速度更慢。适合极长上下文但不要求实时的场景。

稀疏注意力 / KV 压缩。 只保留部分 token 的 KV(比如最近的窗口 + 重要的几个),丢掉中间大部分。这能把 128K 压到 8K 量级,但会丢信息。

前两种是"搬家",第三种是"扔掉一部分"。

Strata 具体用了哪种,我没看到技术说明。但从数字推断,一定是前两种之一,或者两者结合。 单纯靠量化到不了。

循环架构那篇也讨论过类似的事——循环层省的是权重显存,KV 反而更贵。KV 这个东西,是所有长上下文方案的共同瓶颈。

四、卸载的代价

搬家不是免费的。

带宽差一个量级。 消费级显卡的显存带宽是 400 到 1000 GB/s,DDR5 内存是 50 到 100 GB/s,NVMe SSD 是 5 到 7 GB/s。

每次生成一个 token,要把整个 KV 过一遍。存在内存里,速度就慢 5 到 10 倍;存在磁盘里,慢 100 倍以上。

实测体感大概是这样:

  • 全显存:每秒几十个 token,正常对话速度
  • KV 在内存:每秒几个 token,明显变慢但能用
  • KV 在磁盘:每秒不到一个 token,基本只能等

所以"8GB 跑 128K"是真的,但速度要按最慢那档预期。

还有 prefill 的问题。 128K 的输入第一次处理要算完整个上下文,这个过程本身就慢。加上 KV 要不断在内存和显存之间搬,总耗时可能是分钟级。

五、什么时候值得用卸载跑长上下文

三类场景它确实有用。

一次性的长文档分析。 扔进去一份 300 页的 PDF,问几个问题,等几分钟能接受。这种场景不需要实时,卸载的代价被摊薄了。

隐私敏感的处理。 数据不能出本地,宁愿慢也要跑在自己机器上。

验证和学习。 想看看长上下文模型在某个任务上表现如何,不想为此租卡。

反过来,这三类不适合:

  • 实时对话(等不起)
  • 批量处理(吞吐太低)
  • 频繁改动的长会话(每次都要重新 prefill)

六、常见问题

8GB 显存跑 128K,是真的吗?

是真的,但"跑"的定义是"能出结果",不是"跑得快"。速度会明显低于全显存方案。

需要多少系统内存?

如果要卸载 64GB 的 KV 到内存,至少得有 64GB 空闲内存。加上系统和权重,建议 96GB 以上。

会不会掉精度?

看它用的是哪种方案。卸载到内存不掉精度(数据还是 FP16),稀疏注意力会掉。

和我直接买个 24GB 卡比呢?

24GB 卡能全显存跑 32K,速度正常。8GB 卡跑 128K 是"能跑",24GB 卡跑 32K 是"好用"。看你更需要长度还是速度。

有更省显存的方案吗?

有。MiniMax 那篇讲的是量化压缩权重,这篇讲的是 KV——两者解决的是不同部分,可以叠加。

结语

这类工具的宣传数字,我建议都换算成"每秒能出几个字"再看。

8GB 跑 128K 是真的,但它的使用体验更接近"批处理"而不是"对话"。知道这一点,就不会买回来发现没法用。

反过来说,如果你确实需要在老机器上处理超长文档,这类工具是目前唯一的选择——慢总比跑不了强。

参考资料

目录导航
  • 一、先算 128K 的 KV 要多少显存
  • 二、8GB 卡的真实上限是多少
  • 三、要开到 128K,只能卸载
  • 四、卸载的代价
  • 五、什么时候值得用卸载跑长上下文
  • 六、常见问题
  • 结语
    • 参考资料
  • 相关文章:

  • gpt-oss 两个版本:20b 跑 16GB 内存,120b 要一张 H100
  • MiniMax 428B:252GB 压到 93GB,每权重 1.87 bit
  • 循环层 vs 堆参数:24GB 显存下谁先撑不住
  • 27B 模型配 262K 上下文:光 KV cache 就要 48GB
  • Hy-Nomas 部署账:12GB 显存能跑,但按下 W 要等 4 秒
  • 线性注意力到底省了什么:从 O(n²) 到固定状态,120 行代码跑通
  • Kimi Linear 深度解读:KV cache 砍掉 75%、1M 上下文快 6 倍,线性注意力第一次真能用了
  • 部署超大 MoE 的显存账:1T 权重到底要多少卡
  • 发表评论

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。