본문으로 건너뛰기

© 2026 Molayo

llama.cpp헤드라인2026. 05. 29. 10:16

CUDA: AMD MFMA 하드웨어에서 batch>=4인 양자화된 matmul을 MMQ로 라우팅 ([#23227](https://github.c

요약

llama.cpp 프로젝트에서 AMD MFMA 하드웨어를 위한 양자화된 matmul 라우팅 최적화 패치가 적용되었습니다. 양자화 방식별로 최적의 배치 임계값을 다르게 설정하여 AMD CDNA 아키텍처에서의 추론 성능을 대폭 향상시켰습니다.

핵심 포인트

  • AMD MFMA 하드웨어에서 양자화 방식별 맞춤형 배치 임계값 도입
  • K-quants 방식 사용 시 batch=4부터 MMQ 라우팅으로 성능 최대 76% 향상
  • 양자화 유형에 따른 역양자화 비용을 고려한 정밀한 커널 선택 로직 구현
  • MI250X 환경에서 Llama-3.2-3B 모델로 성능 개선 검증 완료

CUDA: AMD MFMA 하드웨어에서 batch>=4인 양자화된 matmul을 MMQ로 라우팅 (#23227)

  • CUDA: AMD MFMA 하드웨어에서 양자화 방식별 MMVQ/MMQ 배치 임계값(batch threshold) 적용

기존 디스패처(dispatcher)는 양자화된 matmul (quantized matmul)을 위해 mul_mat_vec_q (행별 GEMV)와 mul_mat_q (MFMA-tiled GEMM) 사이를 선택할 때 단일 전역 임계값(MMVQ_MAX_BATCH_SIZE = 8)을 사용했습니다. AMD CDNA에서는 양자화 제품군(quant family)에 따라 최적의 교차 지점(crossover)이 크게 달라지는데, 이는 행별 GEMV 비용이 점곱(dot-product) 자체보다 역양자화(dequantisation)에 의해 좌우되기 때문입니다. K-quants는 더 무거운 슈퍼 블록 디코딩(super-block decode) 비용이 발생하므로 MMQ가 더 빨리 유리해지며, legacy 및 IQ quants는 디코딩 비용이 적어 배치가 MFMA 타일을 완전히 채울 때까지 MMVQ가 우위를 유지합니다.

이 패치는 기존의 ggml_cuda_should_use_mmq를 미러링하는 ggml_cuda_should_use_mmvq(type, cc, ne11) -> bool을 도입하며, amd_mfma_available(cc) 조건에 따라 양자화 방식별 임계값을 제어합니다:

Q3_K, Q4_K, Q5_K : MMVQ <= 3 (batch=4부터 MMQ가 유리: +5% .. +76%)
Q2_K, Q6_K : MMVQ <= 5 (batch=6부터 MMQ가 유리: +8% .. +35%)
기타 : MMVQ <= 8 (legacy & IQ는 MMQ 사용 시 성능 저하; 변경 없음)

Non-AMD-MFMA 경로(NVIDIA, RDNA, MFMA가 없는 CDNA1)는 master 브랜치와 바이트 단위로 동일합니다. GGML_CUDA_FORCE_MMVQ=1을 설정하면 A/B 테스트를 위해 기존의 전역 임계값으로 복구할 수 있습니다.

MI250X (gfx90a, ROCm 7.2.1)에서 Llama-3.2-3B-Instruct를 사용하여 측정하였으며, 지원되는 20개 모든 양자화 방식에 대해 llama-bench pp512, ubatch 1..8, 10회 반복 수행하였습니다. 전체 표는 PR 설명에 포함되어 있습니다.

선택된 pp512 처리량 (tok/s, ub=8):
Q4_K_S: 559 -> 940 (+68%)
Q5_K_S: 503 -> 884 (+76%)
Q3_K_S: 629 -> 879 (+40%)
Q2_K : 615 -> 809 (+32%)
Q6_K : 582 -> 776 (+33%)

선택된 pp512 처리량 (tok/s, ub=4):
Q4_K_S: 444 -> 480 (+ 8%)
Q4_0 : 682 -> 685 (+ 0%) (성능 저하 없음 - MMVQ 유지)
IQ4_XS: 706 -> 698 (- 1%) (성능 저하 없음 - MMVQ 유지)

  • CUDA: 리뷰 사항 반영 — 인라인 MMVQ 배치 테이블 적용, 환경 변수 해치(env hatch) 및 문서 블록 제거

  • CDNA1을 위한 커널 선택 로직 튜닝

공동 작성자: Johannes Gäßler johannesg@5d6.de

macOS/iOS:

Linux:

Android:

Windows:

Windows:

openEuler:

  • DISABLED
  • openEuler x86 (310p)
  • openEuler x86 (910b, ACL Graph)
  • openEuler aarch64 (310p)
  • openEuler aarch64 (910b, ACL Graph)

UI:

AI 자동 생성 콘텐츠

본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0