ddr3 x99 7900XTX vulkan 后端的llama速度60 t ,有个功耗不能满载问题
-
x99 ddr3 64GB ubuntu26 vulkan 后端llama.cpp 的 qwen3.8 27B 7900XTX 速度大约60token /s/
就是在我的机器上有一个电源reset 的问题。
需要启动llama第二次才会满速和满载显卡功耗。
rocm 后端就可以满载功耗,但是速度只有30token 每秒。
————————————【实际启动命令】(~/.config/systemd/user/llama-server-vulkan-qwen38.service) /home/hong/Desktop/llama.cpp/build-vulkan/bin/llama-server \ -m /home/hong/Desktop/Qwen3.8-27B-Uncensored-Q4_K_M.gguf \ --host 0.0.0.0 --port 8086 \ -ngl 99 -c 102400 --n-predict 30000 \ --cache-type-k q8_0 --cache-type-v q8_0 \ --batch-size 512 --ubatch-size 256 --parallel 1 \ --load-mode mlock \ --spec-type draft-mtp --jinja \ --api-key KEY 服务附加配置: Environment=GGML_VK_DISABLE_COOPMAT=1, LimitMEMLOCK=infinity, Restart=on-failure (10s), 模型 = Vulkan 后端 + Qwen3.8-27B-Uncensored Q4_K_M (标准量化), MTP 草稿模式。 【关联的显卡 reset 命令】(ExecStartPre, 每次启动服务前自动执行) ExecStartPre=/usr/bin/sudo /usr/local/bin/gpu-reset.sh gpu-reset.sh 脚本内容 (card1 固定写死): GPU=/sys/class/drm/card1/device 1. 循环等待 reset 节点就绪 (最多 60 秒) 2. echo on > $GPU/power/control 3. echo high > $GPU/power_dpm_force_performance_level 4. sleep 1 5. echo 1 > $GPU/reset # GPU 硬重置, 期间的 I/O error 属正常 6. sleep 10 7. echo on > $GPU/power/control # 重置后恢复 8. echo high > $GPU/power_dpm_force_performance_level 即: 先把电源控制设为 on + 强制高性能档 → 对 GPU 写 reset=1 做硬重置 → 等 10 秒 → 重新 on + high。这就是解决开机后 Vulkan 首次启动慢 / DPM 卡死的那个 reset。 注意: 记忆里 gpu-reset.service 自启已禁用, 但 #6 服务自身 ExecStartPre 仍带这个 reset, 所以每次 (re)start 都会触发一次。 【平均速度】(journalctl 历史, 5235 个采样) - 全历史: p50 = 44.9 t/s, p90 = 60.0, max = 76.2 (含降速坏日, 被拉低) - 健康日 (8/18, 8/20, 8/31, 9/1): 日均 52-58 t/s, 9/1 最高 71.3 - 降速故障日: 13-17 t/s (RADV shader 缓存损坏 / 开机首启 DPM 卡死) 结论: 正常状态平均约 52-58 token/s, 峰值可到 71-76; 故障时跌到 13-15, 重启一次服务即恢复。─────────────────────────────────
整理如下(基于历史排查记录,均为本机实测):【现象】显卡无法满载 - 推理速度从正常的 50-88 t/s 跌到 10-28 t/s - 功耗不满:满载应 250-350W,故障时只有 140-200W,甚至 <100W - 有时 sclk/mclk 已满频、GPU 98-100%,但功耗低、token 产出只有 1/6(GPU 空转) - 典型特征是"时好时坏":按天交替 52→14→56→17→13 t/s 【四种已知根因】 1. RADV shader 缓存损坏(最常见) 特征:间歇性复发 + 功耗 140-200W 不满载 + 缓存只有几 MB 修复:停服务 → mv ~/.cache/mesa_shader_cache 改名备份 → 重启服务 效果:13 → 67 t/s。注意 2026-08-30 有一例清缓存无效(需走 A3 对照) 2. Vulkan DPM 电源状态卡死 特征:sclk 卡最低档(0MHz*) 或 mclk 卡 456MHz,功耗 <100W 修复:restart 服务;无效则 echo high 强制高性能;再无效 reboot 3. 开机后首次启动服务必慢(GPU 硬重置与 GDM 显示栈冲突) 特征:开机第一次启动 13-15 t/s,restart 一次即恢复 52 t/s 现状:已接受此 workaround,不再深究根治 4. 模型文件是混合量化配方 特征:文件名 Q4_K_M 但张量混 f32/q8_0/q5_K/q6_K,走 Vulkan 通用慢路径 表现:14.5 vs 标准量化 63 t/s(字节数只差 5% 但速度差 4 倍) 修复:llama-quantize --allow-requantize 重量化为标准 Q4_K_M 【判定顺序】 1. journalctl 查该服务历史 tg 分布 → 一直慢还是间歇性 2. 查 sclk/mclk 档位 + 功耗 → 排除电源卡死 3. 分不清就做 A3 对照:停 Vulkan 服务,用 ROCm build 跑同一模型 - ROCm 快 (40+) = RADV 层问题 → 清 shader 缓存 - 两者都慢 = 系统层(内核/DKMS/PCIe) 【当前处置(2026-08-30 起生效)】 - 开机后启动服务若慢(<20 t/s)→ 手动 restart 一次即恢复 50+ - perf 已改回 auto(待机省电),gpu-reset/gpu-perf-high 服务已禁用,udev 规则已备份 - 完整诊断手册在 llama-cpp-performance-troubleshooting 技能里,需要时可随时取用 -
x99 ddr3 64GB ubuntu26 vulkan 后端llama.cpp 的 qwen3.8 27B 7900XTX 速度大约60token /s/
就是在我的机器上有一个电源reset 的问题。
需要启动llama第二次才会满速和满载显卡功耗。
rocm 后端就可以满载功耗,但是速度只有30token 每秒。
————————————【实际启动命令】(~/.config/systemd/user/llama-server-vulkan-qwen38.service) /home/hong/Desktop/llama.cpp/build-vulkan/bin/llama-server \ -m /home/hong/Desktop/Qwen3.8-27B-Uncensored-Q4_K_M.gguf \ --host 0.0.0.0 --port 8086 \ -ngl 99 -c 102400 --n-predict 30000 \ --cache-type-k q8_0 --cache-type-v q8_0 \ --batch-size 512 --ubatch-size 256 --parallel 1 \ --load-mode mlock \ --spec-type draft-mtp --jinja \ --api-key KEY 服务附加配置: Environment=GGML_VK_DISABLE_COOPMAT=1, LimitMEMLOCK=infinity, Restart=on-failure (10s), 模型 = Vulkan 后端 + Qwen3.8-27B-Uncensored Q4_K_M (标准量化), MTP 草稿模式。 【关联的显卡 reset 命令】(ExecStartPre, 每次启动服务前自动执行) ExecStartPre=/usr/bin/sudo /usr/local/bin/gpu-reset.sh gpu-reset.sh 脚本内容 (card1 固定写死): GPU=/sys/class/drm/card1/device 1. 循环等待 reset 节点就绪 (最多 60 秒) 2. echo on > $GPU/power/control 3. echo high > $GPU/power_dpm_force_performance_level 4. sleep 1 5. echo 1 > $GPU/reset # GPU 硬重置, 期间的 I/O error 属正常 6. sleep 10 7. echo on > $GPU/power/control # 重置后恢复 8. echo high > $GPU/power_dpm_force_performance_level 即: 先把电源控制设为 on + 强制高性能档 → 对 GPU 写 reset=1 做硬重置 → 等 10 秒 → 重新 on + high。这就是解决开机后 Vulkan 首次启动慢 / DPM 卡死的那个 reset。 注意: 记忆里 gpu-reset.service 自启已禁用, 但 #6 服务自身 ExecStartPre 仍带这个 reset, 所以每次 (re)start 都会触发一次。 【平均速度】(journalctl 历史, 5235 个采样) - 全历史: p50 = 44.9 t/s, p90 = 60.0, max = 76.2 (含降速坏日, 被拉低) - 健康日 (8/18, 8/20, 8/31, 9/1): 日均 52-58 t/s, 9/1 最高 71.3 - 降速故障日: 13-17 t/s (RADV shader 缓存损坏 / 开机首启 DPM 卡死) 结论: 正常状态平均约 52-58 token/s, 峰值可到 71-76; 故障时跌到 13-15, 重启一次服务即恢复。─────────────────────────────────
整理如下(基于历史排查记录,均为本机实测):【现象】显卡无法满载 - 推理速度从正常的 50-88 t/s 跌到 10-28 t/s - 功耗不满:满载应 250-350W,故障时只有 140-200W,甚至 <100W - 有时 sclk/mclk 已满频、GPU 98-100%,但功耗低、token 产出只有 1/6(GPU 空转) - 典型特征是"时好时坏":按天交替 52→14→56→17→13 t/s 【四种已知根因】 1. RADV shader 缓存损坏(最常见) 特征:间歇性复发 + 功耗 140-200W 不满载 + 缓存只有几 MB 修复:停服务 → mv ~/.cache/mesa_shader_cache 改名备份 → 重启服务 效果:13 → 67 t/s。注意 2026-08-30 有一例清缓存无效(需走 A3 对照) 2. Vulkan DPM 电源状态卡死 特征:sclk 卡最低档(0MHz*) 或 mclk 卡 456MHz,功耗 <100W 修复:restart 服务;无效则 echo high 强制高性能;再无效 reboot 3. 开机后首次启动服务必慢(GPU 硬重置与 GDM 显示栈冲突) 特征:开机第一次启动 13-15 t/s,restart 一次即恢复 52 t/s 现状:已接受此 workaround,不再深究根治 4. 模型文件是混合量化配方 特征:文件名 Q4_K_M 但张量混 f32/q8_0/q5_K/q6_K,走 Vulkan 通用慢路径 表现:14.5 vs 标准量化 63 t/s(字节数只差 5% 但速度差 4 倍) 修复:llama-quantize --allow-requantize 重量化为标准 Q4_K_M 【判定顺序】 1. journalctl 查该服务历史 tg 分布 → 一直慢还是间歇性 2. 查 sclk/mclk 档位 + 功耗 → 排除电源卡死 3. 分不清就做 A3 对照:停 Vulkan 服务,用 ROCm build 跑同一模型 - ROCm 快 (40+) = RADV 层问题 → 清 shader 缓存 - 两者都慢 = 系统层(内核/DKMS/PCIe) 【当前处置(2026-08-30 起生效)】 - 开机后启动服务若慢(<20 t/s)→ 手动 restart 一次即恢复 50+ - perf 已改回 auto(待机省电),gpu-reset/gpu-perf-high 服务已禁用,udev 规则已备份 - 完整诊断手册在 llama-cpp-performance-troubleshooting 技能里,需要时可随时取用 -
第一次启动不满载、第二次才满速满功耗,这是典型的显卡 boost 没被及时拉起来,大概率跟 Vulkan 冷启动有关。ROCm 那路能拉满但只有 30t/s,是另一码事(ROCm 路径本身在 LLM 上就慢,跟这个不满载不是同一个问题)。
先量数据再下结论:
- 在第一次启动时盯着 GPU 测频测功耗:
radeontop -1(需要权限)或rocm-smi --showclocks --showpower --showtemp。如果第 1 次跑的时候频率一直停在 idle 低档(几百 MHz、功率几十瓦),第 2 次才顶到 boost 档、功率上到 200W+,那就坐实了是 DPM(Dynamic Power Management)没把卡推上 performance 档。 - 成因:第一次 launch 会做 shader 编译/缓存,GPU 一直"闲-忙-闲"交替、利用率低,功耗管理器看负荷不够大就压低频;第二次所有 kernel 已缓存,一上来就是高负载,boost 立刻响应。
三个办法按顺序试:
- 先把 DPM 顶到性能档再启动——
echo performance | sudo tee /sys/class/drm/card*/device/power_dpm_force_performance_level
或echo high | sudo tee .../device/power_dpm_state(两个都试,机型不同生效字段不同) - 加个"暖机":先很短跑一段(
--n-predict 8)把 kernel 缓存热起来,再正常起服务。 - 确认 power_dpm_state 当前是不是 auto/battery,改成 performance 再跑一遍看是否首次就满速。
另外你说的"电源 reset"——如果强制拉满后瞬间重启,才算真电源问题,回到 johnnybegood 说的用 MSI Burner 看功耗曲线核实瞬时峰值。先把上面三步跑完,判断是驱动档位没推上去,还是供电实质超载,别急着换电源。
- 在第一次启动时盯着 GPU 测频测功耗: