본문 바로가기

dev_AI_framework

현재 상황 정리, 앞으로 뭘 어떻게 해야 할까

⚙️ 진행 상황 요약 (현재까지의 개발 흐름)

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

 

다음으로 뭘하지.. 현타오네