전체 실행 파이프라인
- 모델 / 배치 입력 - 동력 경로 평탄화
- sequential._linearize_path(X, ctx) 가 If/Repeat/EarlyExit 를 실제로 실행될 순차 레이어열로 전개
- 전개 결과는 ctx["path_fingerprint"] 와 ctx["branch_path"] 로 기록
- GraphKey 생성 & 풀 조회
- 입력 서명 + branch_path + variant 으로 해시 안정 키 생성
- graph_pool 또는 로컬에서 이미 캡처된 그래프가 있으면 재사용
- Capture Plan & Optimizer Rebind
- Capture Plan 작성
- 경로에 실제로 등장한 파라미터만 추출해 옵티마이저에 그래드 버퍼를 재바인딩
- Execution Planner - ExecPlan( 축소판 )
- DAG 를 선형 스케줄로 변환
- plan.exec_plan 에 저장되어 런타임이 그대로 해석
- CUDA Graph 캡처 / 재생
- GraphRuntime.run_step() 가 fwd - loss - bwd - opt 한 스텝을 스트림 위에서 수행
- 캡처 성공 시 instantiate 로 그래프 실행자 생성 - 이후 동일 키면 그대로 재생
- NVTX 태그
런타임·플래너 관점의 핵심 변화
- Execution Planner(축소판)
- DAG → 선형 스케줄 생성(단일 스트림).
- 차후 멀티 스트림/이벤트 삽입을 위한 ExecPlan 구조를 표준화.
- Graph Runtime / Autograd Engine
- GraphRuntime.run_step()에 단일 진입점:
forward → loss(_loss_forward shim) → zero grads → backward(Conv2D WS 보장 & BN X_saved) → optimizer.step. - Conv2D는 WS 사전할당(capture-safe), BN은 항상 X_saved 사용.
- 손실 함수의 구버전/신버전 시그니처를 _loss_forward()에서 호환.
- GraphRuntime.run_step()에 단일 진입점:
- 캐시 키 안정화
- GraphSignature(shape, dtype, layout) + branch_path + variant + path_fingerprint로 충돌 없이 재사용 보장.
- Optimizer Rebind
- 경로에 등장한 실제 파라미터만 수집하여 grad 버퍼를 pointer-stable로 재바인딩.
- 원본 옵티마이저가 rebind 미지원이면 경로 전용 인스턴스를 생성해 바인딩.
- NVTX 통일 태깅
- [CAPTURE] warmup / cudaGraphCapture
- [DYN] path_linearize / make_pool_key / record_step_graph / replay xT
- Nsight Systems에서 캡처 vs 재생 타이밍과 **동적 반복 횟수(T)**를 직관적으로 확인 가능.
'dev_AI_framework' 카테고리의 다른 글
| AI Compiler — Role by Graph Type (정적 vs 동적 그래프 형태에 따른 AI 컴파일러의 역할 차이) (0) | 2025.10.29 |
|---|---|
| 세 단계로 구분한 AI 개발자 ( ML 연구자, 커널 엔지니어, 컴파일러 엔지니어 ) (0) | 2025.10.29 |
| Graph Execution & Planning 과 CUDA Graph Capture & Stability 의 차이 (0) | 2025.10.28 |
| 단순 복붙, 각 부분 수정 필요함, 단 이는 최적화 단계에서, 일단 구현 먼저 다 하자 으쌰으쌰 (0) | 2025.10.28 |
| 정적, 동적 학습 루프로 분리한, sequential 및 graph_executor 관련 파일들의 구조 / 관계 / 실행 순서 (0) | 2025.10.28 |