전체 파이프라인(러프 스케치)
Frontend
- 입력: Python 모듈(네이티브 레이어 API), ONNX/TF/PyTorch trace 등
- 출력: High-Level IR (HLIR) 그래프 (op=Conv2D/GEMM/SDPA/LayerNorm/… + attr)
IR Passes (Optimizer/Lowering)
- 정적분석: dtype/shape/stride 추론, 정규화(브로드캐스트/컨티구어스), 패턴 매칭
- 최적화: 연산 병합/퓨전(GEMM+Bias+Act → regemm_epilogue), 상수폴딩, 레이아웃 선택(NHWC↔NCHW), AMP 정책 설정(fp16/bf16+fp32 Accum), 아토믹 회피/리덕션 전략 등
- 출력: Mid/Low-Level IR (MLIR/LLIR) — 백엔드에 가까운 op 집합(eg. GemmBiasAct, SdpaFused, EwiseAdd, ReduceMax …)과 레이아웃/타일링 힌트
커널선택(디스패치) & 코스트모델
- 각 op 노드마다 registry.select(op, problem, hw_caps, prefs) -> KernelHandle
- 규칙 기반 + 마이크로벤치 데이터(또는 런타임 오토튜닝) 혼합
- 예: GemmBiasAct → regemm_epilogue vs cublasLt epilogue vs naive + ewise
- 실패 시 폴백 커널 으로 보장
스케줄러 & 메모리 플래너
- 노드 토폴로지 정렬 → 스트림/이벤트 배치(겹치는 노드 병렬화)
- 라이프타임 분석 + 버퍼 재사용(아레나 할당) + 체크포인팅
- 오토그라드용 역전파 그래프와 공간-시간 트레이드오프 조절(activation recompute)
Executable 생성
- 선택된 커널 핸들 + 파라미터 + 텐서 레이아웃 + 런타임 의존성(스트림/이벤트/워크스페이스)로 실행플랜 고정
- 학습 루프에서 반복 사용(그래프 캐시/셰이프 키)
런타임(학습)
- forward() → 손실 커널 → backward()(규칙 기반 미분/커스텀 bwd 커널) → 옵티마이저(ewise/update)
- 배치마다 실행플랜만 주입 → 최소 오버헤드
최소 구현 로드맵(4 단계)
- IR Core & Registry 연결
- HLIR/LLIR 구조체 + shape/dtype 패스
- registry.select() 스켈레톤 + _ops_gemm만 연결
- 간단 네트워크(MLP) compile/run 성공
- Fusion & AMP & Planner
- GemmBiasAct 퓨전 + arena allocator + 1~2개 스트림 스케줄링
- AMP 정책과 정확도 가드(ewise/reduce fp32)
- 역전파 그래프 & 옵티마이저
- rule-based bwd(mlp 기준) + SGD/Adam ewise 커널
- compile once, train many 경로 성능/안정화
- 확장
- conv2d, sdpa, layernorm, softmax, reduction 번갈아 추가
- 코스트모델/오토튜너(벤치 캐시 + 워밍업) 고도화
- 멀티-GPU(DDP/AllReduce) 스텁
핵심 포인트 요약
- 지금의 플러그인식 바인딩 + 커널 레지스트리는 “IR 해석 → 커널선택” 컴파일러에 매우 적합.
- regemm_epilogue는 구조상 이미 분리된 커널 집합이고, 플러그인 모듈화만 하면 퓨전 에피로그를 디폴트 경로로 쓰도록 쉽게 바꿀 수 있어.
- 학습까지 포함하려면 역전파 규칙/커널과 메모리/스케줄 정책을 IR 패스와 함께 고정하는 것이 포인트.
- 이후에는 오토튜닝 DB와 코스트모델이 성능의 관건.
'dev_AI_framework' 카테고리의 다른 글
| Z - caching in epilogue gemm backward ( 연산 비용 - 메모리 Trade-off) (0) | 2025.09.30 |
|---|---|
| 각 모듈별 독립 구현 변경 (0) | 2025.09.29 |
| 어느 단위 레벨까지 구현해야 할까 에 대한 고민 - 기본 레벨 연산들은 끝도 없 (0) | 2025.09.24 |
| CUDA Backend: Slice & Concat 연산 문서 (0) | 2025.09.24 |
| 행렬 곱, bias 문제 내용 (0) | 2025.09.23 |