Triton (인공지능)

IT 위키

Triton은 Python 기반으로 GPU 커널을 작성할 수 있게 해주는 오픈소스 언어 및 컴파일러로, 고성능 CUDA 수준의 연산을 훨씬 간단한 코드로 구현할 수 있도록 설계되었다. 원래 Harvard 및 OpenAI에서 개발되었으며, 현재는 PyTorch의 컴파일 스택에 통합되어 딥러닝 연산 최적화를 위해 널리 사용되고 있다.

개요[편집 | 원본 편집]

Triton은 연구자와 개발자가 복잡하고 오류가 발생하기 쉬운 CUDA C++ 코드를 직접 작성하지 않고도, Python 스타일의 간결한 문법으로 고성능 GPU 커널을 작성할 수 있게 한다. Triton 컴파일러는 이러한 코드를 GPU 실행 가능한 저수준 커널 코드로 자동 변환하며, 연산 최적화, 자동 타일링, 벡터라이제이션 등 다양한 성능 향상 기능을 제공한다.

특징[편집 | 원본 편집]

Python 기반 GPU 커널 작성[편집 | 원본 편집]

Triton은 GPU 커널을 Python 코드처럼 작성하며, 이를 컴파일하여 CUDA 수준의 고성능을 제공한다.

  • Python과 유사한 문법
  • 저수준 메모리 접근 및 병렬 처리 구조를 자동 최적화
  • 복잡한 CUDA boilerplate 코드 불필요

자동 타일링 및 벡터라이제이션[편집 | 원본 편집]

Triton 컴파일러는 matmul, convolution 같은 구조화된 연산에 대해:

  • 자동 타일 크기 선택
  • Vectorized memory load/store
  • Shared memory 활용
  • 워프/스레드 구조 최적화

를 처리하여, GPU 아키텍처에 맞춘 성능 이식성을 제공한다.

커널 Fusion 친화적 구조[편집 | 원본 편집]

Triton은 PyTorch 2.0의 TorchInductor와 결합하여 연산 그래프의 연속된 연산들을 하나의 fused kernel로 압축할 수 있다. 이는 메모리 왕복 및 커널 호출 오버헤드를 크게 감소시키며, 트레이닝 및 추론 성능 향상에 기여한다.

간결한 문법[편집 | 원본 편집]

예시:

import triton
import triton.language as tl

@triton.jit
def matmul_kernel(a_ptr, b_ptr, c_ptr, M, N, K):
    pid = tl.program_id(0)
    row = pid * 16 + tl.arange(0, 16)
    col = tl.arange(0, 16)
    a = tl.load(a_ptr + row[:, None] * K + tl.arange(0, K))
    b = tl.load(b_ptr + tl.arange(0, K)[:, None] * N + col)
    c = tl.dot(a, b)
    tl.store(c_ptr + row[:, None] * N + col, c)

위 코드는 전형적인 16×16 타일 기반 행렬 곱셈 커널이며, CUDA와 비교하면 훨씬 짧고 직관적이다.

필요성 및 배경[편집 | 원본 편집]

GPU 프로그래밍은 전통적으로 CUDA C++을 사용해야 했지만:

  • boilerplate 코드가 많고
  • 메모리 접근 패턴 설계가 어렵고
  • 오류 발생률이 높으며
  • cuDNN/cuBLAS가 제공하지 않는 커스텀 fused kernel이 필요할 때 문제가 발생했다.

Triton은 이러한 문제를 해결하기 위해 등장한 언어로, 프레임워크 개발자 및 연구자들이 보다 쉽게 커스텀 고성능 GPU 연산을 구축할 수 있게 한다.

PyTorch와의 통합[편집 | 원본 편집]

PyTorch 2.0에서 Triton은 중요한 역할을 한다.

TorchInductor Backend[편집 | 원본 편집]

  • PyTorch eager graph를 분석
  • 연산을 그룹화(fusion)
  • Triton kernel로 자동 생성
  • GPU에서 실행

이를 통해 기존 PyTorch 대비 상당한 성능 향상을 제공한다.

예시 활용 분야[편집 | 원본 편집]

  • LayerNorm, Softmax 같은 element-wise 연산 최적화
  • Attention 연산의 fused kernel
  • Custom matmul / conv 변형
  • Transformer block 내 다양한 연산 통합

장점[편집 | 원본 편집]

  • CUDA 수준의 성능을 Python 기반으로 달성 가능
  • 학습曲線이 CUDA보다 훨씬 낮음
  • 유지보수 및 커스텀 연산 개발에 유리
  • PyTorch와의 긴밀한 통합으로 실질적 속도 향상 제공

한계[편집 | 원본 편집]

  • CUDA, cuDNN, cuBLAS만큼 성숙하지는 않음
  • 매우 복잡한 커널이나 SM 구조에 최적화된 커널은 직접 CUDA로 작성해야 할 수도 있음
  • NVIDIA GPU 중심 생태계 (다른 GPU 아키텍처 지원은 제한적)

함께 보기[편집 | 원본 편집]

참고 문헌[편집 | 원본 편집]

  • T. Tillet, H.-T. Kung, D. Cox, Triton: An intermediate language and compiler for tiled neural network computations. Proceedings of ACM SIGPLAN International Workshop on Machine Learning and Programming Languages (2019).
  • PyTorch Triton 공식 문서