
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)。
解决步骤
- 临时删除问题动态库(可优先尝试):创建 Dockerfile 移除 Sapphire Rapids 变体库,这将导致使用较通用的 CPU 代码路径:
FROM ollama/ollama:0.32.1 RUN rm /usr/lib/ollama/libggml-cpu-sapphirerapids.so然后构建并运行自定义镜像。
- 本地编译 llama.cpp 或 Ollama:在目标主机上使用
-march=native或GGML_NATIVE=ON编译。受害者的 GCC 15.2.0 + cmake 4.2.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 响应而非错误消息,则问题已解决。或等待官方发布版本后重新测试。



