@no_stp_on_snek: https://x.com/no_stp_on_snek/status/2052833502475833384
摘要
使用 Qwen2.5-32B-Instruct 搭配 longctx 和 vllm-turboquant 的单个 AMD MI300X 开源技术栈,在 MRCR v2 百万级上下文基准测试中取得了与 SubQ 闭源模型(0.659)相竞争的结果(0.601-0.688),表明开源权重方法已接近达到同等水平。
查看缓存全文
缓存时间: 2026/05/08 19:36
Open Longctx 与 Closed SubQ 在 MRCR v2 1M 上的对比。数据凭证。
前置说明:这是一篇基准测试文章,并非针对供应商的贬低。尊重 SubQ 团队的发布及其在 MRCR v2 8-needle 1M 上下文上公布的 0.659 成绩。这是一个真实的数据,在一个艰难的基准测试上,值得谨慎回应。
总结
-
MRCR v2 8-needle 在 1M 上下文上的表现。开源权重栈:Qwen2.5-32B-Instruct + longctx + vllm-turboquant,运行在单个 AMD MI300X 上。
-
大规模验证(n=60),单查询选择器 + bge-rerank + 确定性复制:0.601。
-
定向测试(n=30),采用相同方案但前端增加多查询扇出:0.688。
-
SubQ 公布的 1M 成绩:0.659。
-
保守解读:开源方案已接近。乐观解读(待 n=80 大规模验证重跑):开源方案超越。
-
关键转变:模型从八个检索候选项中选取一个,Python 逐字节复制答案。长上下文下无需生成步骤。
我想知道在相同基准测试上,使用商品硬件、无专有架构的开源权重栈能有多接近。于是我跑了测试。
设置
硬件:单个 AMD MI300X,运行在 DigitalOcean 开发云服务器上,ROCm 7.2。模型:Qwen2.5-32B-Instruct,Apache 2.0 许可,未微调。引擎:我自己 fork 的 vllm-turboquant,使用 BF16 KV 基线,本次运行未压缩。检索:longctx,这是我最近几天一直在开发的开源配套服务。
每个组件都是开源权重、开源代码,且运行在单个租用 GPU 上。
数据
MRCR v2 8-needle,按 bin 统计 Qwen2.5-32B-Instruct 通过纯 RAG 的召回率:8K 为 0.822,32K 为 0.697,64K 为 0.641,64K(使用 2000 字符分块)为 0.670,1M 基线为 0.440。纯 RAG 是最简单的方法,在 1M 时如预期下降。
有趣的 bin 是 1M,SubQ 公布的成绩为 0.659。这里有两种 longctx 方案:
保守方案:单查询选择器 + bge-reranker-v2-m3 + 确定性复制步骤。大规模验证 n=60:0.601。低于 SubQ 绝对差值 0.058。数据可靠,保守报告。
激进方案:相同结构,前端增加多查询扇出。定向测试 n=30:0.688。高于 SubQ 绝对差值 0.029。n=80 大规模验证重跑在优先运行因 OOM 中止后待进行。
因此,保守解读是:在 1M 上,开源方案已接近。乐观解读(待大规模验证):多查询方案超越。
方案
对于想要复现的人来说,工程洞察比标题数字更重要。该方案是“模型选择证据,系统提取答案。”这与传统 RAG(模型需要根据检索到的上下文生成答案)形态不同。
第一步是多查询扇出。获取用户查询,通过一次小型上游调用生成四个释义变体。每个变体通过余弦相似度检索前 100 个块,合并结果。
第二步是重排序器。bge-reranker-v2-m3 将合并结果缩小到前八个。这是精度步骤。重排序器在 CPU 上运行,在前 100 合并时增加约八十秒,这是主要的延迟组件。
第三步是选择器。一次 LLM 调用读取前八个候选,输出一个整数索引。这是答案步骤的整个生成预算。小任务,模型容易处理。
第四步是确定性复制。Python 获取所选索引,将该候选项的文本复制到答案位置。逐字节,不涉及生成。
模型从不需要在 1M 上下文中生成逐字答案。逐字部分由 Python 完成。模型的工作仅仅是选择哪个候选项是正确的。
这就是架构上的转变。一旦你不再要求 LLM 执行复制,基于检索的长上下文就变成了不同的问题。
为什么 MRCR v2 重要
8-needle 变体意味着干草堆中包含八个与目标主题相同的干扰消息,你必须通过序号线索(如“关于 asyncio 取消的第三个助手消息”)检索到特定的消息。仅检索就能让你接近正确的簇。工作量在于簇内的过滤。
这就是选择器步骤重要的原因。模型并不是从长上下文中生成答案,而是从检索已经缩小到的小范围决赛选手中进行选择。
注意事项
诚实的清单。n=30 多查询定向 0.688 是真实的,但样本量小;标题数字可能会在 n=80 大规模验证重跑时发生变化。单查询大规模验证 0.601 低于 SubQ 的 0.659;这个差距在保守方案下是真实的。没有与 SubQ 直接对比,因为他们提供的是封闭 API;这是基准测试对基准测试,而不是模型对模型。MRCR v2 8-needle 只是一个特定的基准测试,它并不能衡量 SubQ 销售的所有长上下文能力。
与 SubQ 的不同
问题形态不同。SubQ 通过封闭的专有架构解决“适配 12M 令牌注意力”的问题,可能是在 B200 集群上运行的内容相关选择器叠加自定义 Transformer。Longctx 解决“找到相关令牌,给模型八个候选项,让模型选一个”的问题,使用开源推理引擎、检索组件和模型权重。
两者都有效。它们覆盖的工作负载高度重叠但不相同。在 MRCR v2 8-needle 这个特定基准上,开源路径已接近,并且可能通过多查询方案(待重跑验证)超越。
“开源 vs 封闭”的框架是诚实的。我并没有声称架构相同。我声称在 SubQ 用于其公布成绩的基准测试上,开源路径能够迎头赶上。
结语
n=80 大规模验证重跑是下一个里程碑。如果它超过 0.659,我将发布更新。如果低于,则开源路径处于“接近”而非“超越”状态,这在一个大量资金投入的基准测试上也是真实的结果。
尊重 SubQ。他们的工作提高了长上下文讨论的门槛。这是同一基准测试的开源栈凭证。期待在重跑结果出来后进行比较。
链接
论文:https://github.com/TheTom/turboquant_plus/blob/main/docs/papers/longctx-1m-and-triattention.md
Longctx(开源):https://github.com/TheTom/longctx
vllm-turboquant(引擎):https://github.com/TheTom/vllm-turboquant
逐 bin 曲线和原始日志:https://github.com/TheTom/longctx/blob/main/docs/results.md
相似文章
@no_stp_on_snek:mrcr v2 在 1m 长度下完成 8-needle 测试,采用开源权重堆栈,仅单台租赁 mi300x。longctx directional 0.688(n=30,mass-val 重跑待更新…
分享了一套开源模型堆栈在单卡 AMD MI300X 上运行的早期基准测试成绩与评估指标,表明其性能已具备与闭源方案竞争的实力。
@no_stp_on_snek: 长上下文实验的小更新:我在单个 MI300X droplet 上使用开源栈成功将 MRCR v2 运行到 1M 上下文长度。
作者报告成功在单个 MI300X 上使用 Qwen2.5-32B 和 FAISS 运行 MRCR v2,实现 1M 上下文长度,并以低成本获得有竞争力的分数。
成功运行 MTP + TurboQuant — Qwen3.6-27B 在单 RTX 4090 上实现 262K 上下文 80+ token/秒
开发者通过将 MTP(多 Token 预测)与 TurboQuant 的无损 KV缓存压缩技术相结合,在单张 RTX 4090 上实现了 Qwen3.6-27B 模型在 262K 上下文下 80+ token/秒的推理速度,并分享了实现分支和技术细节。
试了 Qwen3.6-27B-UD-Q6_K_XL.gguf 配 CloudeCode,真不敢相信居然能用
用户报告称,在 RTX 5090 本地运行 Qwen3-27B-UD-Q6_K_XL.gguf,200K 上下文速度约 50 tok/s,编码表现出乎意料地可用,标志着本地模型质量大幅跃升。
@ProTekkFZS:在 3090 上用 Q4_K_M 3.6 35B、768k 上下文加 YaRN,爽到飞起
用户报告称,通过 llama.cpp 分支,在 RTX 3090 上成功以 Q4_K_M 量化运行 35B 参数 MoE 模型,上下文长达 768K,仅把 8 个专家卸载到 CPU,性能依旧可接受。