1. 현재 실행 구조 ( IR 없는 상태 )
1.1 전체 개요
현재 AICF 는 IR 기반 컴파일러 이전 단계의 실행 시스템,
Python 프레임 워크 - CUDA 백엔드 - CUDA Graph 런타임이 직접 연결된 구조를 가진다
핵심 특징은
- 연산 즉시 실행
- CUDA Graph 는 이미 결정된 실행 시퀀스를 캡처
- 최적화는 커널 내부 또는 수동 구서에 국한
1.2 현재 실행 경로
Python (aicf_fw)
└─ train_step()
├─ Linear / LayerNorm / ReLU / ...
│ └─ backend.op_call_out(...)
│ └─ _C.op_call(...)
│ └─ dispatch_v0(...) // 즉시 CUDA kernel enqueue
├─ autograd_backward(...)
│ └─ op_call_out(...) 반복
└─ optimizer.step()
- python 에서 연산이 호출되는 순간
- C++ 바인딩이 TensorDesc / AttrPack 을 만들고
- dispatch_v0 를 통해 CUDA Kernel 이 바로 enqueue 됨
1.3 CUDA Graph 와의 관계
- capture_begin 호출 이후
- 모든 C.op_call 은 AICF 전용 stream 으로 enqueue
- CUDA runtime 이 enqueue 된 kernel 들을 graph 로 기록
- capture_end()
- graph - graphExec 생성
- replay
- 동일한 graph Exec 을 반복 실행
CUDA Graph 는 이미 python 이 실행한 커널 시퀀스를 그대로 저장하는 역할
2. IR 기반 AI 컴파일러 도입 시 개녑적 변화
op_call 이 실행을 의미하지 않게 된다.
즉, 연산 호출과 실제 실행 사이에 컴파일 단계가 삽입된다.
3. IR 도입 후의 실행 구조
3.1 단계 분리
- Trace / IR 생성 단계
- Compile / lowering 단계
- Runtime 실행 단계
1,3 번이 지금 구조에서 분리된다.
3.2 Trace / IR 생성 단계
- python 프레임워크는 더 이상 커널을 실행하지 않음
- 대신 연산 정보를 IR Node 로 기록
Python (trace mode)
└─ Linear(x, W)
└─ ir_add_node(
op=Gemm,
inputs=[x_id, W_id],
outputs=[y_id],
attrs={transB: true}
)
해당 단계에선
- cuda kernel 실행 x
- cuda graph capture x
- 오직 그래프 구조 기록만 수행
3.3 compile / lowering 단계
C++ 컴파일러 코어가 IR 을 받아서 다음을 수행
- IR 정규화
- IR-level 최적화
- 커널 variant 선택
- buffer lifetime 분석 및 메모리 플랜 생성
- executino plan 생성
이 시점에서
- 어떤 op_call 을
- 어떤 순서로
- 어떤 버퍼를 써서 실행할지가 결정됨
3.4 Runtime 실행 단계
- Execution Plan 을 실행
- 이 때 비로소
- C.op_call
- dispatch_v0
- CUDA Graph capture 가 사용됨
op_call 은 컴파일 결과를 실행하는 내부 도구가 된다.
4. op_call 의 역할 변화
현재
op_call == 실행
- python 이 호출, 즉시 커널 실행
- capture 중이면 그래프에 기록
IR 도입 시
op_call == 실행 엔진의 내부 primitive
- python trace 단계에서는 호출되지 않음
- C++ runtime / planner 가 plan 실행 시 호출
- 실행 시점은 컴파일 결과에 의해 결정
5. CUDA Graph 캡처의 위치 변화
현재
- python 이 capture_begin / end 를 직접 호출
- python 코드 실행 자체가 캡처 대상
ir 기반 구조
- c++ runtime 이 내부적으로 capture 수행
- python 은 이 그래프를 실행해달라는 요청만 전달
Python: run(graph_key)
C++ : if not cached:
build plan
capture(plan)
replay(plan)
6. 바뀌는 것과 유지되는 것
바뀌는 것
- op_call 호출 시점
- python 의 역할
- cuda grahp 캡처 주제
- 실행 경로의 결정 시점
유지되는 것
- 커널 구현
- cuda graph 매커니즘 자체
- 스트림 정책
- backend / registry 구조
실행 중심에서 컴파일 중심 구조로 전환
op_call 이 실행 지시에서 컴파일 결과 실행으로 의미가 바뀌는 것
'AI Compiler framework' 카테고리의 다른 글
| AI Compiler 처리 파이프라인 해석 (0) | 2026.01.06 |
|---|---|
| IR / Plan / PlanCache / GraphExec 각각의 역할 (0) | 2026.01.06 |
| IR 기반 AI 컴파일러란 (0) | 2026.01.05 |
| 딥러닝을 수식 그래프가 아닌 시간을 가진 실행 프로그램으로 (1) | 2026.01.02 |
| PR3: Torch Golden 과 1-Step Training 일치까지의 전체 과정 정리 (1) | 2025.12.30 |