여기서 컴파일러의 역할 요약
IR 로 표현된 모델 실행을, 런타임 판단 엇이 결정이 고정된 커널 시퀀스로 변환하고 그 결정 결과를 실행, 캡처, 리플레이까지 일관되게 유지하는 것
1. 전체 파이프라인 개요
Python Model
↓
[Trace] symbolic IR 생성
↓
[Lower Stage A] 연산 분해 + dtype 기반 kernel_id 결정
↓
[Lower Stage B] shape / alignment 기반 kernel 업그레이드
↓
[Plan] 메모리/바인딩 결정
↓
[Exec] kernel_id 기반 실행 (dispatch 금지)
↓
[Capture] CUDA Graph 고정
↓
[Replay] 완전 결정 재사용
2. Trace 단계 — “의미”만 기록
역할
- Python 연산을 의미적 IR로 변환
- 실행하지 않는다
- shape, dtype, 의존성만 보존
특징
- Linear, ReLU, SgdStep 같은 고수준 의미 노드
- 아직 커널 개념 없음
- 동적 제어 흐름이 있어도 IR로 정규화 가능
결과물
- IRGraph
- values (tensor spec)
- nodes (semantic ops)
이 단계는 Framework 역할에 가깝다.
3. Lower Stage A — 연산 분해 + 1차 결정
역할
- IR 노드를 primitive op 시퀀스로 변환
- dtype 기반으로 kernel_id 1차 선택
- “이 op는 이 커널 계열을 쓴다”를 컴파일 타임에 결정
예시
Linear
→ gemm + bias_add
→ kernel_id = gemm_f16_tc_wmma_out_f16_v0
특징
- 런타임 dispatch 없음
- kernel_id가 문자열로 IR에 박힘
- 아직 성능 최적화는 최소한
이 시점부터 Compiler 영역에 진입한다.
4. Lower Stage B — 하드웨어 조건 기반 업그레이드
역할
- Stage A에서 결정된 kernel_id를
- shape / alignment / numel 조건을 보고 교체
대표 예시
- sgd_step_f16 → sgd_step_f16_half2
- bias_add_f16 → bias_add_f16_vec2
- relu_f16 → relu_f16_vec2
특징
- 동일 의미, 다른 커널
- 조건이 안 맞으면 교체 안 됨
- 교체 결과도 kernel_id로 고정
이 단계는 **전통적 컴파일러의 “target-specific lowering”**에 해당한다.
5. BindingPlan — 실행 환경 결정
역할
- 모든 value에 대해:
- input / param / static 분류
- 메모리 위치 결정
- 재사용 가능한 static buffer를 명시적으로 분리
중요한 점
- 여기서 alias / in-place 여부가 고정
- execution 중 메모리 판단 없음
결과
- BindingPlan
- 이후 실행은 plan을 그대로 따른다
6. Exec — 결정된 커널만 실행
핵심 정책
ExecOptions(require_kernel_id=True)
이 옵션의 의미는 매우 중요하다.
kernel_id 없는 op는 실행 자체를 금지한다
실행 방식
- _C.launch_by_id(kernel_id, kind, ...)
- _C.op_call (런타임 dispatch) 사용 금지
결과
- 실행 중:
- kernel 선택 ❌
- shape 판단 ❌
- dtype 판단 ❌
- 오직 컴파일 결과만 사용
이 시점에서 AICF는 순수 실행 엔진이다.
7. Attr Schema — 파라미터도 컴파일 산출물
예: SGD lr
- lr을 Python에서 직접 넘기지 않음
- AttrBlob(schema_id="SGDS", payload=float32 lr)
- kernel은 schema_id 기반으로 파싱
의미
- 하이퍼파라미터도
- “런타임 변수”가 아니라 컴파일 입력
이것은 딥러닝 컴파일러에서 흔히 빠지는 부분을 정확히 잡고 있음
8. Capture / Replay — 실행 그래프의 고정
Capture
- 이미 kernel_id로 고정된 실행을
- CUDA Graph로 캡처
Replay
- 동일 graph를 반복 실행
- 결정 경로 완전 제거
중요한 점
- capture 시점에도 kernel_id가 동일
- replay 시점에도 변경 불가
여기서 비로소 **“실행 = 데이터만 바뀌는 과정”**이 된다.
9. Trace by ID — 검증 가능한 컴파일러
trace 결과 예
kid:sgd_step_f16_half2_v0 kind:sgd_step
의미
- “어떤 커널이 실행됐는지”를
- 정확히 재현 가능
- 성능·정확도 디버깅이 가능
이건 단순 로그가 아니라
컴파일 산출물의 실행 증명서다.
10. 지금 AICF v2의 Compiler적 정체성
정리하면 AICF v2는:
- ❌ 그래프 최적화 중심 컴파일러
- ❌ 자동 튜닝 시스템
- ❌ 런타임 적응형 엔진
대신
- ✅ 결정 시점이 명확한 컴파일러
- ✅ kernel selection을 컴파일 타임에 고정
- ✅ 실행/캡처/리플레이가 동일한 결과를 보장
- ✅ 디버깅 가능한 AI Compiler
'AI Compiler framework' 카테고리의 다른 글
| 테스트 코드를 통한 파일 실행 순서 확인 (0) | 2026.01.21 |
|---|---|
| 그래프 최적화 기법 ( Fusion, Constant Folding, CSE ) (0) | 2026.01.21 |
| 기존의 구조가 컴파일러로서 부족한 이유, 새롭게 제안한 구조 - IR 표현 재구성 단계 추가 (1) | 2026.01.20 |
| ISA vs Compiler (0) | 2026.01.20 |
| AICF Execution Architecture Overview - Python-driven Graph & Scheduling + CUDA Primitive Execution (0) | 2026.01.20 |