ValueError: Out of range float values are not JSON compliant: nan`.

该报错发生在 vLLM 使用 FP8 动态量化版 Mistral-Small-3.1(Pixtral)多模态模型处理图片请求时,且仅在启用 torch.compile / CUDA Graph 的情况下出现;优先尝试添加 --enforce-eager 启动参数绕过。

快速结论:该报错发生在 vLLM 使用 FP8 动态量化版 Mistral-Small-3.1(Pixtral)多模态模型处理图片请求时,且仅在启用 torch.compile / CUDA Graph 的情况下出现;优先尝试添加 --enforce-eager 启动参数绕过。

适用环境:vLLM v0.24.0、1x NVIDIA H100 80GB(tensor-parallel-size 1)、模型 RedHatAI/Mistral-Small-3.1-24B-Instruct-2503-FP8-dynamic(compressed-tensors FP8-dynamic),以 PixtralForConditionalGeneration 方式服务(--config-format mistral)。

最快修复方案:在 vLLM 服务启动命令中添加 --enforce-eager,即 `vllm serve RedHatAI/Mistral-Small-3.1-24B-Instruct-2503-FP8-dynamic –tokenizer-mode mistral –config-format mistral –max-model-len 32768 –enforce-eager`。

注意事项:该方案会禁用 torch.compile 和 CUDA Graph,可能带来一定的解码吞吐性能损耗;Issue 中明确这是当前可靠的 workaround,但根本修复仍在跟踪中。

问题场景

用户使用 vLLM 服务 FP8 动态量化版本的 Mistral-Small-3.1(Pixtral)多模态模型,在发起包含图片的 Chat 请求时,API 返回 400 错误;纯文本请求正常。问题仅在启用编译(torch.compile / CUDA Graph)时出现,添加 --enforce-eager 后图片请求恢复正常。对应的 bf16 基础模型在相同参数下无此问题。

报错原文

ValueError: Out of range float values are not JSON compliant: nan

服务端实际表现为:请求在 HTTP 200 路径完成,但生成的 logits/logprobs 中包含 NaN,导致 create_chat_completionjson.dumps 序列化失败。

原因分析

可能原因:FP8 动态量化过的多模态路径在 torch.compile / CUDA Graph 编译缓存下存在数值稳定性问题。Issue 中明确指出:纯文本请求在编译模式下正常,只有图片 embedding 进入序列后才产生 NaN,且只有 FP8 checkpoint + 编译模式组合会触发,bf16 基础模型不会。因此推测问题出在编译后 FP8 多模态前向传播路径上,而非单纯的 FP8 量化数值不稳定(量化后的 decoder 在纯文本下是正常的)。具体哪一层(vision_tower、multi_modal_projector 或它们与量化 Linear 的组合)被编译后产生 NaN,尚需进一步定位,Issue 中未给出根因结论。

环境排查

  • 确认 vLLM 版本为 v0.24.0(其他版本未验证)。
  • 确认显卡为 NVIDIA H100 80GB,tensor-parallel-size 为 1。
  • 确认模型为 RedHatAI/Mistral-Small-3.1-24B-Instruct-2503-FP8-dynamic,其中 vision_tower、multi_modal_projector、lm_head 在 ignore 列表中保持 bf16,仅 language-model Linear 层被 FP8 量化。
  • 确认服务启动参数中未添加 --enforce-eager(即默认启用了编译模式)。
  • 可尝试对比:同参数下使用 bf16 基础模型 mistralai/Mistral-Small-3.1-24B-Instruct-2503 是否复现。

解决步骤

  1. 在 vLLM 服务启动命令中加入 --enforce-eager,完整命令为:
    vllm serve RedHatAI/Mistral-Small-3.1-24B-Instruct-2503-FP8-dynamic --tokenizer-mode mistral --config-format mistral --max-model-len 32768 --enforce-eager
  2. 重新发起包含图片的 Chat 请求,确认不再返回 NaN 相关 400 错误。
  3. 如仍需编译模式带来的性能收益,建议关注 vLLM 上游 issue 更新或提交 PR 修复编译模式下的 FP8 多模态路径问题。

验证方法

使用添加 --enforce-eager 后的服务,向任意包含 image_url 的 Chat 请求发起调用,确认返回 200 且响应内容可正常序列化;同时确认纯文本请求仍保持正常。对比未添加该参数时的服务,相同图片请求应稳定复现 ValueError: Out of range float values are not JSON compliant: nan

参考来源

vllm-project/vllm #52034

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18287

发表回复

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