编程 8G 显存跑 35B、单张游戏卡扛 753B:FreeToken 把"装不下"改写成"算得动"

2026-09-08 20:57:48

MoE 模型的参数动辄几百 B,但真正在线的其实只激活其中一小撮专家。多数本地推理引擎仍按"整包权重能不能塞进显存"来设计,于是 200B+ 的模型默认被挡在游戏显卡之外。FreeToken 换了个问法:不是"装不装得下",而是"怎么在带宽允许的范围内,把用得上的专家算起来"。它把显存、CPU、系统内存、PCIe 当成一整块可弹性调度的平台,让消费级硬件跑起数据中心级模型。

项目信息

  • GitHub:FlashML-org/FreeToken(Apache-2.0)
  • 论文:arXiv 2608.16157(《FreeToken: Efficient Edge-Native MoE Serving with Bandwidth-Adaptive Execution》)
  • 下载/GUI:flashml.ai
  • 团队:UC Berkeley × UT Austin 的 FlashML,作者含 Song Han(MIT)、Matei Zaharia(Databricks/vLLM)、Ion Stoica(Ray/vLLM)。注:有渠道误标为"上海交大联合加州大学",实为伯克利×奥斯汀,代码仓库即上。

官方口径跑到了哪一档

按 README 和论文的基准,三档硬件各自能带多大模型:

硬件模型备注
8GB 显存(RTX 4060 笔记本)Qwen3.6-35B-A3B约 39 tok/s
32GB 游戏台式机DeepSeek-V4-Flash(284B)论文主机 192GB DDR5,约 150GB 权重放 host RAM
单张工作站 GPU(96GB)GLM-5.2(753B)需 ~512GB 主机内存

这些是项目方/论文口径,需自行复现;但"门槛从显存容量迁移到主机内存"这个结论是可验证的——284B 级模型需要 32GB 显存 + 上百 GB 的 host RAM,753B 需要 512GB RAM 工作站。"游戏 PC 也能跑"指的是把权重摊到整机内存,而不是免掉内存门槛。

瓶颈为什么是带宽而不是容量

以 DeepSeek-V4-Flash 为例:284B 总参,每处理一个 token 只激活 43 层中的 6 个路由专家,实际参与计算约 13B。稀疏性不缩小权重总量——FP4 下完整专家池约 140GB——但意味着任意一次推理里,绝大多数专家可以常驻主机内存,按需调进显存。

预填充阶段大批 token 会同时路由到几乎全部专家,需要把整个专家池跨 PCIe 搬一遍,在 RTX 5090 上约 2 秒、PCIe 4.0 桌面卡约 5 秒、笔记本 X8 链路可能超 10 秒。现有的 llama.cpp / Ollama / KTransformers / MoE-Infinity 基本都卡在这:要么固定卸载、要么把 PCIe 搬运和计算串行排队。

FreeToken 的 q* 策略做的是"带宽自适应":每一步的缓存未命中不再无条件搬上 GPU,而是按这台机器实测的 CPU 带宽与 PCIe 带宽之比,把一部分未命中专家直接留在 CPU 上算,另一部分走 PCIe 拉上 GPU 算,两边重叠执行。谁的带宽高,谁就多算一点,目标是让两边同时收尾、无 idle。

五类 MoE 后端怎么选

CLI 的 ft serve --moe-backend 提供五档,靠 ft bench bw 每台机器校准一次后自动选:

  • fused:专家全部驻留显存(显存够大时用,不会被自动选中)
  • offload:专家放 host RAM,显存里留一份 LRU 槽位,未命中走 PCIe
  • cpu:未命中直接交给 CPU 算,不搬
  • hybrid:每步把未命中按带宽比拆成"PCIe 搬"+"CPU 算"两部分重叠跑;先 ft bench bw 校准拆分
  • auto:稠密模型落到 fused;MoE 默认 offload,若缓存了 ft bench bw 且推荐则升级 hybrid

语义感知缓存与弹性内存

两个隐藏点值得单独拎出来,因为它们是 agent 场景的核心:

  • 语义锚点检查点:agent 的多轮交互会在语义边界(思考段、工具调用)改写上下文。FreeToken 在这些边界给 recurrent state 和 KV cache 打检查点,上下文编辑后只重算新增后缀,而不是整段 prefill 重来。
  • 弹性内存管理:KV 缓存与常驻专家槽位之间可以在运行时动态重分配显存,无需重启、无需重载权重。

它接的不是"再一个 CLI",是现有 agent 生态

除了 ft serve 在 1919 端口暴露 OpenAI/Anthropic 兼容 API,还内置 ft launch 子命令,会直接改写 claude/codex/dsh/hermes/openclaw/opencode 等 agent 的 provider 配置并指向本地服务。也就是说它把自身定位成"给现有 agent 生态一个本地推理后端",配合 20+ MoE 模型与 Anthropic/OpenAI 兼容接口,Coding agent 可以直接落在你的游戏机上。

快速上手

uv pip install "freetoken[accel]"
# 或从源码
git clone https://github.com/FlashML-org/FreeToken.git && cd FreeToken
uv venv && source .venv/bin/activate
uv pip install -e ".[accel]"

# 起 OpenAI/Anthropic 兼容服务,默认 127.0.0.1:1919
ft serve --model ~/models/Qwen3.6-35B-A3B

# 校准带宽,决定 offload 还是 hybrid
ft bench bw

# 把 Claude Code / Codex 等 agent 指到本地服务
ft launch claude

支持 NVIDIA RTX 30/40/50 系列,Linux 与 Windows;模型以 HF safetensors 为主,DeepSeek-V4 的 checkpoint 需保留 inference/config.json 子目录,多模态模型按文本服务。

别把口径当承诺

三点值得自己验证:

  1. README 宣传"290B+",论文实测是 284B,四舍五入口径有出入。
  2. 论文明确 RTX 5090 稠密 BF16 吞吐大约只有 H100 的五分之一、B200 的十分之一——"单卡能跑"不等于"速度可匹敌数据中心",交互式体验(284B 约 22–25 tok/s)对长输出的 coding agent 仍偏慢。
  3. 收益与 MoE 稀疏度强耦合:稠密模型不走这条路,收益会大幅缩水。跑分多为单流交互式假设,并发服务另当别论。

引擎建立在 vLLM/SGLang 的 GPU-centric substrate 之上——造数据中心推理引擎的那批人,回头拿同一套抽象做了端侧引擎,这比作者名单更能说明这个方向的分量。

复制全文 生成海报 FreeToken MoE 本地推理 显存 带宽调度 GPU

推荐文章

程序员茄子在线接单