clef-flash: `Clef: non-finite logit` (HTTP 500) on /v1/systemone — Windows, reproduces on CUDA and CPU-only, also after full reinstall

调用 Ollama 的决策模型接口 /v1/systemone 并使用 clef-flash 模型时,服务端在计算 logit 阶段返回 500,报错为 Clef: non-finite logit 。从讨论看问题在 Windows 上稳定复现,优先排查是否为 Windows 构建/CPU head

快速结论:调用 Ollama 的决策模型接口 /v1/systemone 并使用 clef-flash 模型时,服务端在计算 logit 阶段返回 500,报错为 Clef: non-finite logit。从讨论看问题在 Windows 上稳定复现,优先排查是否为 Windows 构建/CPU head 计算路径的问题,而不是先怀疑显卡或模型文件。

适用环境:Ollama 0.35.1;Windows;模型 clef-flash:latest(ID 9f4115499b98,Q8_0,约 10 GB);已确认在 CUDA hybrid、纯 CPU、关闭 flash attention、切换 CPU 变体(alderlake / haswell)、重新拉取模型、完全重装 Ollama 后仍出现。触发接口为 /v1/systemone,请求处理了 147 个输入 token 后失败。

最快修复方案:暂无确认的一步修复方案。Issue 在 Linux、ROCm、Vulkan、纯 CPU 等环境上无法复现,而 Windows(含无 GPU 的 Windows VM)可复现,因此目前没有已验证的配置改动可以消除该报错。

注意事项:不要在未验证的情况下把问题归因于 NVIDIA 驱动、CUDA 版本或模型文件损坏;讨论中的代码分析属于人工/辅助代码审查推测,并非已复现的根因诊断。Vulkan-only 场景下会出现另一个不同的失败(llama-server 退出码 0xc0000409,提示预分配 tensor 无法执行 CPY 操作),应与本问题分开处理。

问题场景

用户在 Windows 上使用 Ollama 0.35.1 加载 clef-flash:latest 决策模型,通过 POST /v1/systemone 发送一个 JSON 请求(state 为 “Hello World”,questions 中有一个 says_hello 的 noul 类型判定),期望返回概率值。模型可以正常加载,prompt 也被处理了 147 个 token,但服务端在计算 scores/logit 时失败并返回 HTTP 500。

触发条件并不依赖后端:CUDA hybrid(15/33 层 offload)、纯 CPU、关闭 flash attention、切换 CPU 变体、重新 pull 模型、卸载重装 Ollama,都得到相同错误。另一名用户在无 GPU 的 Windows VM 中也复现了同样的失败;但 Linux(RTX 4070 + 驱动 580.126.09 / CUDA 13.0)、ROCm、Vulkan 以及 CPU-only 系统上无法复现。

报错原文

{"error":"{\"error\":{\"code\":500,\"message\":\"Clef: non-finite logit\",\"type\":\"server_error\"}}"}

srv send_error: task id = 0, error: Clef: non-finite logit
[GIN] POST "/v1/systemone" 500

原因分析

最可能的原因:clef-flash 的 Clef joint head 在计算 logit 时检测到非有限值(NaN/Inf),于是主动抛出 Clef: non-finite logit。该检查位于 head scoring 的末尾,只能说明结果不是有限数,并不能指出第一个产生 NaN/Inf 的具体算子。

讨论中提出的一种可能原因是:即使 backbone 被 offload 到 CUDA/Vulkan,Clef joint head 本身仍使用 CPU 后端(GGML_BACKEND_DEVICE_TYPE_CPU),因此“CUDA 和纯 CPU 都复现”并不能排除共享的 CPU head 计算路径存在问题。不过这属于代码审查推断,尚未被实际调试确认。

由于 Linux 无法复现、Windows(包括无 GPU 的 Windows VM)可复现,问题更像是特定于 Windows 构建,而不是显卡、驱动数值问题或模型文件损坏。切换 ggml-cpu-alderlake.dll 与 ggml-cpu-haswell.dll 后错误一致,也削弱了“单一 CPU 指令集变体导致”的猜测。

环境排查

  • 确认 Ollama 版本是否为 0.35.1(讨论中所有复现者均为该版本)。
  • 确认模型是否为 clef-flash:latest,ID 是否为 9f4115499b98,sha256 digest 是否与讨论一致。
  • 确认操作系统与构建:Windows 复现,Linux 未复现;是否可在 Windows VM、无 GPU 环境下复现。
  • 确认后端与显存情况:CUDA hybrid offload 层数、是否纯 CPU、是否启用 flash attention。
  • 确认 CPU 后端 dll 变体:ggml-cpu-alderlake.dll 与 ggml-cpu-haswell.dll 是否都尝试过且结果相同。
  • 如启用 Vulkan,注意区分本错误与 0xc0000409 / CPY 报错,两者可能不是同一问题。
  • 可对比测试其他决策模型:讨论中提到 tev1:4b 可正常工作,而 clef-flash 失败,可用于缩小范围。

解决步骤

  1. 先确认当前版本与模型状态:运行 ollama -v 与 ollama list clef-flash,记录版本、模型 ID 和大小。
  2. 使用讨论中的最小请求复现:向 http://localhost:11434/v1/systemone 发送包含 clef-flash、state 和 questions 的 JSON,确认是否仍返回 Clef: non-finite logit。
  3. 在纯 CPU 模式下复现(例如通过 CUDA_VISIBLE_DEVICES=-1 和 OLLAMA_VULKAN=0),确认错误是否与 GPU 后端无关。
  4. 关闭 flash attention(OLLAMA_FLASH_ATTENTION=0)再测一次,排除 flash attention 路径的影响。
  5. 重新 ollama pull clef-flash 并核对 digest,再测一次,排除模型文件下载不完整。
  6. 如问题仍存在,可尝试切换 Windows 上的 CPU 后端 dll 变体(例如让 Ollama 加载 ggml-cpu-haswell.dll 而非 ggml-cpu-alderlake.dll),并在日志中确认实际加载的 CPU backend;讨论中此操作未能解决,但可用于排除单一 CPU 变体问题。
  7. 若需要在 Windows 上继续推进,可按讨论建议提供更细粒度的日志:检查 head 输入 hidden states 以及 projection/attention 输出的有限性,以区分是 backbone 输入异常还是 head 计算过程产生 NaN/Inf。

验证方法

重新调用 /v1/systemone,若返回 200 并给出类似 "says_hello": {"type": "noul", "noul": <概率值>} 的 JSON,且 usage 中 input_tokens 为 147、output_tokens 为 0,则可认为问题已解决。若仍返回 HTTP 500 且 message 为 Clef: non-finite logit,说明问题未消除,需要按上面的环境排查继续缩小范围。

参考来源

ollama/ollama #18815

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 27714

发表回复

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