본문으로 건너뛰기

[flashinfer] FlashInfer의 새로운 TGV GEMM 백엔드: CuTeDSL을 활용한 Blackwell 최적화

PR 링크: flashinfer-ai/flashinfer#3281 상태: Merged | 변경: +1527 / -68

들어가며

최신 GPU 아키텍처인 Blackwell(SM100) 환경에서 GEMM(General Matrix Multiply) 연산의 지연 시간을 최소화하는 것은 LLM 추론 성능의 핵심입니다. 이번 FlashInfer 업데이트에서는 기존 C++ 기반의 TGV(Train à Grande Vitesse) 커널을 CuTeDSL(cute_ext)로 포팅하여 flashinfer.mm_bf16bmm_bf16의 기본 백엔드로 통합했습니다. 이 변경사항은 특히 중소 규모 배치에서 발생하는 DRAM 대역폭 병목을 해결하고, 2-CTA(Cooperative Thread Array) 모드를 통해 SMEM 활용도를 극대화하는 것을 목표로 합니다.

코드 분석

1. flashinfer/gemm/gemm_base.py: 통합 러너 및 디스패치 로직

기존 C++ 커널과 새로운 cute_ext 구현체 사이의 유연한 전환을 위해 통합 러너가 도입되었습니다. _TGV_DEBUG_USE_CPP 플래그를 통해 디버깅 및 벤치마킹 목적으로 C++ 백엔드를 강제할 수 있습니다.

# Before: C++ 기반의 단일 경로만 존재
# After: cute_ext와 C++ 간의 동적 디스패치 지원
_TGV_DEBUG_USE_CPP: bool = False

@functools.cache
def _tgv_gemm_runner(dtype: torch.dtype, use_sm_100f: bool):
    # ... (중략)
    class TGVRunner(TunableRunner):
        def forward(self, inputs, tactic=-1, ...):
            if _TGV_DEBUG_USE_CPP and a.dim() == 2:
                return _get_cpp_runner().forward(...)
            from .kernels.tgv_gemm_cute_ext import run_tgv_cute_ext
            return run_tgv_cute_ext(a, b, bias, out, bool(pdl), tactic)

2. flashinfer/gemm/kernels/tgv_gemm_cute_ext.py: CuTeDSL 커널 구현

핵심은 2-CTA 모드의 도입입니다. 이는 2x1 클러스터를 사용하여 두 개의 CTA가 하나의 타일을 공동으로 연산함으로써, SMEM 용량을 224KB 수준까지 극한으로 활용합니다.

# 2-CTA 모드 핵심 로직
# SM100_TMA_LOAD_2SM을 통해 peer CTA의 로드 완료 신호를 리더 CTA로 전달
if use_2cta:
    # 2x1 cluster, CtaGroup.TWO
    # leader-only k-loop, multicast commits (mask=0b11)
    # TMEM alloc/dealloc with is_two_cta=True

왜 이게 좋은가

이번 최적화의 핵심은 PDL(Pipeline Data Loading)과 2-CTA 모드의 결합입니다.

  1. 성능 향상: 벤치마크 결과, PDL을 적용한 TGV는 모든 형상(shape)에서 cuBLAS 대비 1.11배에서 최대 2.17배의 성능 향상을 보였습니다. 특히 작은 배치 사이즈에서 대역폭 병목을 효과적으로 제거합니다.
  2. SMEM 효율성: 29개의 커스텀 전술(tactic) 테이블을 통해 cta_m, cta_n 조합을 최적화하여 SM100의 228KB SMEM 예산을 98%까지 활용합니다.
  3. 교훈: 하드웨어 가속기(TMA, mbarrier)를 직접 제어하는 CuTeDSL을 사용하면, 고정된 라이브러리(cuBLAS)가 대응하기 어려운 특정 추론 워크로드에 대해 훨씬 더 세밀한 튜닝이 가능합니다.

리뷰 과정에서 논의된 바와 같이, 2-CTA 모드는 DRAM 지연 시간에 민감한 중간 배치 사이즈(BS 32/64)에서 가장 큰 효과를 발휘하며, 이는 현대적인 LLM 추론 엔진이 지향해야 할 방향성을 잘 보여줍니다.

References

참고 자료

⚠️ 알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.

댓글

관련 포스트

PR Analysis 의 다른글