High-Performance FP16 General Matrix Multiplication on NVIDIA Ada Lovelace via CUTLASS and WMMA: A Benchmark and Pipeline-Depth Analysis
이 논문은 NVIDIA의 Ada Lovelace RTX 4060에서 cuBLAS, CUTLASS 및 커스텀 WMMA 구현에 대한 FP16 GEMM 성능을 벤치마킹하여, 특정 타일 기하 구조를 가진 3단계 파이프라인 깊이가 피크 처리량의 52.7%를 달달성함을 밝히는 동시에, 추가적인 최적화를 제한하는 주요 병목 현상이 파이프라인 깊이가 아닌 공유 메모리 압력임을 입증한다.
원본 논문은 CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
당신에게 아주 빠른 주방(GPU)과 **텐서 코어(Tensor Cores)**라고 불리는 전문 요리사 팀이 있다고 상상해 보세요. 이 요리사들은 거대한 연회(딥러닝)를 위해 재료를 다지고 섞는 일(행렬 곱셈)을 믿을 수 없을 정도로 빠르게 수행합니다. 새로운 "Ada Lovelace" 가스레인지(RTX 4060 그래픽 카드)를 갖춘 이 주방은 이론적으로 60.55 TFLOPS(초당 60.55조 번의 수학 연산)의 속도로 음식을 내놓을 수 있습니다.
하지만 여기 함정이 있습니다. 요리사들이 그만큼 빨리 다질 수 있다고 해서, 실제로 그 속도로 다지고 있는 것은 아닙니다. 그들은 종종 식재료가 팬트리에서 배달되기를 기다려야 합니다.
거대한 실험: 요리사를 계속 바쁘게 만드는 법
연구원들은 요리사들이 쉬지 않고 재료를 다질 수 있도록 주방을 조직하는 가장 좋은 방법을 알아내고자 했습니다. 그들은 주방을 운영하는 세 가지 다른 방식을 테스트했습니다:
- 블랙박스 (cuBLAS): NVIDIA에서 제공하는 미리 패키징된 폐쇄형 소스 레시피로, 보통 매우 잘 작동하지만 세부 사항을 수정할 수 없습니다.
- 오픈 블루프린트 (CUTLASS): 유연한 오픈 소스 툴킷으로, 처음부터 자신만의 주방 레이아웃을 설계할 수 있습니다.
- DIY 방식 (WMMA): 요리사의 모든 움직임을 직접 제어하는 맞춤형 주방이지만, 구축하기가 훨씬 어렵습니다.
그들은 8192 × 8192 크기의 재료를 준비하여 다양한 "파이프라인 깊이(pipeline depths)"를 테스트했습니다. 파이프라인 깊이는 주방에 준비해 두는 재료 쟁반의 개수라고 생각하면 됩니다.
- 파이프라인 깊이 2: 준비된 쟁반이 2개뿐입니다.
- 파이프라인 깊이 3: 준비된 쟁반이 3개입니다.
- 파이프라인 깊이 4: 준비된 쟁반이 4개입니다.
일반적인 통념과 단순한 수학 모델은 더 많은 쟁반 = 더 높은 속도라고 말했습니다. 논리는 이랬습니다: "쟁반이 많을수록 요리사가 재료가 떨어져서 기다리는 일이 없을 것이므로, 더 빠르게 일할 것이다."
놀라운 결과: 더 많은 것이 항상 더 나은 것은 아니다
연구원들은 속도를 측정했고, 다음과 같은 결과를 얻었습니다:
- 깊이 2: 주방은 25.6 TFLOPS로 작동했습니다. 요리사들이 너무 많이 기다리고 있었습니다.
- 깊이 3: 주방의 속도가 31.9 TFLOPS(이론적 최대치의 52.7%)로 빨라졌습니다! 이곳이 바로 '스위트 스팟(최적의 지점)'이었습니다!
- 깊이 4: 주방의 속도가 오히려 31.1 TFLOPS로 느려졌습니다.
이것이 핵심 발견입니다: 네 번째 쟁반을 추가하는 것은 도움이 되지 않았고, 오히려 상황을 악화시켰습니다. 단순한 수학 모델은 속도가 35.4 TFLOPS로 뛰어오를 것이라고 예측했지만, 실제로는 그렇지 않았습니다. 모델은 **13.8%**의 오차를 보였습니다.
왜 쟁반을 추가했을 때 역효과가 났을까요?
논문은 주방에도 한정된 공간이 있다고 설명합니다. 네 번째 쟁반을 추가했을 때(공유 메모리 사용량을 96 KB로 증가시켰을 때), 주방은 동시에 작업할 수 있는 요리 팀(스레드 블록)의 수를 줄여야만 했습니다.
- 3개의 쟁반이 있을 때는 각 가스레인지마다 2개의 요리 팀이 배치될 수 있었습니다.
- 4개의 쟁반이 있을 때는 가스레인지당 1개의 팀만 배치될 수 있었습니다.
비록 단일 팀이 더 많은 재료를 가지고 있었지만, 한 팀이 막혔을 때 교체 투입될 다른 팀이 적었기 때문에 그들은 더 오래 기다려야 했습니다. 주방이 재료로 인해 "혼잡"해지자 요리사들이 사용할 수 있는 "작업자(teams)"는 "텅 비게" 된 것입니다. 연구원들은 점유율(occupancy)(작업 중인 팀의 수)이 떨어졌으며, 요리사들이 사용하는 "레지스터(개인용 메모장)"가 늘어나면서 속도가 느려졌음을 측정했습니다.
승자와 패자
- 승자: 특정 타일 크기 256 × 128과 3개의 쟁반을 사용하는 CUTLASS 툴킷이 31.9 TFLOPS를 기록했습니다. 이는 표준 "블랙박스"(cuBLAS)보다 아주 미세하게(저자는 이를 거의 측정 불가능한 수준의 노이즈라고 언급했습니다) 높은 수치였으나, 이는 오픈 블루프린트가 폐쇄형 모델과 대등하게 맞설 수 있음을 증명합니다.
- DIY 차점자: 맞춤형 WMMA 커널(완전한 DIY 주방)은 약간 더 작은 테스트에서 25.1 TFLOPS를 기록했습니다. 이는 재료 배달과 조리를 겹쳐서 수행하는 "더블 버퍼링" 기법을 사용하지 못했기 때문에 더 느렸습니다.
- 패자: "파이프라인 깊이가 깊을수록 항상 더 좋다"라는 아이디어입니다. 논문은 이 특정 하드웨어에 대해 이 가설을 명시적으로 부정했습니다.
얼마나 확실한가요?
저자들은 하드웨어에서 직접 측정하고 테스트를 10번 실행하여 평균을 냈기 때문에 이 수치들에 매우 확신하고 있습니다. 또한 자신들의 코드를 NVIDIA의 내장 도구(프로파일러)와 대조하여 코드가 완벽하게 일치함을 확인했습니다.
하지만 그들이 증명하지 못한 몇 가지 사항도 인정했습니다:
- 그들은 오직 하나의 문제 크기(8192)만을 테스트했습니다. 따라서 "3개의 쟁반이 최고"라는 규칙이 더 작거나 특이한 형태의 문제에서도 적용될지는 알 수 없습니다.
- 메모리가 부족하여 파이프라인 깊이를 4보다 높게 테스트할 수 없었습니다.
- Windows 환경에서 테스트를 진행했는데, 드라이버 오류로 인해 커스텀 코드와 표준 코드를 동일한 실행 과정에서 직접 비교하는 데 어려움이 있었습니다(따라서 별도의 실행을 통해 비교했습니다).
시사점
만약 당신이 수학 연산 작업이 많은 RTX 4060 같은 소비자용 그래픽 카드의 성능을 최대한 끌어올리고 싶다면, 단순히 버퍼를 계속 추가하지 마세요. "골디락스(딱 적당한)" 존이 존재합니다. 이 경우, 3단계의 준비 과정이 완벽했습니다. 4단계로 넘어가는 것은 주방을 너무 좁게 만들어 모두의 속도를 늦추게 됩니다.
연구원들은 자신들의 모든 코드를 오픈 소스로 공개했으므로, 누구나 자신만의 주방을 만들어 31.9 TFLOPS 기록을 경신할 수 있습니다. 그들은 향후 연구가 다양한 문제 크기를 다루고 더 깨끗한 데이터를 위해 Linux를 사용해야 한다고 제안하지만, 현재로서는 31.9 TFLOPS가 이 설정의 정점이며, 31.1 TFLOPS는 메모리에 대해 너무 욕심을 부렸을 때 발생하는 결과임을 보여주었습니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.