Devotd Github
新发现推理与服务

efficientmoe/moe-infinity — Qwen3.5-MoE 分页 KV 缓存服务

efficientmoe/moe-infinity 新增了一个提交,把 Qwen3.5-MoE 的门控全注意力层连接到分页 KV 缓存上,修复了原本会崩坏的多 token 解码。

仓库信息efficientmoe/moe-infinity ↗

efficientmoe/moe-infinity 新增了一个提交,把 Qwen3.5-MoE 的门控全注意力层连接到分页 KV 缓存上,修复了原本会崩坏的多 token 解码。

GitHub 项目说明: PyTorch library for cost-effective, fast and easy serving of MoE models.

星标
★ 373
复刻
46
语言
Python
许可证
Apache-2.0
最新版本
v0.2.2
查看原始来源 ↗在 GitHub 查看 ↗

efficientmoe/moe-infinity 是一个用 PyTorch 服务 MoE(Mixture of Experts,混合专家,通过只激活多个专家中的一部分来减少计算量的模型结构)模型的库。2026 年 10 月 26 日的提交 a0b48949a67082456befef910b9817b37f8a47b9 在其中加入了 Qwen3.5-MoE 的 paged attention(把键值缓存划分为固定大小的块来管理的方式)服务。该模型系列此前处于一次解码多个 token 时输出会崩坏的状态。

新增的 Qwen3_5MoePagedAttention 只把门控全注意力层的注意力实现替换为 HuggingFace 的实现,并将其连接到分页 KV 缓存。线性注意力层 Gated DeltaNet 和视觉塔沿用原有类,缓存只按全注意力层的索引来确定大小并对条目做键标记,从而不给线性层分配 KV 区域。Gated DeltaNet 的 conv 与 recurrent 状态按序列分别保存,GPU 上最多只保留 max_batch_size 个序列(每个序列两个快照)。其余序列按最近最少使用顺序转移到主机内存,并在下一次 forward 时恢复。

对于图像和视频提示,使用 HuggingFace 的 get_rope_index 计算 M-RoPE 位置,并在之后的每次解码中应用按序列的 rope delta。同一个提交还以弱引用为基础,修复了 runner 与 engine 相互引用、导致引擎被丢弃后 GPU KV 存储(在 32GB V100 上每个引擎 5.4GiB)仍残留到循环 GC 才释放的问题,V100 上 test_engine.py 中的 7 次 OOM 因此消失。由于对 offload 路径的修改,Qwen3.5-MoE 常驻骨干的放置变更为 GPU 一侧。新增了模块 boundary/、serving/linear_attention_state.py 以及一个 1162 行的测试文件。

不过,线性注意力状态无法作为缓存复用,因此 prefix reuse、chunked prefill 和 speculative 执行都以 hybrid_linear_attention_state_unsupported 为由关闭,decode CUDA graph 也不在支持范围内。兼容性文档只把该功能记为 'Qwen3.5 paged serving tiny-checkpoint validated (CPU)' 这一层级,并未给出 GPU 实测性能数值。要在实际模型上做出判断,现在还为时尚早。