ROCm vs Vulkan


ทดสอบ llama.cpp ระหว่าง ROCm กับ Vulkan

Posted by cwt on October 27, 2025 at 05:04

หลังจาก upgrade RAM ของ laptop ให้เป็น 64GB ทำให้ได้ GTT (Graphics Translation Table) เพิ่มเป็น 32GB ซึ่งเจ้า GTT นี้ก็คือ RAM ของระบบที่อนุญาตให้ GPU มาเรียกใช้เหมือนเป็น VRAM ของตัวเอง สำหรับ laptop เครื่องนี้ที่ใช้ APU Ryzen 7 7730U ทั้ง VRAM และ GTT ก็คือหน่วยความจำที่อยู่บน RAM ของระบบเหมือนกัน

หลังจากมี GTT ใหญ่ถึง 32GB เลยก็เลยทำให้เล่น LLM model ใหญ่ๆ ได้ แล้วก็เกิดความสงสัยว่าระหว่าง ROCm กับ Vulkan ตัวไหนจะเร็วกว่ากันบน APU ตัวนี้ก็เลยลองทดสอบดู

ROCm

build ด้วยการบังคับให้ target gfx900 ซึ่งจริงๆ แล้ว APU ตัวนี้คือ gfx90c แต่ ROCm ไม่ support

$ HIPCXX="$(hipconfig -l)/clang" \
  HIP_PATH="$(hipconfig -R)" \
    cmake \
     -S . \
     -B build.HIP \
     -DGGML_HIP=ON \
     -DAMDGPU_TARGETS=gfx900 \
     -DCMAKE_BUILD_TYPE=Release

แล้วตอน run ก็ overide ด้วย HSA_OVERRIDE_GFX_VERSION=9.0.0 ได้ผลทดสอบ

  • pp512: 52.04 tps
  • tg128: 11.49 tps
$ HSA_OVERRIDE_GFX_VERSION=9.0.0 \
      ../llama.cpp/build.HIP/bin/llama-bench \
      -ngl 99 \
      -m Qwen3-30B-A3B-Instruct-2507-UD-TQ1_0.gguf
  ggml_cuda_init: GGML_CUDA_FORCE_MMQ:    no
  ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
  ggml_cuda_init: found 1 ROCm devices:
    Device 0: AMD Radeon Graphics, gfx900:xnack- (0x900), VMM: no, Wave Size: 64
  | model                               |       size |     params | backend    | ngl |            test |                  t/s |
  | ----------------------------------- | ---------: | ---------: | ---------- | --: | --------------: | -------------------: |
  | qwen3moe 30B.A3B IQ1_S - 1.5625 bpw |   7.53 GiB |    30.53 B | ROCm       |  99 |           pp512 |         52.04 ± 0.31 |
  | qwen3moe 30B.A3B IQ1_S - 1.5625 bpw |   7.53 GiB |    30.53 B | ROCm       |  99 |           tg128 |         11.49 ± 0.00 |

  build: 75cbdd3 (629)

Vulkan

build แบบปกติธรรมดา

$ cmake -B build -DGGML_VULKAN=ON

ได้ผลทดสอบ

  • pp512: 86.37 tps
  • tg128: 17.89 tps
$ ../llama.cpp/build/bin/llama-bench -ngl 99 -m Qwen3-30B-A3B-Instruct-2507-UD-TQ1_0.gguf
  ggml_vulkan: Found 1 Vulkan devices:
  ggml_vulkan: 0 = AMD Radeon Graphics (RADV RENOIR) (radv) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 64 | shared memory: 65536 | int dot: 0 | matrix cores: none
  | model                               |       size |     params | backend    | ngl |            test |                  t/s |
  | ----------------------------------- | ---------: | ---------: | ---------- | --: | --------------: | -------------------: |
  | qwen3moe 30B.A3B IQ1_S - 1.5625 bpw |   7.53 GiB |    30.53 B | Vulkan     |  99 |           pp512 |         86.37 ± 0.42 |
  | qwen3moe 30B.A3B IQ1_S - 1.5625 bpw |   7.53 GiB |    30.53 B | Vulkan     |  99 |           tg128 |         17.89 ± 0.02 |

  build: 75cbdd3 (629)

จึงสรุปได้ว่า Vulkan ชนะ(อีกแล้ว)