快速结论:这个报错通常出现在 Ubuntu + ROCm 环境下、机器装有 2 张及以上 AMD GPU 时,llama-server 加载任意模型都会直接崩溃。优先排查多 GPU 环境与当前 llama.cpp 构建是否匹配(重新构建后是否仍能识别全部设备、是否有 I2C/EEPROM 读取失败)。
适用环境:Ubuntu 24.04.3 LTS;llama.cpp build 7179 (4abef75f2),编译于 cc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0;ROCm 7.1.1 环境;4× Radeon Pro VII (gfx906);AsRock H510 PRO BTC+ (BIOS P1.50);Celeron G5905;4GB RAM。Issue 未提供 Python、PyTorch、CUDA 版本信息。
最快修复方案:暂无确认的一步修复方案。Issue 作者尝试过重编译(含 Debug 模式)、调整 llama-server 参数(`no-mmap`、`ngl`)、更新主板 BIOS、切换 Radeon VII/Radeon Pro VII、重装 Ubuntu 4 次、切换 rocBLAS tensorfile 版本,均未在帖中确认解决问题。
注意事项:Issue 中没有给出最终被验证的修复提交或参数组合;重编译 Debug 模式只用于抓取崩溃堆栈,不等于修复。多 GPU 崩溃的根因在讨论中未明确定位,属于尚未验证的范围。
问题场景
用户在 Ubuntu 24.04.3 上使用 ROCm 7.1.1,通过 llama.cpp 的 llama-server 加载 gpt-oss-20b-Q8_0.gguf 模型。当机器只装 1 张 AMD GPU(Radeon Pro VII,gfx906)时,20B 4bit 模型可正常加载运行;一旦安装 2/3/4 张同型号 GPU,无论模型大小、无论 llama-server 参数如何调整,都会以 Segmentation fault (core dumped) 结束。此外,在单卡构建完成后加装另外 3 张卡,llama-server 会立刻崩溃并伴随 Killed 输出,ROCm 侧报 I2C/EEPROM 读取错误。
报错原文
Eval bug: Running llama-server only possible with single AMD GPU, running multiple always causes Segmentation fault regardless of model size
llama-server -m /home/llm/llama.cpp/models/gpt-oss-20b-Q8_0.gguf --host 0.0.0.0 --port 8080
ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no
ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
ggml_cuda_init: found 4 ROCm devices:
Device 0: AMD Radeon (TM) Pro VII, gfx906:sramecc+:xnack- (0x906), VMM: no, Wave Size: 64
Device 1: AMD Radeon (TM) Pro VII, gfx906:sramecc+:xnack- (0x906), VMM: no, Wave Size: 64
Device 2: AMD Radeon (TM) Pro VII, gfx906:sramecc+:xnack- (0x906), VMM: no, Wave Size: 64
Device 3: AMD Radeon (TM) Pro VII, gfx906:sramecc+:xnack- (0x906), VMM: no, Wave Size: 64
main: setting n_parallel = 4 and kv_unified = true (add -kvu to disable this)
build: 7179 (4abef75f2) with cc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0 for x86_64-linux-gnu
system info: n_threads = 2, n_threads_batch = 2, total_threads = 2
system_info: n_threads = 2 (n_threads_batch = 2) / 2 | ROCm : NO_VMM = 1 | PEER_MAX_BATCH_SIZE = 128 | CPU : SSE3 = 1 | SSSE3 = 1 | LLAMAFILE = 1 | OPENMP = 1 | REPACK = 1 |
init: using 6 threads for HTTP server
start: binding port with default address family
main: loading model
srv load_model: loading model '/home/llm/llama.cpp/models/gpt-oss-20b-Q8_0.gguf'
llama_model_load_from_file_impl: using device ROCm0 (AMD Radeon (TM) Pro VII) (0000:03:00.0) - 16348 MiB free
llama_model_load_from_file_impl: using device ROCm1 (AMD Radeon (TM) Pro VII) (0000:06:00.0) - 16348 MiB free
llama_model_load_from_file_impl: using device ROCm2 (AMD Radeon (TM) Pro VII) (0000:09:00.0) - 16348 MiB free
llama_model_load_from_file_impl: using device ROCm3 (AMD Radeon (TM) Pro VII) (0000:0c:00.0) - 16348 MiB free
llama_model_loader: loaded meta data with 37 key-value pairs and 459 tensors from /home/llm/llama.cpp/models/gpt-oss-20b-Q8_0.gguf (version GGUF V3 (latest))
...
Segmentation fault (core dumped)
ERROR Received I2C_NAK_7B0ADDR_NOACK
ERROR WriteI2CData() - I2C error occured
Failed to read EEPROM table header
load_backend: failed to find ggml_backend_init in /home/llm/llama.cpp/build/bin/libggml-hip.so
load_backend: failed to find ggml_backend_init in /home/llm/llama.cpp/build/bin/libggml-cpu.so
原因分析
维护者在评论中要求“用 Debug 模式重新编译并附上 sigmentation fault 的堆栈”,说明当时尚不能确定根因,需要靠堆栈定位。综合帖中现象推测:
- 可能原因一:多张 gfx906 卡之间的通信或初始化路径(如 peer 访问、NO_VMM 模式下的地址映射)在 ROCm 7.1.1 下不稳定,导致加载阶段就段错误。日志中
ROCm : NO_VMM = 1 | PEER_MAX_BATCH_SIZE = 128与 4 设备同时注册正是该路径的特征。 - 可能原因二:单卡构建后再加装多卡,运行期 backend 动态库与设备枚举结果不一致,日志中的
load_backend: failed to find ggml_backend_init表明 libggml-hip.so / libggml-cpu.so 未被正确加载,这可能直接导致后续空指针崩溃。 - 可能原因三:ROCm 侧 I2C/EEPROM 读取失败(
Failed to read EEPROM table header)指向主板/PCIe 拓扑层面(该主板为 H510 PRO BTC+ 多卡矿板布局),可能引发设备初始化异常。
以上均为基于日志的推测,Issue 中未给出确认的根因。
环境排查
- 确认 GPU 数量与型号:是否 ≥2 张 AMD GPU,是否为 gfx906(Radeon VII / Radeon Pro VII)。
- 确认 ROCm 版本:本 Issue 为 ROCm 7.1.1(Ubuntu 24 无法安装 ROCm 5.6)。
- 确认 llama.cpp 构建:build 7179 (4abef75f2),Debug 模式下编译,观察是否出现
load_backend: failed to find ggml_backend_init。 - 确认构建目录下
libggml-hip.so与libggml-cpu.so是否存在且可被加载。 - 确认 llama-server 参数:Log 显示
n_parallel = 4、kv_unified = true(可用-kvu关闭),排查是否与多并行请求相关。 - 确认 rocBLAS tensorfile 版本:作者试过 6.4.4 与 7.1.0-2,两者都未解决。
- 确认主板/BIOS 与 PCIe 拓扑:AsRock H510 PRO BTC+,BIOS P1.10 → P1.50 更新后无效。
- 确认系统内存:4GB RAM,多 GPU + 大模型加载时是否引发 OOM 相关异常,可一并观察 dmesg。
- 确认系统信号:关注 dmesg / journalctl 中的 I2C、EEPROM、amdgpu、rocm 相关报错。
解决步骤
- 按维护者建议,用 Debug 模式重新构建以获取崩溃堆栈:
cmake -B build -DCMAKE_BUILD_TYPE=Debug(作者在评论中确认了这一假设),然后按原有方式运行 llama-server 复现崩溃。 - 保留 Debug 构建下的完整 stdout/stderr 与 core dump,重点看
load_backend: failed to find ggml_backend_init in .../libggml-hip.so之后的第一处崩溃点。 - 确认构建产物完整性:检查
build/bin/下libggml-hip.so、libggml-cpu.so是否存在、是否与当前 llama.cpp 提交同版本;如缺失可优先尝试清理 build 目录后完整重编译(该操作为可优先尝试,Issue 未明确验证)。 - 若生产环境只需单卡可用,可优先尝试先只在 1 张 GPU 上运行,以隔离是“多卡”本身还是“模型/参数”问题(作者已确认单卡正常)。
- 在复现日志中核对所有已注册设备数(本 Issue 为 4 个 ROCm 设备 + 1 个 CPU 设备)与实际装机数是否一致,若不一致说明 backend 枚举与运行期不一致,需从重编译方向继续排查。
- 若出现
ERROR Received I2C_NAK_7B0ADDR_NOACK/Failed to read EEPROM table header等 I2C 报错,记录发生时间点,与 llama-server 崩溃时间对照,判断是否是同一触发路径。
验证方法
使用原命令(例如 llama-server -m /home/llm/llama.cpp/models/gpt-oss-20b-Q8_0.gguf --host 0.0.0.0 --port 8080)再次启动,观察:
- 进程是否仍以
Segmentation fault (core dumped)退出; - 日志中是否仍出现
load_backend: failed to find ggml_backend_init in .../libggml-hip.so; - 是否仍打印 I2C/EEPROM 相关 ERROR;
- 模型是否能完整加载并对外提供服务(HTTP 端口可访问并正常返回推理结果)。
以上全部正常,才可认为问题已解决。Issue 中未给出被确认的修复状态,判断时以本机复现结果为准。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![[Bug]: --gpu-device-id has no effect when used with --directml on an AMD GPU](https://www.chat-gpts.plus/wp-content/uploads/2026/09/4024-b3734cdf-768x403.jpg)
