본문 바로가기

AI Compiler framework

IR 기반 AI 컴파일러란

1. 한 문장 정의

IR 기반 AI 컴파일러는

모델 실행을 직접 수행하지 않고, 연산을 중간 표현 IR 로 추상화한 뒤 그 IR 을 최적화, 변환하여 특정 하드웨어에서 효율적으로 실행 가능한 실행 계획으로 컴파일하는 시스템

핵심은 실행 이전 단계에서 구조를 이해하고 바꾼다는 점

 

2. 두 상태 비교 IR 이 없는 시스템 VS IR 이 있는 AI 컴파일러

IR 이 없는 경우

  • python 프레임워크가 op 를 즉시 실행
  • backend 는 op 단위로 커널을 dispatch
  • CUDA Graph 는 이미 정해진 실행 시퀀스를 캡처
  • 최적화는 커널 내부 또는 수동 조합

장점

  • 구현 단순
  • 커널 / 런타임 디버깅에 유리

단점

  • 연산 사이 관계를 모름
  • 전체 그래프 관점의 최적화 불가
  • 같은 연산이라도 shape / dtype 이 바뀌면 매번 새로운 캡처 / 실행 경로 필요

 

IR 이 있는 AI 컴파일러

  • python 실행은 trace 단계에서만 사용
  • 실행 경로는 IR 그래프로 고정
  • 최적화는 IR 위에서 수행
  • 실행은 IR - lowered plan - runtime

장점

  • 연산 간 관계를 명시적으로 다룸
  • fusion, reordering, memory planning 가능
  • shape / dtype / 옵션별 specialization 및 캐시 가능

비용

  • IR 설계 + lowering + runtime 플래너 필요
  • 디버깅 난이도 증가

 

3. IR intermediate Representation 의 역할

IR 은 단순한 중간 데이터 구조가 아님, 

IR 이 있으면 컴파일러는 다음 질문에 답할 수 있다.

  • 이 연산은 누구의 출력을 쓰는가?
  • 이 텐서는 언제 생성되고 언제 사라지는가?
  • 이 연산들은 합쳐도 되는지?
  • 어떤 커널 variant 가 가장 적합한지
  • 이 실행 경로는 다시 쓸 수 있는지

IR = 실행을 설명하는 언어

 

 

4. IR 기반 AI 컴파일러의 최소 구성 요소

4.1 Trace / Graph Builder

  • python 프레임워크 실행을 기록
  • 즉시 실행하지 않고, 아래 정보로 IR Node 생성
    • op_kind
    • inputs / outputs
    • attrs (eps, affine, transA )
    • tensor metadata

결과 : 고정된 연산 그래프

 

4.2 IR Grpah

IR Graph 는 다음을 포함한다

IR Node

  •  연산 종류
  • 입력 텐서 ID / 출력 텐서 ID
  • attribute set
  • side-effect 여부

IR Tensor

  • shape
  • dtype
  • layout / stride
  • alias 정보
  • lifetime

 

4.3 IR-level Optimization

IR 의 핵심

대표적인 예

  • Op Fusion
  • Eilmination
  • Reordering
  • Precisionpolicy
  • Static path extrraction

 

4.4 Lowering ( IR - Execution Plan )

IR 을 실제 실행 가능한 형태로 변환

포함되는 작업

  • op - backend kernel 매핑
  • kernel variant 선택
  • launch config 결정
  • buffer allocation / reuse 계획
  • CUDA Graph capture 계획 생성