快速结论:该报错通常出现在 Mac(Apple Silicon)上用 Ollama 0.40.x 加载 qwen3.6:35b-mlx 并处理较长上下文(如 65,536)时,MLX runner 的 KV 缓存(prefix cache)在解码过程中偏移越界,导致进程 panic。优先确认是否为 MLX 路径,然后切换到 llama.cpp 路径的同模型量化 tag 以绕过。
适用环境:MacBook Pro M1 Pro(Apple Silicon,32 GB 统一内存);Ollama 0.40.0、0.40.1-rc0(报错出现),0.35.0 正常;MLX 0.32.3-53-ga59cc23;模型架构 Qwen3_5MoeForConditionalGeneration;客户端 LiteLLM,Ollama provider,流式补全;请求上下文 65,536,最大输出 16,384;并行请求 1。Ollama 版本与 GPU/CPU 字段在原 Issue 中未填写。
最快修复方案:Issue 中维护者的建议是:在带修复的版本发布前,使用该模型的 q4_K_M tag 等价版本,让 Ollama 走 llama.cpp 而不是 MLX 路径。这是目前明确给出的可用规避方法。
注意事项:根因修复依赖上游 ml-explore/mlx#4643 合并并由 Ollama 更新 MLX 后才可用;该 PR 当时尚未合入。切换 tag 属于规避,不是对 MLX 前缀缓存逻辑的修复,量化 tag 的输出质量与行为可能与原 MLX 版本存在差异,需要按业务场景自行验证。
问题场景
用户在 MacBook Pro M1 Pro(32 GB)上运行 Ollama 0.40.x,通过 LiteLLM 的 Ollama provider 调用 qwen3.6:35b-mlx,处理一条上下文约 3,990 tokens、配置上下文长度 65,536、最大输出 16,384 的科学论文分析请求(首段 context-objectives)。在 Ollama 0.35.0 上同一负载、同一配置可正常完成;升级到 0.40.0 和 0.40.1-rc0 后,在模型加载和 prompt 处理完成后、开始生成首个报告段落时崩溃。作为对照,同一 Ollama 0.40.0 上另一个 MLX 模型 gemma4:e4b-mlx 跑同一应用管线正常,说明问题更偏向 Qwen 3.6 的 MLX 运行时路径,而非 0.40.x 整体不可用。
报错原文
mlx runner failed: panic: cache: offset 5335 exceeds 5334 stored keys
LiteLLM Proxy:ERROR: Unable to parse ollama chunk
{'error': 'mlx runner failed: panic: cache: offset 5335 exceeds 5334 stored keys'}
mlx runner failed: panic: mlx: Maximum threads per threadgroup is 896
but requested 1024 for kernel
sdpa_vector_2pass_1_bfloat16_t_256_256_nomask_qnt_c_nosinks_128.
at .../mlx/c/transforms.cpp:15
panic: cache: offset 3993 exceeds 3992 stored keys
litellm.exceptions.APIConnectionError:
OllamaException - {"error":"mlx runner failed: panic: mlx:
Maximum threads per threadgroup is 896 but requested 1024 ..."}
Unable to parse ollama chunk -
{'error': 'mlx runner failed: panic: cache: offset 3993 exceeds 3992 stored keys'}
原因分析
维护者在 Issue 中判断,这与 #18846 是同一个底层根因,只是 KV 缓存把真正的底层错误掩盖了。从第二个复现报告看,最先触发的是 MLX 的 Metal 内核 panic:sdpa_vector_2pass_1_bfloat16_t_256_256_nomask_qnt_c_nosinks_128 内核请求了 1,024 线程的 threadgroup,而 M1 Pro 上该上限为 896;随后 runner 报告前缀缓存偏移 panic(offset 5335 exceeds 5334 stored keys / offset 3993 exceeds 3992 stored keys)。因此前缀缓存偏移越界很可能是在首个 Metal 内核失败后、清理或解码路径中产生的二次失败,而非独立的首发原因。是否与投机解码、流水线解码或长上下文(65,536)配置直接相关,Issue 中未给出确认结论,仍属于待查范围。
环境排查
- 确认 Ollama 版本:出现问题的为 0.40.0 与 0.40.1-rc0,0.35.0 正常;请确认是否处于该回归区间。
- 确认模型 tag 与运行后端:是否为
qwen3.6:35b-mlx(MLX 路径),而非 llama.cpp 路径的量化 tag。 - 确认 MLX 版本:报错环境为 0.32.3-53-ga59cc23。
- 确认硬件与统一内存:Apple M1 Pro,32 GB。
- 确认请求参数:上下文长度 65,536、最大输出 16,384、temperature 0.1、top_p 0.95、top_k 20、min_p 0.0、presence_penalty 0.0、repeat_penalty 1.0、reasoning effort none、并行请求 1。
- 确认客户端调用方式:LiteLLM 的 Ollama provider,流式 completion,指向
http://127.0.0.1:11434,观察/api/generate是否返回 500。 - 查看 Ollama 服务端日志中的 MLX 初始化信息(
MLX engine initialized、MLX version、device=gpu、mlx runner is ready)以及 prompt 处理进度,确认崩溃发生在 prompt 处理之后、生成阶段。 - 对照组验证:用同一 Ollama 0.40.x 跑其他 MLX 模型(如
gemma4:e4b-mlx),若正常,则进一步支持问题集中在 Qwen 3.6 的 MLX 路径。
解决步骤
- 可优先尝试:将模型从
qwen3.6:35b-mlx切换为对应的q4_K_Mtag 等价版本,使 Ollama 走 llama.cpp 后端而非 MLX,从而绕过该 MLX runner panic(维护者给出的临时方案)。 - 若必须使用 MLX 路径,可暂时回退到 Ollama 0.35.0(原报告者已验证在该版本下同一生产负载稳定)。
- 等待上游 ml-explore/mlx#4643 合并、Ollama 随之更新 MLX 后再升级验证;维护者同时表示会改进 KV 缓存代码,使后续错误能更清晰地暴露出来。
- 若需要协助定位,按 Issue 中承诺的可提供内容准备:额外日志、精确请求 payload、模型信息或最小复现。
验证方法
使用与原报告相同的负载与配置,重新发起那条上下文约 3,990 tokens、上下文长度 65,536 的生成请求,确认:Ollama 服务端不再输出 mlx runner failed: panic: cache: offset ... exceeds ... stored keys;/api/generate 不再返回 500;LiteLLM 不再出现 Unable to parse ollama chunk;论文分析管线的首个 context-objectives 段落可正常生成完成。若切换为 q4_K_M tag,请以同一请求做对比,确认输出可用且性能满足业务要求。
参考来源
ollama/ollama #18856
ollama/ollama #18846(维护者指出为同一底层根因)
ml-explore/mlx#4643(维护者指出的上游修复 PR)
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


