Granite 4.2 models (8B/3B) do not respect safe default context ( eg. 4096) base on available VRAM and cause OOM kills

该问题通常发生在显存(VRAM)较小且内存有限(≤16GB)的消费级硬件上,加载 Granite 4.2 系列模型(8B/3B)时因模型内部固定了 num_ctx 131072 而导致 OOM。优先排查模型是否有固定的 num_ctx 参数,并尝试用 Modelfile 或环境变量显式降低上下文长度

快速结论:该问题通常发生在显存(VRAM)较小且内存有限(≤16GB)的消费级硬件上,加载 Granite 4.2 系列模型(8B/3B)时因模型内部固定了 num_ctx 131072 而导致 OOM。优先排查模型是否有固定的 num_ctx 参数,并尝试用 Modelfile 或环境变量显式降低上下文长度。

适用环境:Ollama 0.33.1;Granite 4.2 系列模型(granite4.2:8bgranite4.2:3b);集成显卡或消费级 GPU,系统内存 ≤ 16GB。

最快修复方案:Issue 中没有最终修复前,可优先尝试重新拉取模型(官方已于 2025 年更新模型移除 PARAMETER num_ctx),或使用 Modelfile 显式设置 PARAMETER num_ctx 4096 创建自定义模型,推荐后者作为确定可用的临时方案。

注意事项:该方案为 Issue 讨论中确认可用的临时性规避方式(workaround),并非官方最终修复;重新拉取模型后需确认本地模型已更新,旧版本可能仍残留问题。

问题场景

用户在 Ollama 0.33.1 环境中,使用 ollama run granite4.2:8bgranite4.2:3b 启动 Granite 4.2 模型,模型加载后约 20 秒内即被系统 OOM(Out Of Memory)杀死。此问题由 Granite 4.2 模型 GGUF 元数据中内置的 context_length = 131072 触发,Ollama 在加载模型时请求完整上下文,而没有依据剩余可用显存将安全默认值调低(例如 4096)。

报错原文

Granite 4.2 models (8B/3B) do not respect safe default context (eg. 4096) base on available VRAM and cause OOM kills

原因分析

Ollama 官方维护者确认并非 Granite 专属代码路径所致,核心原因在于模型发布端:Granite 4.2 的 GGUF 元数据中携带了 num_ctx 参数,并且该值被设置为 131072(来源于模型的 generation_config.json)。Ollama 在加载时会遵循该内置参数申请全量上下文,即便其能基于硬件计算出一个更低的安全默认值(如 4096),也仍会因参数冲突而申请完整上下文,最终导致 OOM。

环境排查

  • 确认 Ollama 版本是否为 0.33.1(该版本触发问题,后续版本请留意是否修复)。
  • 确认系统内存是否 ≤ 16 GB、显卡是否为显存有限的集成显卡或消费级 GPU。
  • 确认所使用的模型是否来自 granite4.2:8bgranite4.2:3b,拉取时间是否在模型更新之前(旧模型可能仍携带固定 num_ctx)。

解决步骤

  1. 先尝试彻底重新拉取模型(官方已将 PARAMETER num_ctx 从模型移除):
    ollama pull granite4.2:3b(或 granite4.2:8b
    若本地仍为旧版本,可先 ollama rm granite4.2:3b 删除后再拉取。
  2. 若重新拉取后依旧复现,使用 Modelfile 显式创建低上下文的模型:创建文件 Modelfile 内容为:
    FROM granite4.2:3b
    PARAMETER num_ctx 4096
    然后运行:ollama create granite4.2-ctx4096 -f Modelfile,再用 ollama run granite4.2-ctx4096 启动。
  3. 替代方案:设置服务端环境变量 OLLAMA_CONTEXT_LENGTH(例如 4096)后重启 ollama 服务再运行模型。
  4. API 临时调用方式(无需重启服务):
    curl http://localhost:11434/api/chat -d '{"model": "granite4.2:3b", "messages": [{"role": "user", "content": "hello world"}], "options": {"num_ctx": 4096}, "stream": false}'
    注意 ollama run 交互模式无法在加载前设置该参数,/set parameter num_ctx 4096 仅能在模型完成加载后才生效,无法避免 OOM。

验证方法

  1. 运行上述任一方式后,确认模型能稳定交互 20 秒以上不再触发 OOM。
  2. 执行 ollama ps 观察显存占用:相同模型在处理 4096 上下文时,显存应约为约 2.6GB,而非全量 131072 上下文时的约 13GB,即可确认参数已生效。

参考来源

ollama/ollama #18074

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22017

发表回复

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