llama-server segfaults (GPF) for all models on virtualized Granite Rapids / GCP C4 — 0.31.1–0.32.1, Docker and native; local llama.cpp build

用户在虚拟化 Intel Xeon 6 / Granite Rapids 主机(GCP C4 系列, c4-standard-24-lssd ,Xeon 6985P-C)上运行 Ollama 官方发行版(0.31.1–0.32.1,包括 Docker 和原生 Linux 安装),所有模型在首次推理时

llama-server segfaults (GPF) for all models on virtualized Granite Rapids / GCP C4 — 0.31.1–0.32.1, Docker and native; local llama.cpp build

llama-server segfaults (GPF) for all models on virtualized Granite Rapids / GCP C4 — 0.31.1–0.32.1, Docker and native; local llama.cpp build

快速结论:该崩溃发生在虚拟化 Intel Granite Rapids 主机(如 GCP C4 实例)上运行 Ollama 官方预构建二进制时,原因是工具链版本不兼容导致的代码生成错误(而非 CPU 功能掩码问题)。优先尝试删除有问题的 Sapphire Rapids 动态库,或等待包含 #17244 修复的官方发布版本。

问题场景

用户在虚拟化 Intel Xeon 6 / Granite Rapids 主机(GCP C4 系列,c4-standard-24-lssd,Xeon 6985P-C)上运行 Ollama 官方发行版(0.31.1–0.32.1,包括 Docker 和原生 Linux 安装),所有模型在首次推理时均崩溃。同一主机上本地编译的 llama.cpp 正常工作。

报错原文

llama runner process has terminated: signal: segmentation fault (core dumped)

dmesg:
traps: llama-server[37481] general protection fault ip:7b25b6b55b66 sp:7ffff18551c0 error:0
traps: llama-server[45537] general protection fault ip:74a12c671b66 sp:7fffb52e5380 error:0
traps: llama-server[69976] general protection fault ip:7444fdaf3ae6 sp:7ffc3bb60680 error:0

系统信息(崩溃前成功输出):
system_info: ... AMX_INT8 = 1 ...
load_tensors: AMX model buffer size = 2699.45 MiB

注意:尽管最初怀疑是 CPUID 掩码导致的非法指令,但 #GP (general protection fault) 通常对应的是对齐错误或代码生成问题,而非 #UD/SIGILL。崩溃指令偏移量在所有运行中一致,指向工具链问题。

原因分析

官方预构建二进制使用的编译工具链(GCC 版本)较旧,在虚拟化 Granite Rapids 主机上生成了对齐错误的向量指令(如对齐读取未对齐地址)。默认情况下,虚拟化环境可能不触发旧编译器中的某些对齐处理逻辑。本地使用 GCC 15.2.0 编译的 llama.cpp 正常工作,证实了工具链版本问题。

可能原因:Ollama 预编译的 Sapphire Rapids 变体库(libggml-cpu-sapphirerapids.so)在 Granite Rapids 虚拟机上触发了编译器 bug 或优化假设,这与 PR #17244(GCC 13 构建增强)相关联。

环境排查

  • 确认主机类型:GCP C4 系列实例(c4-standard-*-lssd)可能分配在 Granite Rapids 上;普通 c4-standard-* 可能在 Emerald Rapids 上。
  • 检查 CPU 功能:运行 grep -oE 'amx_[a-z0-9]+|avx512_fp16' /proc/cpuinfo | sort -u 确认 amx_fp16 是否被虚拟化层隐藏(预期不出现)。
  • 检查 Ollama 版本:0.31.1–0.32.1(Docker 或原生安装)均受影响。
  • 确认 GPU:此问题仅涉及 CPU 推理(无 GPU)。

解决步骤

  1. 临时删除问题动态库(可优先尝试):创建 Dockerfile 移除 Sapphire Rapids 变体库,这将导致使用较通用的 CPU 代码路径:
    FROM ollama/ollama:0.32.1
    RUN rm /usr/lib/ollama/libggml-cpu-sapphirerapids.so

    然后构建并运行自定义镜像。

  2. 本地编译 llama.cpp 或 Ollama:在目标主机上使用 -march=nativeGGML_NATIVE=ON 编译。受害者的 GCC 15.2.0 + cmake 4.2.3 环境已认证工作。
  3. 等待官方修复:包含 PR #17244(GCC 13 构建增强)的后续版本将解决此问题。GitHub 已确认 0.32.1 存在此问题,且 head + #17244 构建通过测试。

验证方法

在 GCP C4 实例上运行以下命令确认崩溃已被消除:

docker run -d --name ollama -p 11434:11434 <your-custom-image>
docker exec ollama ollama pull llama3.1:8b
curl localhost:11434/api/generate -d '{"model":"llama3.1:8b","prompt":"hi","stream":false}'

若返回 JSON 响应而非错误消息,则问题已解决。或等待官方发布版本后重新测试。

参考来源

ollama/ollama #17249

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 14263

发表回复

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