AREX Feed Article
vLLM 宣布首日支持 Recursive 的 Flint:单张 GB200 上达约 500 tokens/s,每层内核启动从 22 次降至 7 次
推理框架 vLLM 于 10 月 21 日(北京时间 10 月 22 日凌晨)在宣布,为 Recursive 的 Flint 模型提供 Day-0(发布首日)支持:NVFP4(NVIDIA 的 4-bit 浮点格式)与 BF16(bfloat16,16 位浮点格式)两种精度的 checkpoint(权重文件)当天就能在 vLLM 上运行。Flint 是 Recursive 当天放上 Hugging Face 的混合专家(MoE)模型,总参数 40B,每 token 只激活 2.5B。
帖文给出的核心数字是:得益于激活参数少,vLLM 的定制 NVFP4 内核把 Flint 推到单张 GB200 上约 500 tokens/s 的解码速度——条件是单请求、100K token 上下文,并且不使用投机解码(speculative decoding)。vLLM 同时称,这是与 Recursive 合作的结果:借助定制内核和激进融合(aggressive fusion),每层内核启动次数从 22 次降到 7 次。这些数字均出自 vLLM 官方口径,配套博客和合并中的代码 PR 给出了测试条件与逐项精度对照。
图:vLLM 博客《Day-0 Support for Flint on vLLM》头图。
发布当天能拿到的东西:一个 Docker 镜像、两个 checkpoint、一份待合并的 PR
按 的说法,Day-0 交付有三样东西。第一样是 Docker 镜像 vllm/vllm-openai:flint(x86_64 与 arm64 架构,CUDA 13.0),Flint 支持已内置,docker run 一条命令即可起一个 OpenAI 兼容服务。
模型侧有两个 checkpoint:RecursiveSI/flint(BF16 safetensors)和 RecursiveSI/flint-nvfp4-gguf(NVFP4 量化版,GGUF 文件格式)。NVFP4 这份有个使用细节——config 和 tokenizer 要从 BF16 仓库取,启动时用 --hf-config-path 和 --tokenizer 指向 RecursiveSI/flint。
代码侧,(提交者 WoosukKwon)正在合并进 vLLM 主线,模型代码与 Flint 专用的小批量解码内核放在 vllm/models/flint/ 目录下。
服务配置也有两处针对性安排。Flint 输出 GLM-4.7 风格的工具调用和思考块,因此启动命令要求挂上 glm47 工具调用与推理解析器,并加 --exclude-tools-when-tool-choice-none,在 tool_choice 为 "none" 时把工具定义从提示中剔除,与 Recursive 参考实现保持一致。默认采样设置为 temperature 1.0、top-p 0.95、top-k 20;推理内容会计入 max_tokens,博客建议难题至少留 32K。
Flint 是什么:49 层 MoE 里只有 14 层看得到全部上下文
按 与 vLLM 博客的描述,Flint 是一个 49 层的 pre-norm MoE Transformer:2 层稠密 MLP 打底,其余 47 层走 MoE,隐藏维 2048。「40B-A2.5B」是取整后的型号叫法——模型卡标注总参数 39.8B,2.5B 的激活口径含输出头、不含完整输入嵌入矩阵,仅模型主体约 2.2B。Recursive 在模型卡里给它的定位是编码 agent 模型:调查代码库、修 bug、实现功能、写测试,支持文本输入输出、推理和多轮工具调用。
这个设计把 KV cache 的开销压在少数几层上。49 层中 35 层只看 513 个 token 的滑窗(当前 token 加前 512 个,带 RoPE(旋转位置编码)),另外 14 层看全部上下文、不带位置编码;只有这 14 层为整段序列保留 KV cache,成本为每 token 28 KiB。注意力用 GQA(分组查询注意力,32 个 query 头、4 个 KV 头,头维 128),配每头 Q/K RMSNorm 和可学习的 attention sinks。47 个 MoE 层每层设 256 个路由专家、sigmoid top-6 激活,外加一个常驻共享专家。词表 150,144,模型卡记载的上下文配置为 262,144 token(Recursive 自己的则称支持到 512K、建议控制在 256K 以内),知识截止 2026 年 6 月,权重以 Apache 2.0 许可发布。
成绩单是 Recursive 自报的(模型卡注明 † 标记为 Recursive 自测,对比模型分数为各开发方报告):Terminal-Bench 2.1 得 54.9%,SWE-bench Pro v2 得 89.7%,SWE-bench Verified 得 74.2%。发布公告称,Flint 在总参数 50B 以下的 MoE 中处于 agentic coding 基准的领先位置,并比分数相近的 25~40B 稠密模型快 5 倍以上。
图:Recursive 发布公告中的基准对比图,对比对象为可运行在类似硬件上的本地模型。
NVFP4 checkpoint 的来历也由 Recursive 做出解释:其自动化研发系统 Eureka Machine 参与了从架构搜索、量化方案到内核的全流程——架构搜索从 35B 总参、3B 激活的基线出发,最终选定 40B/2.5B 配置;量化阶段按公告说法「与常见做法相反」地把输出层 lm_head 也压到 4 bit,再用 16-bit 模型当老师做离线蒸馏补回精度,最终 NVFP4 模型在其基准上与 16-bit 的差距在 0.7 分以内。整场开发是小团队在不到四个月里从零完成的,这是 Recursive 的叙述。模型卡另附一条非 vLLM 路径:BF16 权重下载约 80 GB,配套的 SGLang 方案按单卡 B300 或 H200 一副本部署,Transformers 建模代码则尚未包含在内。
从 1,096 个内核到 346 个:Flint 专用内核的逐项替换
vLLM 博客交代了数字的来路。第一版实现直接用 vLLM 通用层拼装,小批量下很慢:一次解码步(decode step)要启动 1,096 个内核,其中不少是为大批量调优的。团队随后把内核逐个换成 Flint 专用版本,每个都对照参考实现检查。
单张 GB200 上、分两种形状测得的逐项收益——batch-1 解码(100K 上下文)与 8K token prefill(预填充):Q/K 归一化、RoPE 和 KV cache 写入融成一个内核,降 8%;为小批量重写的 MoE 内核降 27%——router 和专家 GEMV 只读被选中专家的权重,这项同时是 prefill 侧最大的增益;复用同一份打包 NVFP4 权重的小批量稠密 GEMV 降 25%;按参考舍入点实现的 norm 与 SiLU 内核降 10%;带 attention sinks 与滑窗的 CuTe DSL 解码注意力降 5%;最后加上低延迟解码路径,降 14%。
累计效果:NVFP4 的 batch-1 解码前向从 4.81 ms 降到 1.78 ms(2.7 倍),BF16 从 3.53 ms 降到 2.34 ms(1.5 倍),8K token prefill 从 207 ms 降到 145 ms(1.4 倍);一次前向的内核总数从 1,096 个降到 346 个。换算到端到端,batch-1、100K 上下文下每 token 2.06 ms,约 485 tokens/s——这已包含 LM head 和采样开销,帖文与博客标题中的「约 500 tokens/s」即由此而来。PR 注明测试工具为 vllm bench forward,单卡无张量并行(TP=1)、100K token 上下文。
七个内核的依赖链:低延迟路径、无损重排与参考舍入
「每层从 22 次降到 7 次」说的是最多 8 个并发解码请求时的低延迟解码路径。vLLM 在中把这项改动归为两家合作;博客拆开了这 7 个内核:Q/K 归一化、RoPE、路由和专家结果合并分别融进相邻的 GEMV 内核,每个内核都通过编程式依赖启动(programmatic dependent launch)衔接——前一个还在执行时,下一个就开始加载权重。
NVFP4 checkpoint 的处理方式写在 PR 里:GGUF 文件中的块是 NVIDIA 的 NVFP4 4-bit 浮点格式(64 值超块由 4 组「UE4M3 scale + 16 个 E2M1 码」构成,每张量一个 FP32 scale,MoE 权重按专家计),vLLM 在加载时无损重排成 ModelOpt NVFP4 布局,按 weight-only 的 W4A16 运行——权重 4 bit,激活与 KV cache 保持 BF16,与 Recursive 参考实现一致。
精度方面,所有 Flint 内核遵循参考实现的舍入点。PR 附的验证表显示:GSM8K 上 BF16 与 NVFP4 均为 0.950;GPQA-Diamond 为 0.721 与 0.696;提示最长达 114K token 的 MRCR 为 0.47 与 0.46;19 个案例各跑 10 次的工具调用套件,两种精度全部通过。验证采用提示词对数概率(prompt-logprob)与 FP32 参考前向之间的 KL 散度作判据——PR 解释,模型在 BF16 下病态(ill-conditioned),一个独立 BF16 实现与 FP32 的 top-1 token 一致率也只有 90~96%,因此改用这一判据而非逐位对比。271 项单元测试覆盖每个内核与 GGUF 重排,CI 在 B200 和 CPU 上各加了一步。
这套定制内核的适用边界也写在文档里:只针对单张 Blackwell GPU(TP=1、BF16 KV cache),TP>1、专家并行或非 Blackwell 配置一律回退 vLLM 标准层。1.78 ms 前向和 485 tokens/s 这组数字,目前只在单卡 Blackwell 上成立。
模型上线两个多小时后 vLLM 发推,Recursive 方帖下致谢
时间线是:UTC 时间 10 月 21 日 14:20 左右,Flint 权重更新到 Hugging Face;两个多小时后的 16:45(北京时间 22 日 0 点 45 分),vLLM 发推宣布 Day-0 支持。
Recursive 方在帖子下很快回应。Tim Shi 在中逐一点名致谢 vLLM 团队成员——@simon_mo_、@woosuk_k、@KaichaoYou、@rogerw0108、@profjoeyg、@istoica05——以及整个 vLLM 团队。Richard Socher(其 X 简介自述为 Recursive 的 CEO)在中写道:「你们让它本地跑起来变得这么容易,我们为此感到兴奋。」
本地运行正是 Recursive 给 Flint 定的位置。发布公告称模型可与 llama.cpp、Ollama、Unsloth、LM Studio、vLLM、SGLang 配合使用,并同步放出轻量引擎 rec(面向 M4 Pro 与 M5 Pro/Max);按 Recursive 自家引擎的口径,Flint 在 M4 Pro 上超过 125 tokens/s,在 64GB RTX Spark 上超过 150 tokens/s(短上下文)。
图:Recursive 发布公告中的 M4 Pro 对比图,纵轴为六项基准的平均分,横轴为 128K 输入上下文下的解码速度。
眼下要在 vLLM 上跑 Flint,现成的是 Day-0 镜像加两个 checkpoint;在 PR #62938 合并进主线之前,装正式发行版的用户要么等合并,要么自行构建包含该 PR 的版本。
参考链接
- _