← 返回 2026-08-19

FreeToken:带宽自适应执行的边缘原生 MoE 推理服务系统 FreeToken: Efficient Edge-Native MoE Serving with Bandwidth-Adaptive Execution

Shuo Yang, Xiaoze Fan, Melissa Pan, Haocheng Xi, Zhe Wang, Shanlin Sun, Kurt Keutzer, Song Han, Matei Zaharia, Chenfeng Xu, Ion Stoica 📅 2026-08-17 👍 84 2026-08-24 18:30
CPU-GPU 协同执行 LLM 推理系统 MoE 推理服务 缓存与调度 边缘计算

把消费级电脑当统一推理平台,让 8GB 笔记本交互式跑 35B 模型

前置知识

MoE(混合专家)架构

MoE 层包含上百个专家前馈网络,路由器为每个 token 只选出一小部分(如 DeepSeek-V4-Flash 的 256 选 6)。这样单 token 只激活 13B/284B 参数,计算稀疏,但全部专家权重仍需存储,模型总内存 footprint 并不因激活稀疏而缩小。

本文的全部系统设计都围绕'计算稀疏但权重稠密'这一矛盾展开:稀疏让边缘算得动,稠密让权重放不进显存,从而引出专家搬运与缓存问题。

Prefill 与 Decode 两阶段

LLM 推理分两段:prefill 一次性并行处理整段 prompt,决定首 token 延迟 TTFT;decode 之后逐 token 生成,每步只处理一个 token,是访存受限的。MoE 在两段表现截然不同:prefill 中所有 token 的路由并集几乎覆盖全部专家,decode 中每步只碰极少数专家。

论文的两个核心机制分别对准两个阶段:prefill 的整层双缓冲流水和 decode 的 LRU 缓存加 q* 分割策略,不理解两阶段差异就无法理解设计动机。

PCIe 带宽与主机内存带宽($B_P$/$B_H$)

$B_P$ 是数据经 PCIe 从主机内存搬运到显存的带宽(如 RTX 5090 实测 52.7 GB/s),$B_H$ 是 CPU 直接从内存读权重做计算的有效带宽(同一机器 77.3 GB/s)。消费级 CPU 只有双通道内存(约 50–90 GB/s),远低于显存的 1–1.8 TB/s。

论文的核心公式 $q^\star \approx m B_P/B_H$ 完全由这两个实测带宽决定缺失专家在'搬去 GPU 算'与'留在 CPU 算'之间的分配,是全文最关键的抽象。

CUDA Graph

CUDA Graph 把一串 GPU kernel 及其参数静态捕获成一张图,之后每次回放即可执行全部工作,免去逐 kernel 的主机端启动开销。缺点是图内形状和控制流必须固定,动态逻辑(如每步不同的 cache miss 处理)通常需要在主机端决策。

FreeToken 的工程亮点是把路由相关的动态控制全部变成图内数据,在静态捕获的图中完成专家缓存管理,理解 CUDA Graph 的限制才能体会这个设计的价值。

混合注意力与循环层状态

新模型常用滑动窗口注意力或线性循环层(如 gated DeltaNet)替换部分标准注意力。循环层把整段历史压缩成一个固定大小的状态,该状态类似几百个 token 的 KV,引擎只能保留少量历史检查点;一旦上下文在检查点之后被编辑,状态即失效。

智能体工具调用会频繁删除历史(思维段、旧工具输出),导致循环层状态大量失效并触发重 prefill,这正是论文'语义锚点检查点'要解决的问题。

研究动机

开源权重模型能力正逼近闭源系统,但运行门槛把多数人挡在门外:前沿 MoE 即便稀疏激活(DeepSeek-V4-Flash 284B 参数仅激活 13B),完整专家池也远超消费级显存,必须常驻主机内存按需搬运。现有边缘系统(llama.cpp、KTransformers、Ollama)有三个具体短板。其一,prefill 摧毁专家稀疏性:长 prompt 的路由并集几乎覆盖每层全部专家,一次 prefill 要把约 140 GB 的 FP4 专家权重流过 PCIe,RTX 5090 上多花约 2 秒,PCIe 4.0 桌面约 5 秒,笔记本 x8 链路超 10 秒,且全部暴露为 GPU 空闲。其二,智能体工具调用频繁改上下文:混合注意力/循环层的递归状态检查点稀疏,编辑点之后全部作废,动辄重算数千 token,而 5090 的稠密 BF16 吞吐只有 H100 的约五分之一。其三,decode 阶段静态专家放置追不上逐 token 路由,双通道内存仅 50–90 GB/s,且显存随时被浏览器、游戏挤占,没有固定的放置或调度策略能持续最优。

本文的目标是论文要证明:用户已拥有的消费级硬件(Steam 统计约两亿月活用户中 72% 带独立 NVIDIA GPU)可被当作一个统一、弹性的推理平台,交互式服务前沿规模模型。具体目标有三:(1) 在不修改模型、保持精确 MoE 计算的前提下,让 8 GB 的 RTX 4060 笔记本以约 39 tok/s 跑 35B 模型(超过 Codex 生产轨迹 33 tok/s 的中位解码速度)、32 GB 游戏桌面交互式跑 284B 的 DeepSeek-V4-Flash、单张 RTX PRO 6000 跑 753B 的 GLM-5.2;(2) 在真实智能体负载(编码代理、邮件日历代理)下解码速度保持稳定、最差 TTFT 不触发真实客户端超时(OpenClaw 的 120 秒空闲看门狗、Claude Code 约十分钟请求超时);(3) 系统需适应边缘机器显存与带宽被其他应用动态挤占的环境,并支持 20 多种 MoE 模型。

与已有工作不同的是,已有工作分三条线,各有盲区。专家卸载与缓存线(EdgeMoE、Mixtral-offloading、MoE-Infinity、ProMoE、HOBBIT)把缺失专家当作'待搬运的数据',用预测和预取降低 miss 率,但每个 miss 最终仍是一次 PCIe 传输,解码延迟被链路锁死,主机算力闲置。混合 CPU-GPU 执行线(Fiddler、KTransformers、HybriMoE)让 CPU 真的算专家,但分割比例在启动时固定(KTransformers 即使 PCIe 空闲也把专家留在 CPU)或靠主机端启发式逐步模拟,无法纳入 CUDA Graph。分层内存管理线(SGLang HiCache、WiSP、eLLM)只搬 KV 这类被动字节,WiSP 自己的分析也承认单流解码受 PCIe 限制。FreeToken 的独特切入是把有限带宽从固定瓶颈变成运行时调度信号:用部署机上实测的 $B_P$、$B_H$ 推出闭式分割 $q^\star$,让 PCIe 填充与 CPU 执行并发;同时首次面向智能体的语义编辑模式设计循环状态锚点,并把显存做成免重启的运行时弹性资源。

核心方法

FreeToken 把一台个人电脑组织成两级专家内存层次:完整专家池常驻主机内存(唯一事实来源,经 FTW 格式快速加载),非专家权重常驻 GPU;剩余显存做成跨所有 MoE 层共享的弹性专家缓存,每槽存放一个(层,专家)对的完整张量,GPU kernel 与 CPU 执行器共享同一逻辑寻址。在此之上是三个协同机制。prefill 阶段:整层双缓冲让下一层专家在 GPU 算当前层时经 PCIe 后台流入,专家搬运完全隐藏在计算后面;同时在思维段、工具调用等特殊 token 边界锚定递归状态检查点,上下文被编辑后从最深存活锚点恢复、只重算新后缀。decode 阶段:全局 LRU 缓存利用相邻 token 的路由重叠吃掉大部分请求,残余 miss 按 $q^\star$ 策略分给 PCIe 缓存填充与 CPU 就地执行两路并发,部分和精确合并、无精度损失。底层由弹性内存管理在调度安全点免重启地按新显存预算重建缓存,并靠'直接读入最终布局、填满后再锁页'消除启动预热。由于专家池始终在主机,显存只影响性能、不影响正确性。

核心创新是带宽自适应执行的 $q^\star$ 闭式策略。设一步解码产生 $m$ 个缺失专家、每个专家 $S$ 字节;PCIe pinned 传输带宽为 $B_P$,主机侧专家处理带宽为 $B_H$。两路都从同一主机内存子系统读数据,故 PCIe 满载后剩余带宽 $B_R = \max(B_H - B_P, 0)$ 恰好可供并发 CPU 执行:缓存填充 $q$ 个专家耗时 $T_{fill}(q) \approx qS/B_P$,CPU 执行 $m-q$ 个耗时 $T_{cpu}(m-q) \approx (m-q)S/(B_H - B_P)$,令两分支时间相等即解出 $q^\star \approx m \cdot B_P/B_H$;$B_H \to B_P$ 时退化为纯按需填充。与已有工作的本质区别:KTransformers 在加载时固定'热'专家,llama.cpp 静态分配层到设备,Fiddler 虽证明 miss 可在 CPU 算,但无随路由自适应的量化分割、也无法进 CUDA Graph;FreeToken 把分割决策变成设备端数据,每层在捕获好的图内自动完成去重、命中分类、受害者选择与批量拷贝,主机零参与。

方法步骤详情

运行流程如下。部署时先实测 $B_P$ 与 $B_H$(表 1:5090 为 52.7/77.3 GB/s,4060 笔记本为 11.8/47.5 GB/s),并把权重转成 FTW 格式——专家按 $lE+e$ 标识合并为银行,启动时用并行直接 I/O 读入精确大小的主机缓冲、填满后才锁页,140 GB 池约 20 秒读完,冷缓存直接服务首请求、无需预热。prefill 时分两个整层缓冲:GPU 算第 $l$ 层的同时,传输流把第 $l+1$ 层专家经 PCIe 灌入另一缓冲,随后交换;整层加载使传输可在路由已知前开始,8192 token 块耗时 1.19–1.22 秒即 PCIe 5.0 x16 上限,槽池不足时回退按需加载。每层状态检查点挂到前缀树节点,新请求恢复编辑后仍存活的最深锚点,只重算新后缀。decode 时设备端单核完成路由去重、命中分类、按 $q^\star$ 定出填充集 $F$ 与 CPU 集 $C$,单趟扫描选 K 个 LRU 受害者;GPU 算 $G = H \cup F$ 与 C++ 线程池算 $C$ 并发,部分和精确合并,全程在捕获的 CUDA Graph 内回放。显存变化时在调度安全点按新预算重建缓存。

技术新颖性

新颖性有四。第一,$q^\star$ 是首个把'缺失专家该搬运还是就地算'写成实测带宽闭式解、并作为设备端常驻数据的工作——预测类系统(MoE-Infinity、ProMoE、HOBBIT)只能降低 miss 数量,无法改变 miss 的服务方式;Fiddler/KTransformers 的 CPU 路径缺少随路由自适应的比例。第二,CUDA-Graph 兼容的动态 LRU:路由相关控制全部固化为图内定形缓冲与设备端有效计数,受害者选择用单趟核找出 K 个候选、miss 路径只消费前 $q$ 个,把 LRU 每槽一次全缓存扫描降为恒定单趟;CPU 分支经 pinned 缓冲、持久任务描述符与物理核绑定的 C++ 线程池(SIMD + 核内反量化)一并捕获进图。第三,语义锚点检查点是全新的缓存粒度:在 OpenClaw 删思维段、OpenCode 裁剪旧工具输出这类编辑必然保留的边界存检查点,存活率远高于任意位置采样。第四,FTW 格式加'先填充后锁页'消除启动期零页清零开销,专家银行统一逻辑 ID 让跨设备执行共享寻址,另配纯 CPU 回退保证部署性。

FreeToken overview. (1) Prefill: expert loading is double-buffered at full-layer granularity, streaming layer l+1 over PCIe while the GPU computes layer l; recurrent-state checkpoints are anchored at special-token boundaries. (2) Decode: the m=4 misses are divided by q⋆ = m·B_P/B_H between cache fills over PCIe and in-place CPU execution.
Figure 2: FreeToken overview. (1) Prefill: expert loading is double-buffered at full-layer granularity, streaming layer l+1 over PCIe while the GPU computes layer l; recurrent-state checkpoints are anchored at special-token boundaries. (2) Decode: the m=4 misses are divided by q⋆ = m·B_P/B_H between cache fills over PCIe and in-place CPU execution.

实验结果

在 RTX 5090 上跨四个智能体负载(AIME、OpenCode/Claude Code 编码、OpenClaw 邮件日历),FreeToken 解码吞吐达 Qwen3.6-35B 的 77–83 tok/s(最强基线的 1.8–2.3 倍)和 DeepSeek-V4-Flash 的 22–25 tok/s(1.5–1.9 倍),且智能体负载速度保持在单轮的 12% 以内,KTransformers 在 W2 就掉了 31%。尾延迟差距更大:FreeToken 最差单轮 TTFT 全部低于 44 秒,基线均超 150 秒(llama.cpp 232 s、Ollama 179 s、KTransformers 946 s),已越过 OpenClaw 120 秒看门狗等真实超时线。消融:整层双缓冲使 16k token prefill 达 6.7k tok/s(PCIe 上限),去掉第二缓冲损失 19%–26%;同容量回放显示全局 LRU 的 miss 率仅 16%/39%,优于 KTransformers 的 41%/59% 和 llama.cpp 的 62%/89%。跨硬件领先最强基线 1.3 倍(3090/4090)、2.1 倍(5090 桌面)、1.8 倍(4060 笔记本,39.3 tok/s,为 4090 的 92%);同为 5090,换双通道桌面 FreeToken 仅损失 4%,llama.cpp 损失 20%。前沿档:单卡 PRO 6000 跑 753B 的 GLM-5.2 达 14.9 tok/s(llama.cpp 7.3 的 2 倍),TTFT 相当(7.5 对 7.8 秒)。

Test systems. BP is the measured host-to-device expert-transfer bandwidth over PCIe; BH is the measured effective bandwidth of the CPU-side MoE expert kernel.
Table 1: Test systems. BP is the measured host-to-device expert-transfer bandwidth over PCIe; BH is the measured effective bandwidth of the CPU-side MoE expert kernel.
End-to-end serving on the RTX 5090 across four workloads (1. AIME, 2. OpenCode+SWE, 3. Claude Code+SWE, 4. OpenClaw+Email/Cal) and two models (Qwen3.6-35B-A3B BF16 and DeepSeek-V4-Flash MXFP4). Top: decode TPS; bottom: mean TTFT (log scale).
Figure 3: End-to-end serving on the RTX 5090 across four workloads (1. AIME, 2. OpenCode+SWE, 3. Claude Code+SWE, 4. OpenClaw+Email/Cal) and two models (Qwen3.6-35B-A3B BF16 and DeepSeek-V4-Flash MXFP4). Top: decode TPS; bottom: mean TTFT (log scale).
(a) Prefill TPS versus prompt length (RTX 5090, Qwen3.6-35B BF16), with and without FreeToken's pipelined full-layer loading. (b) Decode-time expert miss rate versus cache size under the three engines' placement policies, replayed on identical routing traces.
Figure 4: (a) Prefill TPS versus prompt length (RTX 5090, Qwen3.6-35B BF16), with and without FreeToken's pipelined full-layer loading. (b) Decode-time expert miss rate versus cache size under the three engines' placement policies, replayed on identical routing traces.
Coding-agent decode TPS across consumer GPUs (SWE issues via the OpenCode harness), Qwen3.6-35B-A3B. The RTX PRO 6000 column is a separate demonstration: GLM-5.2 (753B-A40B, NVFP4) on the math workload.
Figure 5: Coding-agent decode TPS across consumer GPUs (SWE issues via the OpenCode harness), Qwen3.6-35B-A3B. The RTX PRO 6000 column is a separate demonstration: GLM-5.2 (753B-A40B, NVFP4) on the math workload.
查看结构化数据
任务指标本文基线提升
RTX 5090 解码吞吐(Qwen3.6-35B-A3B BF16,4 个智能体负载) 解码吞吐 tok/s 77–83 tok/s KTransformers / llama.cpp / Ollama / MoE-Infinity 中最强者 1.8–2.3×
RTX 5090 解码吞吐(DeepSeek-V4-Flash MXFP4) 解码吞吐 tok/s 22–25 tok/s 最强基线(KTransformers) 1.5–1.9×
四负载最差单轮首 token 延迟(RTX 5090) worst-case TTFT 全部 < 44 s llama.cpp 232 s / Ollama 179 s / KTransformers 946 s 最差情况缩小约 3.4–21×
RTX 4060 笔记本(8 GB,PCIe ×8)跑 Qwen3.6-35B NVFP4,OpenCode 编码负载 解码吞吐 tok/s 39.3 tok/s(为 RTX 4090 速率的 92%) llama.cpp / Ollama / KTransformers 1.8×
单张 RTX PRO 6000 跑 GLM-5.2(753B-A40B,NVFP4,AIME 负载) 解码吞吐 tok/s 14.9 tok/s llama.cpp 7.3 tok/s(KTransformers 无可服务路径) 2.0×
prefill 流水线消融(5090,Qwen3.6,16k token) prefill 吞吐 tok/s 6.7k tok/s(8192 token 块 1.19–1.22 s,达 PCIe 实际上限) 去掉第二缓冲的串行加载 关闭流水线损失 19%–26%
解码专家缓存 miss 率(同容量路由回放,缓存为池的 37%/11%) 专家读取 miss 率 16%(Qwen3.6)/ 39%(DSV4-Flash) KTransformers 41%/59%,llama.cpp 62%/89% 相对最优基线约 2–2.5×

局限与改进

作者承认并部分处理的局限:实验集中在 NVIDIA CUDA 平台且为单 GPU;三台 rented 服务器用 6 线程上限与 NUMA 绑定模拟边缘 CPU(另有 5090 桌面与 4060 笔记本两台真机验证仿真);MoE-Infinity 只能跑 W1(8.8 tok/s)、Ollama 不支持 DSV4-Flash,横向对比不完全对等;检查点池很小且依赖'编辑发生在特殊 token 边界'这一假设。我补充的观察:其一,$B_P$、$B_H$ 是部署时离线画像的,其他应用占用带宽时 $q^\star$ 会失准,论文未给在线重画像机制;其二,评测聚焦小批量单流解码,多用户并发下 CPU 分支与缓存槽的竞争未验证;其三,语义锚点只覆盖循环层状态,KV 仍随会话线性增长,锚点预算在超长会话中可能不足;其四,GLM-5.2 演示需要 96 GB 显存加 512 GB 内存的工作站,'边缘'结论的前沿档门槛不低;Windows 等无法锁页全池的系统回退纯 CPU 后端,性能大幅回落。

独立分析的弱点

独立分析三点弱点。第一,带宽模型是静态的:$q^\star \approx m B_P/B_H$ 中的 $B_P$、$B_H$ 部署时测一次,而边缘机器的可用带宽随其他应用争抢、温度降频持续漂移,比例失准会破坏两分支均衡(论文强调'最优混合不能从规格表读出',却只画像一次);改进方向是用真实传输与执行耗时做滑动在线校准,或在图中加反馈调节 $q$。第二,LRU 是纯被动的:论文证明 LRU 已显著优于静态放置(miss 16%/39% 对 41%+/59%+),但与 ProMoE 式预测预取并不互斥——在 miss 前提前发起填充可压平 PCIe 突发,代价是预测错误的无效流量,需与 $q^\star$ 预算联动做保守预取。第三,评测负载脚本化:W2 三轮、W4 十三轮固定请求,真实智能体会并发子代理、中断重试、流式取消,HTTP 层调度、队列与故障恢复的稳健性未被检验,建议补长程多日会话与故障注入。另外 CPU 执行器依赖 SIMD/AMX 与物理核绑定,低端 CPU 或受限容器里 $B_H$ 可能低于 $B_P$,此时退化为纯填充,论文未给这一谱系的实测。

未来方向

论文未明确列未来方向,从成果可延伸:(1)在线带宽画像与自适应 $q^\star$,让分割在游戏、浏览器并存的真机波动下持续最优,这与弹性显存重配置是天然的组合;(2)与推测解码结合——草稿模型验证会改变每步的专家路由分布与 miss 数 $m$,$q^\star$ 框架可直接吸收,但缓存局部性结构需重研究;(3)把语义锚点思想推广到 KV 分层卸载(与 SGLang HiCache 融合),或用学习型模型预测哪些锚点最可能存活,替代纯特殊 token 规则;(4)移植到 ROCm 与 Apple Silicon——统一内存架构下 CPU-GPU 带宽边界模糊,$q^\star$ 的两带宽模型恰好能刻画其新平衡点;(5)多 GPU 消费级装机以及跨设备(家庭桌面+笔记本)专家池共享与请求路由;(6)利用'计算精确、模型未改'的保证走向服务化场景:小批量多用户、常驻 daemon、与操作系统级显存协商集成;(7)对已支持的 20 多个模型做系统性的路由局部性统计,反哺缓存容量、锚点预算与 $K$ 候选数的自动调参。

复现评估

复现条件在系统类论文中属于较好的一档:代码已在 github.com/FlashML-org/FreeToken 开源,支持 20 多种 MoE 模型;三个评测模型均为公开权重——Qwen3.6-35B-A3B(BF16 及 NVFP4)、DeepSeek-V4-Flash(官方 MXFP4)、GLM-5.2(NVFP4,433 GB)。负载可复现:AIME 公开,W2/W3 基于 SWE-bench issue 加 OpenCode/Claude Code,W4 是 OpenClaw 十三轮固定脚本。硬件门槛两档:一张 ≥8 GB 的 NVIDIA 消费卡加双通道内存即可跑 35B 并体验核心机制;完整复现前沿档需要 96 GB 显存、512 GB 内存的工作站,普通实验室难以齐备六台机器。主要成本在数百 GB 权重转 FTW 格式的磁盘与时间、部署时的带宽画像,以及 CUDA Graph 与锁页/注册 DMA 对驱动和操作系统的要求(部分配置只能走慢速纯 CPU 回退)。指标定义清晰(解码 tok/s、TTFT),作者不做跨引擎 wall-clock 对比,复现对齐相对容易。