kernel-anvil: AMD GPU에서 모델 형상별 자동 튜닝을 통해 llama.cpp 추론 속도 2배 향상
kernel-anvil: 2x decode speedup on AMD by auto-tuning llama.cpp kernels per model shape
핵심 요약
AMD GPU 환경에서 GGUF 모델의 레이어 형상을 분석하고 최적의 커널 설정을 자동 생성하여 추론 속도를 2배 이상 높이는 도구입니다.
- 성능 최적화 — llama.cpp의 MMVQ 커널을 모델 형상에 맞춰 튜닝하여 RDNA3 아키텍처에서 2배 이상의 속도 향상 달성
- 자동 프로파일링 — GGUF 모델을 분석해 GPU별 최적 설정을 JSON으로 생성하며 재컴파일 없이 즉시 적용 가능
- AMD 지원 — 기존 NVIDIA 위주의 커널 최적화 도구들과 달리 AMD GPU 환경을 타겟팅한 최초의 솔루션
- 간편한 사용 — pip 설치 후 간단한 명령어만으로 프로파일링과 최적화가 1초 내외로 완료됨
AMD GPU에서 GGUF 모델의 레이어 형상을 프로파일링하고, llama.cpp가 런타임에 로드할 최적의 커널 설정을 생성하는 도구를 만들었습니다. 재컴파일은 필요 없습니다.
문제점: llama.cpp의 MMVQ 커널은 형상과 관계없이 모든 레이어에 동일한 스레드/블록 설정을 사용합니다. 1024행 GQA 프로젝션과 17408행 FFN 레이어가 같은 설정을 공유하는 식이죠. 이는 특히 RDNA3에서 상당한 성능 손실을 유발합니다.
해결책: kernel-anvil은 GGUF를 읽어 고유한 GEMV 형상을 식별하고, 실제 GPU에서 각각을 프로파일링한 뒤 JSON 설정 파일을 작성합니다. llama.cpp의 mmvq.cu에 적용된 작은 패치가 시작 시 이 설정을 읽어 형상별 최적의 nwarps와 rows_per_block을 적용합니다.
7900 XTX에서의 결과:
- Qwen3.5-27B Q4_K_M: 12 tok/s -> 27 tok/s (2.25배)
- Qwen3-8B Q4_K_M 개별 커널: 형상당 1.2배~2.1배 향상
사용법:
pip install -e .
kernel-anvil gguf-optimize ~/Models/my-model.gguf # 1초 미만
SMITHY_CONFIG=~/.cache/smithy/my-model.json llama-server -m my-model.gguf -ngl 999
전체 프로파일링 및 스윕은 1초도 걸리지 않습니다. 193개의 테스트가 포함됩니다. RDNA3(7900 XTX/XT, 7800 XT)의 모든 GGUF 모델에서 작동합니다. CUDA/Metal 지원도 계획 중입니다.
GitHub: https://github.com/apollosenvy/kernel-anvil
llama.cpp 패치(mmvq.cu에 약 50줄)는 smithy-shape-configs 브랜치에 있습니다. 더 많은 테스트를 거친 후 PR을 통해 업스트림할 예정입니다.
배경: 이 작업은 최근의 커널 최적화 논문들(KernelSkill, CUDA Agent, KernelFoundry, TritonForge)에서 시작되었으며, 모두 NVIDIA만을 타겟팅하고 있었습니다. 또한 The Residual Stream Is All You Need (Qasim et al., 2026년 3월)에서 영감을 받아 AMD 추론의 병목 현상이 무엇인지 고민하게 되었습니다. 알고 보니 llama.cpp의 일반적인 커널 설정이 모델별 형상에 맞춰 튜닝되지 않았다는 단순한 이유 때문이었습니다.
기존의 모든 커널 최적화 도구는 NVIDIA를 타겟팅합니다. 이것이 AMD를 위한 최초의 도구입니다.


