⚙️ 진행 상황 요약 (현재까지의 개발 흐름)
- Python 프론트엔드로 모델 정의
기존에 익숙한 Python 모델 구조(Sequential/Layers)를 그대로 유지하면서, 내부적으로는 정적 그래프화가 가능한 형태로 규격화함.
→ 사용자 친화성과 캡처 가능성의 균형 확보. - Capture Plan 기반 버퍼·Workspace 사전할당 & CUDA Graph 한 스텝 캡처·재생 성공
단순히 커널 내 동적 할당을 막는 것뿐 아니라, 전체 메모리 공간을 사전에 계획·할당해야 한다는 점을 깨달음.
→ Capture Plan이 그 역할을 수행하며, 한 스텝(Forward→Loss→Backward→Opt) 캡처 및 재생 성공. - 동적·정적 경로 모두 GraphSignature → GraphKey로 관리, Graph Pool 재사용 동작
동적 모델에서 조건 분기로 인해 동선과 구조가 달라지는 경우를 분리·관리하기 위해 등장한 개념.
→ 동일 경로(hit)는 그래프 재사용, 새로운 경로는 별도 그래프로 캡처. - RNG·Stream·Allocator 고정으로 결정론적 재생 보장
처음엔 필요성을 몰랐으나 Dropout의 비결정성 문제를 겪으며 중요성을 인식.
→ 이후 모든 실행 컨텍스트에서 Philox 기반 RNG, 고정 스트림, 사전할당 allocator 구조 도입. - NVTX 통합으로 타임라인 시각화 및 병목 구간 확인
원래 계획에는 없었지만, print 로그의 한계를 느끼며 시각적 타임라인 분석을 도입.
→ Nsight Systems에서 [DYN]/[CAPTURE]/[REPLAY] 구간별 병목 확인 및 커널 병렬화 패턴 분석 가능. - Epilogue Fusion 경로 설계·연동 완료, GEMM 계열 통합
커널 간 데이터 이동을 최소화하기 위해 Epilogue 연산 결합(bias+activation+dropout) 개념을 도입.
→ 단일 커널 내 연산 융합의 장점뿐 아니라, 대기 시간 증가로 인한 trade-off도 직접 확인함.
→ 실제로 컴파일 시 런타임 최적화(불필요한 분기 제거)와 Epilogue 지원 범위의 한계 모두 파악. - Capture 중 동적 할당·동기 호출 차단하는 Shim/Guard 적용
단순한 “동적 호출 회피”를 넘어서, 강제적인 보호 장치로 캡처 안정성을 확보.
→ 불법 호출 시 즉시 에러를 발생시켜 그래프 무효화를 방지. - Pybind11 바인딩 경로 정리 및 Python↔C++ 호출 규약 통일
C++/CUDA 모듈을 Python 환경에서 안전하게 호출하기 위한 glue 계층 설계로 시작.
→ 이후 캡처-세이프 설계를 반영한 일관된 바인딩 규약으로 발전.
다음으로 뭘하지.. 현타오네
'dev_AI_framework' 카테고리의 다른 글
| ai_shim.hpp 의 수정 이후 오류 발생, 해결 과정 - activation function 에 의한 save_z 조건의 규칙을 좀 더 세분화해야겠다. (0) | 2025.11.10 |
|---|---|
| 백엔드의 standalone ops 체제로 전환 ( ai_shim 의 사용 ) (0) | 2025.11.10 |
| graph_executor, 어떤 방식으로 graph_key, pool 의 분리, 재사용 확인 (0) | 2025.11.04 |
| AI Compiler — Role by Graph Type (정적 vs 동적 그래프 형태에 따른 AI 컴파일러의 역할 차이) (0) | 2025.10.29 |
| 세 단계로 구분한 AI 개발자 ( ML 연구자, 커널 엔지니어, 컴파일러 엔지니어 ) (0) | 2025.10.29 |