어느 방법으로 갈 지 결정하기 위해서는 런타임 조건과 모델 구조의 속성을 명확히 이해해야 한다.
"무엇을 기준으로 정적 실행이 가능한지"
"언제 동적 모드로 전화해야 하는지"
모델의 실행 경로가 Python 레벨에서 고정되어 있는냐로 판정됨,
| 모델의 Layer 시퀀스가 항상 동일 | ✅ 예: MLP, CNN | ❌ 분기나 반복이 존재 |
| 입력 shape과 dtype이 항상 동일 | ✅ (CUDA Graph requirement) | ❌ (입력 shape 변화 시) |
| 조건문 (If / EarlyExit) 이 없음 | ✅ | ❌ cond에 따라 다른 경로 실행 |
| 반복문 (Repeat, RNN unroll 등) 이 없음 | ✅ | ❌ 반복 횟수가 입력에 따라 달라짐 |
| Dropout 등 RNG 사용이 결정적 (advance_seed로 해결 가능) | ✅ | ✅ (둘 다 가능) |
| 모든 연산이 capture-safe (cudaMalloc, memcpy, sync 없음) | ✅ | ❌ (동기 연산 포함 시 capture 불가) |
모델이 항상 같은 연산 그래프를 수행하면 정적 실행 가능
실행 때마다 조건/반복이 달라질 수 있으면 동적 실행 필요
성능 관점에선 launch overhead 와 python 인터프리터 비용이 제거되는 정적 실행이 병목 제거 효과 제공
약 3 ~ 10 배 정도의 차이
정적 모드는 stream / event / allocator 가 완전히 고정됨
GPU 워크로드가 균등하게 배분되고, memory fragmentation 최소화
동적 모드는 path 마다 stream 수, workspace 필요량이 달라져 memory pool 캐시가 branch fragmentation 을 일으킬 수 있음.
하지만 필연적 동적 실행이 필요한 경우들이 다수 존재...
'dev_AI_framework' 카테고리의 다른 글
| 단순 복붙, 각 부분 수정 필요함, 단 이는 최적화 단계에서, 일단 구현 먼저 다 하자 으쌰으쌰 (0) | 2025.10.28 |
|---|---|
| 정적, 동적 학습 루프로 분리한, sequential 및 graph_executor 관련 파일들의 구조 / 관계 / 실행 순서 (0) | 2025.10.28 |
| epilogue 실행 방식 고민 - 모놀리식 통합형 ( 항상 커널 내부에 epilogue 가 존재하도록 !!! ) (0) | 2025.10.20 |
| epilogue - ep_apply (0) | 2025.10.20 |
| epilogue - epilogue.h (0) | 2025.10.20 |