ROCm 대 Vulkan 벤치마크 결과의 매우 이상한 점
요약
AMD Radeon AI PRO R9700(RDNA4) 환경에서 ROCm 7.14과 Vulkan 백엔드를 사용한 llama.cpp 성능 벤치마크를 수행했습니다. 다양한 모델과 컨텍스트 길이에 따른 두 백엔드 간의 성능 차이를 비교 분석합니다.
핵심 포인트
- AMD RDNA4(gfx1201) 기반 GPU 환경에서의 성능 테스트
- ROCm 7.14 드라이버와 Vulkan(Mesa/RADV) 백엔드 비교
- llama.cpp를 활용한 다양한 모델(Gemma, Qwen) 벤치마크
- 컨텍스트 길이에 따른 성능 변화 측정
방금 ROCm 드라이버를 7.14로 업데이트하고 llama.cpp를 소스에서 다시 빌드하여 몇 가지 벤치마크를 실행했습니다. 그 결과가 놀라웠습니다. 우선, 데이터는 다음과 같습니다:
시스템
GPU: AMD Radeon AI PRO R9700 (Navi48 XTW, RDNA4) gfx1201, 32624 MiB VRAM, PCI 1002:7551, 300 W cap
CPU: AMD Ryzen 5 5500 (12 threads)
RAM: 78 GiB
OS: Ubuntu 24.04.4 LTS (noble)
Kernel: 6.17.0-35-generic (HWE)
ROCm: 7.14.0 (/opt/rocm -> /opt/rocm/core-7.14)
amdgpu-dkms: 1:6.19.14.31400000-2364437.24.04
Mesa/RADV Vulkan: 1.4.354, RADV GFX1201
#llama.cpp
Repo: /home/ubuntu/llama.cpp (github.com/ggml-org/llama.cpp, master)
Commit: 91f8c9c5fb038c086e13e9cd823c29b33b07ba54
Describe: b10155-1-g91f8c9c5f (build number 10156)
ggml: 0.17.0
Commit date: 2026-07-27 ("Disable -ffast-math on HIP (#25495)")
Build
Toolchain present: cmake 3.28.3, ninja, ccache, glslc, g++.
ROCm / HIP 빌드 -> build-rocm ---
HIPCXX="$(/opt/rocm/bin/hipconfig -l)/clang"
HIP_PATH="$(/opt/rocm/bin/hipconfig -R)"
cmake -S . -B build-rocm -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DGGML_HIP=ON
-DGPU_TARGETS=gfx1201
-DGGML_CUDA_FA_ALL_QUANTS=ON
-DGGML_CCACHE=ON
cmake --build build-rocm --parallel 12
Vulkan 빌드 -> build-vulkan ---
cmake -S .
Vulkan 빌드 -> build-vulkan ---
cmake -S .
[이번 청크]:
-B build-vulkan -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DGGML_VULKAN=ON \ -DGGML_CCACHE=ON cmake --build build-vulkan --parallel 12 # 테스트 실행 모델 사용 (모두 /home/ubuntu/models 에서 가져옴):
E4B-Q4 gemma-4-E4B-it-qat-UD-Q4_K_XL.gguf 3.91 GiB 7.46 B
Gemma31B-Q4 gemma-4-31B-it-qat-UD-Q4_K_XL.gguf 16.09 GiB 30.70 B
Qwen27B-Q6 Qwen3.6-27B-Q6_K.gguf 21.30 GiB 27.32 B ---
RUN A: 짧은 컨텍스트, llama-bench 기본값, -r 5 ---
./build-<rocm|vulkan>/bin/llama-bench -m <모델> \ -ngl 99 -fa 1 -p 512 -n 128 -r 5 ---
RUN B: 깊이 0 대 70K, 파라미터는 models.ini 에서 미러링, -r 2 ---
./build-<rocm|vulkan>/bin/llama-bench -m <모델> \ -d 0,70000 -p 512 -n 128 \ -fa on -ngl 99 -t 6 -lm none -r 2 # Qwen27B-Q6 추가: -ub 1024 -b 2048 ---
RUN C: 깊이 150K, 동일 파라미터, -r 2 (E4B) / -r 1 (대형 모델) ---
./build-<rocm|vulkan>/bin/llama-bench -m <모델> \ -d 150000 -p 512 -n 128 \ -fa on -ngl 99 -t 6 -lm none -r <2|1> # Qwen27B-Q6 추가: -ub 1024 -b 2048 ---
RUN A: 짧은 컨텍스트 (-r 5) ---
Model Backend pp512 tg128 ------------ -------- -----------------
---------------- E4B-Q4 ROCm 5967.70 +/-666.77 107.88 +/- 1.39
E4B-Q4 Vulkan 4689.70 +/-546.33 118.81 +/- 1.67
Gemma31B-Q4 ROCm 1131.91 +/- 32.09 29.81 +/- 0.07
Gemma31B-Q4 Vulkan 1106.08 +/- 0.97 29.74 +/- 0.03
Qwen27B-Q6 ROCm 708.78 +/- 22.10 23.66 +/- 0.02
Qwen27B-Q6 Vulkan 924.26 +/- 0.80 24.32 +/- 0.02 ---
RUN B: 깊이 0 대 70000 (-r 2, models.ini 파라미터) ---
Model Backend pp512 pp512 tg128 tg128 ------------ -------- -----------------
E4B-Q4 ROCm 5453.65 +/-980.96 1074.06 +/- 23.04 106.90 +/-1.96 77.11 +/-1.04
E4B-Q4 Vulkan 6021.50 +/-233.61 1546.22 +/-712.88 118.45 +/-0.80 82.80 +/-0.84
Gemma31B-Q4 ROCm 1098.02 +/- 53.15 206.05 +/- 1.91 29.78 +/-0.12 22.47 +/-0.08
Gemma31B-Q4 Vulkan 1114.57 +/- 0.05 399.67 +/- 55.09 29.75 +/-0.00 22.42 +/-0.01
Qwen27B-Q6 ROCm 692.39 +/- 35.78 269.74 +/- 4.68 23.71 +/-0.03 20.24 +/-0.07
Qwen27B-Q6 Vulkan 931.08 +/- 0.15 501.54 +/-
61.98 24.22 +/-0.02 20.45 +/-0.01 --- Prefill degradation, 0 -> 70K context --- Model ROCm Vulkan ------------ ------------------------ ------------------------ E4B-Q4 5454 -> 1074 (-80%) 6022 -> 1546 (-74%) Gemma31B-Q4 1098 -> 206 (-81%) 1115 -> 400 (-64%) Qwen27B-Q6 692 -> 270 (-61%) 931 -> 502 (-46%) Generation degrades far less: -15% to -30% across the board. --- RUN C: depth 150000 --- Model Backend pp512 u/d150000 tg128 u/d150000 ------------ -------- ----------------- ---------------- E4B-Q4 ROCm 577.48 +/- 10.06 59.19 +/- 0.22 E4B-Q4 Vulkan 1024.88 +/-185.61 62.84 +/- 0.37 Gemma31B-Q4 ROCm 106.98 (r=1) 18.08 (r=1) Gemma31B-Q4 Vulkan 238.23 (r=1) 6.95 (r=1) Qwen27B-Q6 ROCm 161.05 (r=1) 17.19 (r=1) Qwen27B-Q6 Vulkan 329.65 (r=1) 5.22 (r=1) Neither backend ran out of memory at this depth on any model. Memory observed during RUN C (Vulkan): Gemma31B-Q4 VRAM ~30341 MB of 32624 GTT ~1344 MB Qwen27B-Q6 VRAM ~31987 MB of 32624 GTT ~1344 MB --- DECODE vs DEPTH: the important table --- Model Backend d0 d70000 d150000 ------------ -------- ------- ------- ------- Gemma31B-Q4 ROCm 29.78 22.47 18.08 Gemma31B-Q4 Vulkan 29.75 22.42 6.95 Qwen27B-Q6 ROCm 23.71 20.24 17.19 Qwen27B-Q6 Vulkan 24.22 20.45 5.22 E4B-Q4 ROCm 106.90 77.11 59.19 E4B-Q4 Vulkan 118.45 82.80 62.84 저는 이전에 15만 컨텍스트 테스트를 진행한 적이 없습니다. 다른 수치들은 어느 정도 예상했던 것이며, ROCm이 Vulkan을 따라잡는 것을 보니 기뻤습니다. 하지만 Vulkan에서 나타난 15만 컨텍스트의 큰 하락은 놀라웠습니다. 혹시 어떤 이상한 메모리 문제에 부딪힌 것인지 확인하기 위해 동일한 테스트를 13만 컨텍스트에서도 진행해 보았지만, 결과는 여전히 한 자릿수였습니다. 이 현상에 대한 설명이 있을까요? 수정: 제가 문제를 찾은 것 같습니다. -p 0 (대신 -p 512)로 15만 컨텍스트 테스트를 실행했을 때의 성능이 ROCm과 유사했습니다. 또한 vscode harness로는 이러한 큰 속도 저하를 재현할 수 없었습니다. 따라서 이것은 Vulkan 백엔드 문제라기보다는 llama-benchmark 자체의 문제인 것 같습니다.
/u/Gesha24가 r/LocalLLaMA에 게시함 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/OpenAI Codex (search)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기