본문 바로가기

AI Compiler framework

Runtime Optimization in Deep Learning Frameworks and AI Compilers

1. Overview

이전에 Runtim Optimization 은 이렇게 이해했음

런타임에서 데이터 ㅂ갓에 따라 계산 그래프를 줄이거나 연산을 생략하는 최적화 

 

그런데 대부분의 실제 프레임워크와 AI 컴파일러에서 Runtime Optimization 의 의미는 달랐다.

일반적인 시스템에서 Runtime Optimization 은 다음을 의미한다.

연산 의미를 변경하지 않은 상태에서, 가장 효율적인 실행 전략을 선택하는 과정

  • 계산 그래프 자체는 변하지 않는다.
  • 연산 의미도 변하지 않는다
  • 대신 어떤 커널을 사용할지, 어떤 실행 파라미터를 사용하지를 결정한다.

 

2. Runtime Optimization 의 기본 구조

대부분의 딥러닝 시스템의 구조

Model Definition
        ↓
Graph Compilation
        ↓
Kernel Candidates Generation
        ↓
Runtime Optimization
        ↓
Execution

여기서 Runtime Optimization 의 역할은

이미 정의된 연산을 어떤 방식으로 실행ㅎ알 것인가를 결정하는 것이다.

중요한 점은

연산 의미는 이미 compile 단계에서 확정되어 있다는 것이다.

 

3. Runtime Optimization 이 실제로 하는 일

일반적인 시스템에서 Runtime Optimization 은 크게 세 가지를 수행한다.

3.1 Kernel Parameter Tuning

가장 대표적인 Runtime Optimization 이다.

GPU 커널 실행 시 다음과 같은 파라미터가 존재한다.

  • block size
  • grid size
  • tile size
  • vector width
  • shared memory usage
  • pipline stage

예를 들어 GEMM 의 경우

tile size = 128
warp tile = 64
vector width = 4

같은 파라미터 조합이 존재한다.

Runtime 단계에서는 다음을 수행한다.

candidate kernel 실행
        ↓
benchmark 측정
        ↓
가장 빠른 설정 선택

이 과정을 흔히 auto tuning 이라고 불린다.

 

3.2 Algorithm Variant Selection

같은 연산이라도 여러 구현 방식이 존재한다.

예 : Convolution

가능한 알고리즘

direct convolution
im2col + GEMM
FFT convolution
Winograd convolution

Runtime Optimization 은 입력 shape 나 hardward 에따라 가장 빠른 알고리즘을 선택한다.

conv(x, w)

 의 의미는 변하지 않지맘ㄴ

realization

이 달라진다.

 

3.3 Dynamic Shape Specialization

일부 시스템에서는 입력 shape 에 따라 실행 전략이 달라진다.

Transformer attention

sequence length < 128 → warp kernel
sequence length > 1024 → block kernel

이 경우 runtime 에서 shape 를 보고 커널을 선택한다.

하지만 이 겨웅에도

attention 연산 의미

는 동일하다.

 

4. Runtime Optimization 이 하지 않는 것

일반적인 딥러닝 시스템에서 Runtime Optimization 은 다음을 수행하지 않는다.

4.1 Data Value 기반 계산 생략

softmax 에서 작은 exp 생략
ReLU 결과가 0 이므로 계산 중단

이러한 최적화는 일반적으로 사용되지 않는다.

이유

  • numerical stability 문제
  • reproducibility 문제
  • GPU warp divergence
  • memory access pattern 붕괴

 

4.2 연산 그래프 변경

다음과 같은 연산 변화는 runtime 이 아니라 compile 단계에서 수행된다.

Conv + BatchNorm + ReLU
        ↓
FusedConvBNReLU

대표적으로

  • TorchInductor
  • TensorRT

같은 시스템에서 수행된다.

 

5. Runtime Optimization 의 핵심 철학

일반적인 딥러닝 시스템에서 Runtime Optimization 의 핵심 철학은 다음과 같다

same computation
different execution strategy

  • 계산 의미는 동일
  • 실행 방법만 최적화

C = A x B

하지만

TensorCore kernel
SIMD kernel
Split-K kernel

같은 여러 realization 중 하나를 선택한다.