MI60 32GB VRAM GPU에서 내 사용 사례(Frigate 및 HomeAssistant)를 위한 최적의 설정을 찾기 위해
요약
AMD MI60 GPU 환경에서 Frigate 및 HomeAssistant 활용을 위한 llama.cpp 최적화 설정을 탐구합니다. 다양한 양자화 방식, KV 캐시, 배치 크기 및 ROCm 환경 변수를 조합하여 성능을 벤치마킹한 과정을 다룹니다.
핵심 포인트
- MI60 GPU에서 llama.cpp 실행을 위한 Docker 컨테이너 활용 팁
- Gemma 4 및 Qwen3 모델의 양자화 방식별 성능 비교
- KV 캐시 양자화 및 Flash Attention이 성능에 미치는 영향 분석
- ROCm 환경 변수(MMQ, SDMA)를 통한 하드웨어 가속 최적화
저는 이 Docker 컨테이너를 사용하여 llama.cpp를 실행하고 있습니다: https://github.com/mixa3607/ML-gfx906 (이전에는 소스 코드에서 직접 빌드했었는데, 이 방식이 훨씬 쉽습니다). MI60(또는 MI50)은 Ubuntu 24.04에서 작동하도록 만드는 것이 정말 까다롭습니다. 해당 컨테이너를 사용하면 몇 분 만에 설정이 완료되어 시간을 크게 절약할 수 있습니다.
어쨌든, 저의 개인적인 LLM (Large Language Model) 사용 사례는 주로 Frigate를 통해 카메라 영상을 검토하고 "알림 소음 (notification noise)"을 줄이는 용도입니다 (마치 사람이 영상을 검토하여 내가 알아야 할 것과 그렇지 않은 것을 결정하는 것과 같습니다). 다른 용도는 HomeAssistant입니다. 저는 모든 Alexa 기기를 버리고 이것으로 교체했는데, 정말 놀랍습니다.
어쨌든, 저는 속도와 효율성 측면에서 제 하드웨어의 성능을 최대한으로 끌어내고 싶었습니다. 그래서 Claude에게 제가 가진 두 모델에 대해 배치 테스트 (batch testing)를 수행하는 스크립트를 작성해 달라고 요청했습니다. 이 두 모델은 해당 사용 사례들에 대해 매우 뛰어난 정확도를 보여주었습니다.
- Gemma 4 26B.A4B Q4_1
- Qwen3 35B.A3B Q4_0
MI60(및 MI50)은 본질적으로 _0 및 _1 양자화 (quant) 방식에서 속도 향상을 얻기 때문에 이 방식들을 사용합니다. 두 모델 모두에 4_1을 사용하지 않은 유일한 이유는 크기 때문입니다. 저는 각각 별도의 캐시 (cache)를 가진 3개의 슬롯을 사용하는데, Qwen 4_0과 4_1 사이의 크기 차이가 제가 원하는 컨텍스트 크기 (context size)를 위한 공간을 너무 많이 차지했습니다.
벤치마크 스윕 스크립트(benchmark sweep script)는 총 8개 섹션에 걸쳐 30회의 실행을 수행했습니다. 테스트에는 두 모델인 Gemma 4 26B Q4_1과 Qwen3 35B Q4_0이 사용되었으며, 세 가지 KV 캐시 프리필 깊이(KV cache pre-fill depths: 0, 1,000, 6,000 토큰)를 대상으로 했습니다. 각 실행 시 512 토큰의 프롬프트(prompt)와 128 토큰의 생성(generation)을 고정하였으며, 통계적 안정성을 위해 llama-bench를 통해 내부적으로 각 5회씩 반복했습니다. 조절된 변수(knobs)는 다음과 같습니다: Flash Attention 사용 여부(on vs. off), 세 가지 수준의 KV 캐시 양자화(KV cache quantisation: 기본값 f16, q8_0, q4_0), 네 가지 값의 ubatch 크기(512, 2048, 4096, 8192), 두 가지 값의 논리적 배치 크기(logical batch size: 2048, 8192), 세 가지 값의 CPU 스레드 수(8, 12, 24), 그리고 두 가지 ROCm 전용 환경 변수 — GGML_ROCM_FORCE_MMQ (1 대 0, 양자화된 matmul 커널과 rocBLAS GEMM 간의 전환) 및 HSA_ENABLE_SDMA (활성화 대 비활성화, DMA와 blit-copy 메모리 전송 간의 전환)입니다. 섹션 1부터 7까지는 다른 모든 변수를 프로덕션 기준점(production baseline)으로 유지한 채 정확히 하나의 파라미터만 변경하여, 성능 변화의 원인을 단일 요인으로 명확히 규명할 수 있도록 했습니다. 섹션 8에서는 가장 유망한 개별 결과들의 세 가지 조합 — SDMA 비활성화 및 q8_0 KV, SDMA 비활성화 및 q4_0 KV, 그리고 SDMA 비활성화 및 MMQ off 및 q8_0 KV — 을 중첩 적용하여, 이득이 복리로 작용하는지 아니면 서로 상쇄되는지를 결정했습니다. GPU 독점 액세스를 보장하기 위해 각 실행 전에는 프로덕션 llama-server 컨테이너를 중지했으며, 각 모델 설정은 프로덕션에서 사용되는 것과 동일한 이미지로부터 동일한 디바이스 매핑(device mappings), 볼륨 마운트(volume mounts), 환경 변수를 가진 새로운 일회성 컨테이너로 실행되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기