1. 연산자 추상화 설계 ( Operator Abstraction )
Layer ( 선언 ) - Emitter ( 기록 ) - IR Node ( 구조화 ) - Backend ( 실행 ) 의 4 단계로 분리하여 일반화
1.1 일반화된 인터페이스 : emit 및 emit_bwd
모든 연산자는 emitters / cuda / 패키지 내에 독립된 모듈로 존재, 다음 두 함수를 표준으로 구현
- emit
- Forward IR 생성 : 연산의 종류, 속성 스키마, 데이터 패킷을 Builder 에 기록
- 기록 중심 : 실제 연산을 수행하는 것이 아니라 연산의 의도를 IR Node 로 남기는 과정
- emit_bwd
- Autograd 메커니즘 : 순전파 노드를 참조하여 역전파 연산을 자동으로 구성
- Gradient Flow : 입력 Vid 들에 대해 계산된 미분값을 반환, 시스템은 이를 통해 연쇄 법칙을 수행
2. IR 누적 및 최적화 파이프라인 ( IR Accumulation & Optimization )
사용자가 모델을 정의하고 실행하는 것은 연산의 지연 실행 모델을 따른다
- IR Accumulation : modul.build 호출 시, Builder 는 모든 연산 노드를 리스트 형태로 선형 누적한다.
- Identity Optimization : 현재는 기록된 순서대로 실행하는 Identity 상태, 전체 그래프가 확보되어 있음
- Static Role Binding : compile 단계에서 입력, 출력, 파라미터, 상태 변수들의 역할을 확정하고 메모리 주소를 고정한다.
3. CUDA Graph 기반 고성능 실행
오버헤드가 낮아진 Static Graph 로 변환
- Capture Mode : 첫 번째 실행 시 CPU 명령어를 GPU 스트림에 녹화 모든 텐서는 고정된 메모리 주소를 가져야 한다.
- Replay Mode : GPU 가 스스로 기록된 연산 시퀀스 실행
4. 결론 : AICFv2 의 확장성
새로운 연산자 추가 시 백엔트 커널 구현, Emitter 규격에 맞춰 등록하면 됌
- 98 % 이상의 정확도로 MNIST 학습 성공
- 연산자 추가 시 발생하는 통신 규격 및 데이터 흐름 문제 해결 가이드 정립
- CPU 오버헤들르 최소화한 CUDA Graph 실행 환경 구축