Cuda + ROCm 동시에 사용하기 (-DGGML_BACKEND_DL=ON 옵션 활용)
Cuda + ROCm simultaneously with -DGGML_BACKEND_DL=ON !
핵심 요약
NVIDIA와 AMD GPU를 동시에 활용해 모델을 구동하는 복잡한 빌드 설정과 성공 사례를 공유함.
- 하이브리드 GPU 구동 — CUDA와 ROCm을 동시에 사용하여 모델을 로드하고 추론 성능을 최적화함.
- 빌드 설정 최적화 — Cmake 옵션 조정을 통해 컴파일 오류를 해결하고 다중 GPU 환경을 구축함.
- 성능 이슈 논의 — 고가의 GPU 장비를 사용함에도 기대보다 낮은 토큰 생성 속도에 대한 의문 제기.
- 하드웨어 호환성 — 서로 다른 제조사의 GPU를 혼용하는 설정의 가능성과 기술적 난이도에 대한 관심.
꽤 많은 시간을 투자했고 쉽지 않았지만, 드디어 Vulkan을 우회해서 Cuda+ROCm을 동시에 사용해 Minimax 2.7 Q4 같은 모델을 돌릴 수 있게 됐어.
load_tensors: 63/63 레이어를 GPU로 오프로드함
load_tensors: CUDA0 모델 버퍼 크기 = 83650.42 MiB
load_tensors: CUDA_Host 모델 버퍼 크기 = 622.76 MiB
load_tensors: ROCm0 모델 버퍼 크기 = 40314.35 MiB
주된 장점은 프리필(prefill)이야.
윈도우 환경:
rmdir /s /q build
cmake -B build -G Ninja ^
-DCMAKE_C_COMPILER="C:/Program Files/AMD/ROCm/6.4/bin/clang-cl.exe" ^
-DCMAKE_CXX_COMPILER="C:/Program Files/AMD/ROCm/6.4/bin/clang-cl.exe" ^
-DCMAKE_HIP_COMPILER="C:/Program Files/AMD/ROCm/6.4/bin/clang-cl.exe" ^
-DCMAKE_PREFIX_PATH="C:/Program Files/AMD/ROCm/6.4" ^
-DHIP_ROOT_DIR="C:/Program Files/AMD/ROCm/6.4" ^
-DGGML_HIP=ON ^
-DGGML_CUDA=ON ^
-DGGML_BACKEND_DL=ON ^
-DGGML_CPU_ALL_VARIANTS=ON ^
-DGGML_AVX_VNNI=OFF ^
-DGGML_AVX512=OFF ^
-DGGML_AVX512_VBMI=OFF ^
-DGGML_AVX512_VNNI=OFF ^
-DGGML_AVX512_BF16=OFF ^
-DGGML_AMX_TILE=OFF ^
-DGGML_AMX_INT8=OFF ^
-DGGML_AMX_BF16=OFF ^
-DCMAKE_CUDA_COMPILER="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v13.1/bin/nvcc.exe" ^
-DCMAKE_CUDA_ARCHITECTURES="120" ^
-DCMAKE_BUILD_TYPE=Release
cmake --build build -j
불행히도 -DGGML_CPU_ALL_VARIANTS=ON 플래그는 많은 컴파일 오류를 발생시켜서, 예를 들어 다음 파일을 수정해야 했어:
notepad C:\llm\llamacpp\ggml\src\CMakeLists.txt
그리고 # ggml_add_cpu_backend_variant(alderlake SSE42 AVX F16C FMA AVX2 BMI2 AVX_VNNI) 부분을 삭제했어.
Ryzen 5950x에서는 문제없어.
그다음:
set PATH=C:\Program Files\AMD\ROCm\6.4\bin;%PATH%
llama-server.exe --model "H:\gptmodel\unsloth\MiniMax-M2.7-GGUF\MiniMax-M2.7-UD-Q4_K_S-00001-of-00004.gguf" --ctx-size 91920 --threads 16 --host 127.0.0.1 --no-mmap --jinja --fit on --flash-attn on -sm layer --n-cpu-moe 0 --threads 16 --cache-type-k q8_0 --cache-type-v q8_0 --parallel 1
성공.

