본문 바로가기
AI

Triton:오픈소스 GPU프로그래밍 언어

by soypablo 2023. 2. 17.

트리톤은 파이썬과 유사한 프로그래밍 언어 및 컴파일러입니다.

트리톤의 목표

최신 GPU 하드웨어의 성능을 최대로 유지하는 커스텀 DNN(Deep Neural Network) 계산 커널 코드를 작성할 수 있는 프로그래밍 환경을 제공하는 것

트리톤이 만들어진 이유

딥러닝의 성공

딥러닝은 자연어 처리, 컴퓨터 비전, 계산 신경과학 등 다양한 분야에서 성공을 거두었습니다.

많은 계산량을 요구하는 딥러닝 모델

하지만 딥러닝은 계층적 구조이고, 많은 파라미터를 가지고 있어 계산량이 아주 많습니다.

이러한 딥러닝모델 계산은 멀티 코어와 멀티 코어 프로세서에 적합한 고도로 병렬화가 가능한 작업이며, GPU로 구현하는 것이 효율적인 방법으로 대두되었습니다.

하지만 GPU 아키텍처가 고도화 되면서 최적화가 잘되지 않는 문제가 점점 심각해지고 있습니다.

즉 GPU의 성능을 100% 끌어내고 있지 못하는 상황이 현재의 상황이라고 생각하면 됩니다.

이를 해결하기 위한 노력: DSN과 컴파일러

이를 해결하기 위해 도메인 특정 언어와 컴파일러의 관심이 높아졌습니다. 그러나 이러한 시스템은 동일한 알고리즘을 기준으로 cuBLAS, cuDNN, TensorRT 같은 라이브러리를 통해 작성한 최상의(가장 최적화가 잘된) 컴퓨팅 커널보다 훨씬 느리게 작동합니다.

Triton은 블록화 알고리즘과 기존의 "단일 프로그램, 다중 데이터" 실행 모델을 기반으로 하여 신경망용 고성능 컴퓨팅 커널의 구성을 용이하게 하는 프로그래밍 패러다임을 제공합니다. 특히 행렬 곱셈에서는 CUDA와 다른 변형을 사용합니다. Triton의 사용이 신경망의 계산을 빠르고 효율적으로 실행할 수 있습니다.

CUDA와의 비교

CUDA Programming Model (Scalar Program, Blocked Threads)

#pragma parallel for(int m = 0; i < M; m++) #pragma parallel for(int n = 0; j < N; n++){   float acc = 0;   for(int k = 0; k < K;k ++)     acc += A[i, k]* B[k, j];    C[i, j] = acc; }

Triton 프로그래밍 모델 (Blocked Program, Scalar Threads)

#pragma parallel for(int m = 0; m < M; m += MB) #pragma parallel for(int n = 0; n < N; n += NB){   float acc[MB, NB] = 0;   for(int k = 0; k < K; k += KB)     acc +=  A[m:m+MB, k:k+KB]           @ B[k:k+KB, n:n+NB];   C[m:m+MB, n:n+NB] = acc; }

Triton 방식의 이점

  • 기존 DSL(도메인 특화 언어)보다 더 많은 유연성을 제공하는 블록 구조 반복 공간을 제공
  • 기존보다 컴파일러가 데이터 로컬리티 및 병렬 처리부분에서 프로그램을 적극적으로 최적화

앞으로의 과제

우리가 제안한 패러다임이 제기하는 주요 과제는 작업 스케줄링, 즉 최신 GPU에서 효율적으로 실행하기 위해 각 프로그램 인스턴스가 수행하는 작업을 어떻게 분할해야 하는가 하는 문제입니다. 이 문제를 해결하기 위해 트리톤 컴파일러는 대상 프로그램의 제어 및 데이터 흐름 구조를 기반으로 반복 블록을 정적으로 스케줄링하는 기술인 블록 수준 데이터 흐름 분석을 적극 활용합니다. 그 결과 놀랍도록 잘 작동하는 시스템이 탄생했습니다. 저희 컴파일러는 자동 병합, 스레드 스위즐링, 프리페칭, 자동 벡터화, 텐서 코어 인식 명령어 선택, 공유 메모리 할당/동기화, 비동기 복사 스케줄링 등 다양하고 흥미로운 최적화를 자동으로 적용할 수 있습니다.

 
 

레퍼런스

Introduction — Triton documentation
https://triton-lang.org/master/programming-guide/chapter-1/introduction.html
Introducing Triton: Open-Source GPU Programming for Neural Networks
We're releasing Triton 1.0, an open-source Python-like programming language which enables researchers with no CUDA experience to write highly efficient GPU code—most of the time on par with what an expert would be able to produce. Triton makes it possible to reach peak hardware performance with relatively little
https://openai.com/blog/triton/