[Triton] AMD RDNA에서 matmul_ogs 설정 최적화 — 최대 46% 성능 향상
PR 링크: triton-lang/triton#8052 상태: Merged | 변경: +32 / -4
들어가며
Triton의 matmul_ogs(matmul with output group sizes) 커널은 기본 설정이 CDNA 아키텍처에 맞춰져 있었다. RDNA(Navi) GPU에서 batch size가 512를 초과하면 block_m이 너무 커서 심각한 레지스터 스필링이 발생했고, 이는 성능 저하로 이어졌다. 이 PR은 RDNA3/RDNA4 전용 블록 크기 설정을 추가하여 최대 46%의 throughput 향상을 달성한다.
핵심 코드 분석
Before (opt_flags.py)
if is_cdna4 and m >= 512:
block_m = 128
else:
block_m = max(32, min(triton.next_power_of_2(slice_size), 64))
RDNA에는 별도 분기가 없어 일반 경로를 따라 큰 block_m 값이 선택된다.
After (opt_flags.py)
if is_cdna4 and m >= 512:
block_m = 128
elif get_rdna_version() in (3, 4) and m >= 512:
block_m = 64
else:
block_m = max(32, min(triton.next_power_of_2(slice_size), 64))
After (opt_flags_amd.py)
if get_rdna_version() in (3, 4) and block_m == 64:
block_n = 256
if get_rdna_version() in (3, 4) and block_m == 64:
block_k = 64
RDNA3/4에서 block_m=64, block_n=256, block_k=64의 조합으로 레지스터 사용량을 줄인다.
왜 이게 좋은가
- 실측 성능: GPT-OSS 20B 모델 기준, Navi31에서 3.06 → 4.47 req/s(+46%), Navi48에서 5.63 → 6.66 req/s(+18%)
- 아키텍처 감지:
get_rdna_version()함수를 신규 추가하여 gfx11*(RDNA3), gfx12*(RDNA4)를 자동 감지한다. - 최소 변경: 기존 CDNA 경로에 영향 없이, RDNA 전용 분기만 추가한다.
정리
GPU 컴파일러에서 블록 크기 튜닝은 단순해 보이지만 실제 워크로드에 큰 영향을 미친다. RDNA의 레지스터 파일 특성에 맞는 block_m=64 선택만으로 E2E 성능이 크게 개선되었다.
참고 자료
이 글은 AI 도구의 도움을 받아 작성되었습니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [Open WebUI] FileMetadataResponse의 meta 필드를 Optional로 변경하여 배치 추가 오류 수정
- 현재글 : [Triton] AMD RDNA에서 matmul_ogs 설정 최적화 — 최대 46% 성능 향상
- 다음글 [Triton] SWP 루프 로우어링에서 barrier 위치 결정 로직 수정
댓글