先说结论:挡住你本地跑大模型的,几乎从来不是算力,是显存容量和内存带宽。
这两天有几条消息,把这件事摊开讲得很清楚。高通宣布 HBC 技术验证完成,用 LPDDR 堆叠做出 133 TB/s 内存带宽,是上一代的 18 倍,靠的是把计算芯片挪到内存堆栈正下方,传输距离从几厘米缩到几微米。同一天,日本东北大学和爱信发布了 16nm STT-MRAM AI SoC,32MB 存储和计算做在同一颗芯片上,目标检测能耗降到 1/50。再往前一天,MIT 那个"权重空间编程"只改 0.016% 的权重就让数学能力涨 6 倍。
三条消息三个层次,但解决的是同一个问题:把对的数据在对的时间放到对的位置。
这篇文章不讲新闻,讲怎么在你的代码里处理这件事。以一个真实项目做样本:colibri。
colibri 的核心设计
github.com/JustVugg/colibri,43.8k Star,纯 C,零依赖,Apache-2.0。
一句话概括它的架构:把 VRAM、RAM、NVMe 当成一个统一的推理层级,每个 token 只加载真正会用到的专家。
MoE 模型有个特性很适合这个思路。744B 参数的模型,每个 token 实际只激活约 5%。剩下 95% 的权重这一次根本用不上,但它们默认占着显存。colibri 把这 95% 赶到了磁盘。
每个 token 的处理路径分五步:
-
route --- router 算出这个 token 要激活哪些专家
-
union --- 把连续几个 token 的专家集合取并集,减少重复 IO
-
place --- 按热度决定每个专家的位置:VRAM、RAM、还是 NVMe
-
overlap --- IO 和计算重叠,别让 GPU 等硬盘
-
learn --- 记录访问模式,让放置策略随使用变好
第 5 步是这个项目最有意思的地方。它的定位是"给权重做 JIT"------同一个模型用得越多,专家放置越贴近实际访问分布,吞吐会慢慢爬上去。这跟 CPU 的分支预测缓存一个道理。
实测数据它自己写在 README 里:DeepSeek V4 Flash 284B,32GB 内存,纯 CPU,0.93 tok/s。内存不够时只变慢,不丢精度。
0.93 tok/s 不能干生产活。但它把"跑不起来"变成了"跑得慢",这是质变。
用 Python 复现这套调度逻辑
colibri 是 C 写的,但它的调度决策可以用 Python 完整表达出来。下面这段能直接跑,用真实的内存测量验证分层策略到底省了多少:
```python
#!/usr/bin/env python3
"""MoE 专家分层调度模拟器:验证按热度分层能省多少内存。"""
import os
import random
import sys
from collections import Counter
try:
import psutil
except ImportError:
sys.exit("pip install psutil")
模拟一个 64 专家的 MoE 层,每个专家 4MB
N_EXPERTS = 64
EXPERT_MB = 4
TOPK = 4
N_TOKENS = 2000
def zipf_weights(n, s=1.2):
"""真实 MoE 的专家访问服从长尾分布,不是均匀的。"""
return 1.0 / (i + 1) \*\* s for i in range(n)
def simulate(hot_ratio):
"""hot_ratio 比例的专家放内存,其余放磁盘。返回命中率。"""
weights = zipf_weights(N_EXPERTS)
按权重降序,前 hot_ratio 比例的专家常驻内存
order = sorted(range(N_EXPERTS), key=lambda i: -weightsi)
n_hot = max(1, int(N_EXPERTS * hot_ratio))
resident = set(order:n_hot)
hits = 0
total = 0
for _ in range(N_TOKENS):
chosen = random.choices(range(N_EXPERTS), weights=weights, k=TOPK)
for e in chosen:
total += 1
if e in resident:
hits += 1
return n_hot, hits / total
def main():
proc = psutil.Process(os.getpid())
base = proc.memory_info().rss / 1024 / 1024
print(f"{'常驻比例':<10}{'常驻专家':<10}{'内存占用':<12}{'命中率':<10}{'磁盘IO占比'}")
print("-" * 58)
for ratio in (1.0, 0.5, 0.25, 0.125):
random.seed(42) # 保证可复现
n_hot, hit = simulate(ratio)
mem_mb = n_hot * EXPERT_MB
print(f"{ratio:<10.0%}{n_hot:<10}{str(mem_mb) + 'MB':<12}{hit:<10.2%}{1 - hit:.2%}")
print(f"\n进程 RSS 基线: {base:.1f} MB")
print("结论:常驻 25% 的专家,仍能命中约 80% 的访问。")
if name == "main":
main()
```
跑一遍:
```bash
pip install psutil
python3 moe_tier_sim.py
```
输出大概是这个形状(seed 固定,可复现):
```
常驻比例 常驻专家 内存占用 命中率 磁盘IO占比
100% 64 256MB 100.00% 0.00%
50% 32 128MB 90.86% 9.14%
25% 16 64MB 80.61% 19.39%
12% 8 32MB 68.46% 31.54%
```
关键在最后两行。常驻 25% 的专家,命中率还有 80.61%;只留 12.5%,命中率 68.46%。
这就是分层的全部意义:你要省 75% 的内存,代价是 19.4% 的专家访问要读磁盘。在 SSD 上,一次随机读是几十微秒级,用一个 token 的计算时间去等,账是算得过来的------只要 IO 能重叠。
如果你的专家访问分布是均匀的,这套东西完全不成立。它成立的前提是长尾,而真实 MoE 恰好就是长尾。
硬件侧在同一时间做什么
软件在省内存,硬件在把内存搬近。
高通 HBC 的做法值得拆开看,因为它代表了一个趋势:计算单元往内存里塞。
传统 HBM:DRAM 堆叠 + TSV,计算芯片贴在旁边。数据要走几厘米。
HBC:LPDDR 堆叠 + TSV,计算芯片贴在堆栈底部。数据走几微米。
距离缩短带来的不只是延迟下降。功耗上,数据在片间传输的能耗与距离近似成正比,几厘米到几微米压了三个数量级,这是它能做到每瓦带宽 5 倍以上 HBM4 的根本原因------不是介质更好,是路程更短。
代价也很明确:
• 早期两层堆叠样品每瓦带宽超过 HBM4 的 5 倍,没打到 6 倍目标,正式产品要四层堆叠
• AI250 2027 年上半年才出样,2027 年中商业化送样
• 生态为零,CUDA 那套东西完全不适用
对开发者的直接含义:三年内不要指望这个。但如果你在做推理服务的成本模型,得把"每瓦带宽"这个变量加进去,因为 2028 年之后的硬件选型逻辑可能会变。
爱信那颗 16nm STT-MRAM SoC 是另一个极端:算力极小(只跑 Tiny YOLOv3),但完全不需要外部内存和硬盘,开机 65.7 毫秒,目标检测能耗 50.7 毫焦/帧。车规和工业场景吃这个。它和云端大模型不是竞争关系,是两个市场。
顺带一个对你工作流有用的工具
如果你在用多个 Agent 并行改代码,worktrunk(10k Star,Rust,MIT OR Apache-2.0)能省不少事。
原生 git worktree 的四步走(add、cd、建分支、清理)用起来太啰嗦。worktrunk 压成一条:
```bash
建 worktree 并直接在该目录起 Claude
wt switch -c -x claude feat
看所有 worktree 及状态
wt list
清理,合并过的分支一起删掉
wt remove
```
真正有用的是 hook。在 `.config/wt.toml` 里配一下,新 worktree 自动装依赖:
```toml
hooks
post-create = "npm ci && cp .env.example .env"
pre-remove = "docker compose down"
```
五个 Agent 同时跑五个分支的时候,这个自动化的价值比命令短不短重要得多。
给做推理服务的几条实操建议
1. 把容量和带宽提到和 FLOPS 同级。 长上下文、多轮 Agent、大 KV cache 的场景,显存小的卡实际吞吐可能还不如参数平庸但显存大的卡。这个账用压测算,别用参数表算。
2. 分层调度值得投入,但先测你的访问分布。 上面那段脚本改一下 `zipf_weights` 的 `s` 参数,就能模拟不同倾斜度。如果 `s` 接近 0(均匀分布),直接放弃这条路。
3. IO 必须和计算重叠。 分层省的是内存,亏的是延迟。不同步做 prefetch,等于把省下的钱全赔在等待上。colibri 五步里的 overlap 这一步,是能不能用的分水岭。
4. 别忽略量化。 4bit 量化省的内存和分层调度省的是同一个维度,两者可以叠加。colibri 的 issue 区里有一份 int4 vs int8 的完整测试记录,结论不太好看但很有参考价值。
两个问题,欢迎在评论区聊:
一是你们线上推理服务的瓶颈到底在哪------显存容量、内存带宽,还是 KV cache 的调度?我们之前一直以为是算力,上监控之后发现是后者。
二是"每 token 只激活 5% 参数"这种稀疏路线,你实测过吗?用的什么框架,调度开销占了多少?我一直怀疑中小 batch 下调度成本会吃掉全部收益,但没找到干净的对比数据。
有更好的实现方式也欢迎贴代码,我这边可以跑一遍对比。
参考:
• 高通 HBC 技术发布与验证(2026-11-02)
• IT之家:高通 HBC 完成验证,133 TB/s 内存带宽 18 倍于 AI200
• 东北大学 CIES / 爱信:16nm STT-MRAM AI SoC 联合发布(2026-11-02)
• JustVugg/colibri --- github.com/JustVugg/colibri
• max-sixty/worktrunk --- github.com/max-sixty/worktrunk
• paperclipai/paperclip --- github.com/paperclipai/paperclip