RuntimeError: Worker failed with error ‘Unknown TurboQuant cache dtype: ‘auto’. Valid presets: turboquant_k8v4, turboquant_4bit_nc, turboquant_k3v4_nc, turboquant_3bit_nc’, please check the stac

在 A100 (SM80) 显卡上使用 vLLM 的 API 服务( vllm serve 或 vllm.entrypoints.openai.api_server )时,设置了 --kv-cache-dtype turboquant_k8v4 并加载 BF16 模型(如 Qwen/Qwen2.5-

RuntimeError: Worker failed with error 'Unknown TurboQuant cache dtype: 'auto'. Valid presets: turboquant_k8v4, turboquant_4bit_nc, turboquant_k3v4_nc, turboquant_3bit_nc', please check the stac

RuntimeError: Worker failed with error ‘Unknown TurboQuant cache dtype: ‘auto’. Valid presets: turboquant_k8v4, turboquant_4bit_nc, turboquant_k3v4_nc, turboquant_3bit_nc’, please check the stac

快速结论:该报错通常发生在 A100 (SM80) 显卡上使用 vLLM 服务 BF16 模型并启用 turboquant_k8v4 KV cache 时。优先排查是否未设置或错误设置了 --kv-cache-dtype 参数,且确认 vLLM 版本是否已包含 PR #39988 的修复。

问题场景

在 A100 (SM80) 显卡上使用 vLLM 的 API 服务(vllm servevllm.entrypoints.openai.api_server)时,设置了 --kv-cache-dtype turboquant_k8v4 并加载 BF16 模型(如 Qwen/Qwen2.5-3B-Instruct),在服务初始化阶段或首次请求时崩溃,抛出 RuntimeError: Worker failed with error 'Unknown TurboQuant cache dtype: 'auto'。实际底层错误是 Triton 编译期间的 AssertionError

报错原文

RuntimeError: Worker failed with error 'Unknown TurboQuant cache dtype: 'auto'. Valid presets: turboquant_k8v4, turboquant_4bit_nc, turboquant_k3v4_nc, turboquant_3bit_nc', please check the stack trace above for the root cause

Traceback (most recent call last):
  File "/usr/local/lib/python3.12/dist-packages/vllm/v1/executor/multiproc_executor.py", line 391, in get_response
    raise RuntimeError(...)
    
File "triton/language/extra/cuda/utils.py", line 94, in convert_custom_float8
    assert arg.type.scalar.is_fp16() or arg.type.scalar.is_fp32()
AssertionError

triton.compiler.errors.CompilationError: at 45:12:
    k_fp8 = k_vals.to(tl.float8e4b15) if FP8_E4B15 else k_vals.to(tl.float8e4nv)
            ^

原因分析

  • 根本原因:Triton 的 convert_custom_float8_sm80 软件 FP8 转换路径(用于 SM80/A100)要求输入必须是 FP16 或 FP32 类型。当模型使用 BF16 时,k_vals 被加载为 BF16 类型,导致 assert arg.type.scalar.is_fp16() or arg.type.scalar.is_fp32() 断言失败。
  • 架构特异性:此问题仅在 SM80(A100)上出现。SM89+(如 H100)有原生 FP8 硬件支持,使用不同的 Triton 代码路径,不会触发该断言。
  • 错误连显示:当底层 Triton 编译失败时,vLLM 引擎可能无法正确识别 --kv-cache-dtype 参数,从而向上层抛出“Unknown TurboQuant cache dtype: ‘auto’”错误信息。

环境排查

  • GPU 型号:确认是否在 A100 (SM80) 上运行(nvidia-smipython -c "import torch; print(torch.cuda.get_device_capability())" 应返回 (8, 0))。
  • 模型精度:确认模型是否为 BF16(使用 --dtype bfloat16 或模型自身默认精度)。
  • vLLM 版本:检查是否包含 PR #39988 的修复(该 PR 已在 vllm/v1/attention/ops/triton_turboquant_store.py:188 中添加 .to(tl.float32) 转换)。
  • Triton 版本:确认 Triton 版本(配置中的 3.x 可能因环境而异,但问题主要在于输入类型而非版本)。

解决步骤

  1. (可优先尝试)明确设置 --kv-cache-dtype 而非依赖默认值:Issue 评论中用户使用 --kv-cache-dtype turboquant_k8v4 后仍然遇到类似错误,但明确设置可避免“auto”猜测逻辑。在命令行中添加:
    --kv-cache-dtype turboquant_k8v4
  2. 升级 vLLM 至包含修复的版本:确保 vLLM 已合并 PR #39988。该 PR 在 triton_turboquant_store.py:188 中将 k_vals 先转换为 tl.float32 再执行 FP8 转换:
    # 修改前(BF16 失败):
    k_vals = tl.load(Key_ptr + base + d_offs, mask=d_mask, other=0.0)
    # 修改后(所有类型均可用):
    k_vals = tl.load(Key_ptr + base + d_offs, mask=d_mask, other=0.0).to(tl.float32)
  3. 临时使用其他 KV cache dtype:如果无法升级,可考虑使用非 turboquant 的 FP8 方案(如 --kv-cache-dtype fp8,但 Issue 评论指出 A100 暂不支持),或回退到标准 FP16/BF16(--kv-cache-dtype auto 或移除该参数)。
  4. 检查启动参数:确认 --enforce-eager(如 Issue 复现示例中所示)不是问题诱因。该参数应兼容,但可作为调试选项保留或移除。

验证方法

修复后重启 vLLM 服务(使用原参数),观察是否仍抛出 RuntimeError: Worker failed with error 'Unknown TurboQuant cache dtype: 'auto' 或底层 AssertionError。可通过一个简单请求(如 curl http://localhost:8000/v1/completions -d '{"model": "MODEL_NAME", "prompt": "hi", "max_tokens": 10}')确认服务正常运行。若不报错并正常返回结果,表示问题已解决。

参考来源

vllm-project/vllm #39992

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 14580

发表回复

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