[Bug][ROCm/gfx942]: DeepSeek-V4-Flash silent retrieval corruption for prompts ≥ ~4-5k tokens (AITER sparse indexer)

这类静默检索损坏通常出现在 ROCm/gfx942 上运行 DeepSeek-V4-Flash/Pro 并启用 AITER 稀疏索引器(DSA indexer)的长上下文场景中;当压缩后的候选 token 超过 index_topk 、开始真正发生 top-k 选择后,服务器不会报错,但 needl

快速结论:这类静默检索损坏通常出现在 ROCm/gfx942 上运行 DeepSeek-V4-Flash/Pro 并启用 AITER 稀疏索引器(DSA indexer)的长上下文场景中;当压缩后的候选 token 超过 index_topk、开始真正发生 top-k 选择后,服务器不会报错,但 needle 检索会随“被丢弃候选比例”升高而逐步失效,应优先排查稀疏索引器路径而不是上下文长度本身。

适用环境:AMD Instinct MI325X(gfx942)×8,ROCm 7.14.0,amdgpu 6.19.14;镜像 vllm/vllm-openai-rocm:nightly(2026-08-12,v0.26.1rc1.dev668+g3ee2df303;后续在 digest sha256:9015ed3… 的 nightly、vLLM 0.27.2rc1.dev77+gac7509e2b 上也复现);模型 DeepSeek-V4-Flash-0731 与 DeepSeek-V4-Pro-0813,TP=8,--kv-cache-dtype fp8_ds_mla,attention backend DEEPSEEK_SPARSE_SWA

最快修复方案:暂无确认的一步修复方案。Issue 中明确验证过的缓解方式是把 prompt 控制在索引器密集旁路分支内(即候选数 ≤ index_topk,例如 Fingerprint 中 ~1,900 token 时候选 478 ≤ 512,检索 3/3);超过该阈值后没有已验证的配置级修复。

注意事项:回迁 #51252、强制 num_splits=1/num_kv_splits=1 均已测试且无效;两个已确认的 gfx942 硬件缺陷本身也不能单独解释该检索失败。故障具有随机性,同一 prompt 多次运行结果可能不同,不出现 crash 或日志报错,容易被误判为模型能力问题。

问题场景

用户在 8× AMD MI325X(gfx942)上以 TP=8 部署 DeepSeek-V4-Flash-0731(--kv-cache-dtype fp8_ds_mlaattention backend DEEPSEEK_SPARSE_SWA),通过 OpenAI 兼容端点做长上下文 needle-in-haystack 与事实检索测试时触发。短 prompt 与 GSM8K 类短问答正常,但 prompt 增长到约 4–5k token 阈值以上后,模型声称 needle 不存在、输出质量整体退化,甚至一直生成到 max_tokens 而没有答案。同一 8×MI325X 环境下 DeepSeek-V4-Pro-0813 也复现相同特征(该 checkpoint 为 61 层、index_n_heads=64index_head_dim=128index_topk=1024,与 Flash 的 43 层、index_topk=512 几何不同)。

报错原文

[Bug][ROCm/gfx942]: DeepSeek-V4-Flash silent retrieval corruption for prompts ≥ ~4-5k tokens (AITER sparse indexer)

该问题没有传统异常堆栈,典型表现是“healthy server, silently wrong results”:服务健康、无报错、无崩溃,但检索结果由 3/3 变为 0/3,或返回被损坏的数字串。

原因分析

更可能的原因在 AITER/DSA 稀疏索引器这条路径上,且与 prompt 长度不是简单线性关系,而是由被丢弃候选的比例决定:当 indexer_metadata.max_seq_len // self.compress_ratio <= self.topk_tokens 时,索引器完全跳过打分,走 _fill_short_context_topk_indices(...) 稠密旁路;一旦候选数超过 index_topk * compress_ratio,才开始真正的 top-k 选择,丢弃比例随上下文上升,选出的 token 子集逐步变差。测得的曲线也支持这一点:~1,900 token(候选 478 ≤ 512)为 3/3,5,294 token(候选 1323,丢弃 61%)为 0/3,10,411 token(候选 2602,丢弃 80%)为 0/3。

另外,用同一 prompt、temperature=0 且前面前缀缓存命中的重复实验出现 2/3 → 2/3 → 0/3 的随机差异,说明 decode 侧的 token 选择也存在非确定性错误,至少不完全是 prefill 阶段的问题。该失败也被认为与 #40018(gfx950 上 ROCM_AITER_MLA_SPARSE 在 prompt_len > ~20K 时输出垃圾)属于同一类问题的 gfx942 版本,只是阈值更低(约 4–5k)。

Issue 中同时确认了两个 gfx942 硬件层面缺陷,但报告者明确说明它们单独不能解释本次检索失败,因此不应把它们当作根因结论。

环境排查

  • 确认 GPU 型号与架构是否为 gfx942(MI325X),以及 ROCm / amdgpu 版本(Issue 为 ROCm 7.14.0、amdgpu 6.19.14)。
  • 确认 vLLM 镜像与版本,例如 vllm/vllm-openai-rocm:nightly 及对应 commit / v0.26.1rc1.dev668+g3ee2df303 或 v0.27.2rc1.dev77+gac7509e2b。
  • 确认模型与并行配置:DeepSeek-V4-Flash-0731 / V4-Pro-0813,TP=8,--kv-cache-dtype fp8_ds_mla,attention backend DEEPSEEK_SPARSE_SWA
  • 确认 index_topkcompress_ratio(Flash-0731 为 512;Pro-0813 为 1024),并计算目标 prompt 的压缩后候选数是否已超过 index_topk
  • 确认是否应用过 #51821、#52058、#51252 等 backport;Issue 指出该失败在无这两个 open-PR backport 时同样复现,且 #51252 对此路径无效。
  • 确认 max_model_len(131,072 与 1,048,576 表现一致)与 max_num_batched_tokens(16,384 时 12k 单 chunk prompt 仍失败),以排除上下文长度和 chunked-prefill 边界的干扰。
  • 确认是否强制过 AITER fp8_mqa_logits 的 split-KV 参数(num_splits=1),该尝试已证明无改善。

解决步骤

  1. 先用 Issue 提供的 needle_test.py 脚本对 OpenAI 兼容端点做阈值确认:python3 needle_test.py <api-key> 4000 预期 3/3,python3 needle_test.py <api-key> 6000 预期 0/3,以此复现“静默损坏”而不是服务异常。
  2. 记录每次运行的 prompt token 数、压缩后候选数(C4A)、被丢弃比例与检索命中数,按 Issue 的表格方式整理,判断是否落在“候选数 > index_topk、开始真正 top-k 选择”的区间。
  3. 在排查长上下文问题前,先把 prompt 压回索引器稠密旁路分支(候选数 ≤ index_topk)做对照;如果短 prompt 全部 3/3、越过阈值后跌到 0/3,可把问题范围收窄到稀疏索引器路径。
  4. 逐项排除已被 Issue 否定或无关的变量:max_model_len、chunked-prefill 边界、#51252 backport、AITER fp8_mqa_logits split-KV 启发式。不要在这些方向上继续投入。
  5. 由于失败具有随机性,同一 prompt 至少重复运行多次(Issue 在 ~10.4k token、temperature=0、前缀缓存命中下得到 2/3 → 2/3 → 0/3),避免用单次结果下结论。
  6. 可优先尝试的方向是把问题定位到 decode 侧索引器的 token 选择路径,并记录 gfx942 上 DSA 路径的硬件测量与两个已确认缺陷,作为向 ROCm/AITER/vLLM 维护者反馈的证据;但在官方修复前,不要把它当作已验证的一步修复方案。

验证方法

用同一套 needle 脚本在固定 prompt 长度上重复执行并统计命中率:越过阈值前应稳定 3/3,越过阈值后应能观察到命中率随丢弃比例下降,且同一 prompt 多次运行结果可能波动。若服务端始终不报错、短 prompt 事实探针正常,而长 prompt 检索失败,即可确认仍是本 Issue 描述的静默损坏,而不是服务崩溃或模型本身能力问题。

参考来源

vllm-project/vllm #52109

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25291

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注