본문 바로가기

AI Compiler framework

현재 상황 및 개선해야 할 사항들에 대해 ( Trainer, Kernel, IR 표현 등등... )

0) 지금 상태 

  • Ops 확장 규칙 : api.hpp + kernel.cuh, launcher.cu 패턴들의 사용
  • Registry 존재 : register_all, attr_pack 구조를 통한 선택과 조합이 가능함
  • Python - C++ 연결 : pyd, aicf_fw 스켈레톤으로 end-to-end loop 만들 준비가 됨

개선해야 할 사항

  • 학습 단계 전체를 하나의 실행 계획, Plan 으로 고정하는 루프
  • Plan 이 호출하는 커널 선택 / 생성 IR lowering or variant dispatch
  • 성능 / 정확도 회귀 테스트 & 프로파일링 자동화

 

1) 학습 단계 커널 호출 과정을 고려 ( IR level 보다 먼저)

학습 step 을 3층으로 분해해서 고정하는 것이 우선

1-1. Step 을 Stage 로 나눠서 고정

  • FWD stage : forward ops + loss
  • BWD stage : backward ops (grad)
  • OPT stage : optimizer update (SGD ... )

위 3개를 명시적 분리

1-2. python framework 의 Tensor / Module / Autograd 가 op trace 를 남기게

aicf_fw 에 autograd.py, trainer.py, ops.py 존재, 여기서 핵심은

  • 실행 시점에 단순 _C 호출만 하는 것이 아닌
  • op_kind, tensor_desc, attrs, device, dtype, layout, requires_grad, graph_tag 를 모아
  • Trace(Graph) 를 만들고
  • 그 Trace 를 넘겨서 C++ runtime 이 실행하도록

python : 그래프 생성 / 트레이싱, C++ : 플랜 / 실행 / 캐시를 책임짐

 

2) Kernel 호출 : IR 생성보다 Variant Dispatch 테이블부터 완성

IR 기반 codegen 은 최종 목표, 당장은

2-1 registry / dispatch

  • op_kind.hpp : op id
  • kernel_variant.hpp : variant id + constraints
  • attr_pack.hpp : attrs
  • tensor_desc.hpp : shape / stride / dtype
  • dispatch.hpp : 이 조합으로 variant 를 고르고 launcher 호출

먼저

  • 각 op 마다 최소 2개 variant
    • baseline
    • optimized
  • dispatch 가 제약조건을 만족하는 것 중 best 선택을 하도록

 

 

3) 다음 로드맵

  • Step trace 생성
  • GraphKey + cache 안정화
  • dispatch 강화
  • 회귀 테스트 + ncu 자동 루프