📦compiler
┣ 📂ir
┃ ┣ 📂__pycache__
┃ ┃ ┗ 📜nodes.cpython-312.pyc
┃ ┗ 📜nodes.py
┣ 📂kernels
┃ ┣ 📂__pycache__
┃ ┃ ┣ 📜registry.cpython-312.pyc
┃ ┃ ┗ 📜selector.cpython-312.pyc
┃ ┣ 📜registry.py
┃ ┗ 📜selector.py
┣ 📂passes
┃ ┣ 📂__pycache__
┃ ┃ ┣ 📜canonicalize.cpython-312.pyc
┃ ┃ ┣ 📜fuse_elementwise.cpython-312.pyc
┃ ┃ ┗ 📜pass_manager.cpython-312.pyc
┃ ┣ 📜canonicalize.py
┃ ┣ 📜fuse_elementwise.py
┃ ┗ 📜pass_manager.py
┣ 📂runtime
┃ ┣ 📂__pycache__
┃ ┃ ┗ 📜executor.cpython-312.pyc
┃ ┗ 📜executor.py
┣ 📂__pycache__
┃ ┗ 📜__init__.cpython-312.pyc
┗ 📜__init__.py
📦graph_executor_v2
┣ 📂in
┣ 📂include
┃ ┗ 📜ge_v2_api.h
┣ 📂src
┃ ┣ 📜bindings_min_api.cpp
┃ ┣ 📜launch_table.cpp
┃ ┗ 📜my_kernels.cu
┣ 📂__pycache__
┃ ┗ 📜__init__.cpython-312.pyc
┣ 📜CMakeLists.txt
┣ 📜graph_executor_v2.cp312-win_amd64.pyd
┣ 📜pyproject.toml
┣ 📜README.md
┣ 📜smoke_test_v2.py
┗ 📜__init__.py
Graph_executor = 네이티브 실행기 (런타임 + 커널)
CUDA/C++ 로 작성된 커널 (src/my_kernels.cu) 과 런처 (src/launch_table.cpp), 그리고 이를 파이썬에서 호출하기 위한 바인딩 (src/bindings_min_api.cpp) 이 들어있는 파이썬 확장 모듈 프로젝트
build/ 는 CMake 가 생성한 빌드 산출물 폴더,
compiler = 그래프 컴파일러(프론트엔드 + 최적화 패스)
파이썬 코드로 된 IR 표현 (ir/nodes.py), 커널 선택 로직 (kernels/selector.py, kernels/registry.py), 최적화 패스(passes/*.py), 그리고 파이썬 레벨의 실행기 (runtime/executor.py) 가 들어있음
이 컴파일러가 연산 그래프를 정리/퓨전하고, 어떤 네이티브 커널을 호출할지 결정한 뒤, 최종 실행 단계에서 graph_executor 모듈을 호출한다.
두 폴더의 관계 (데이터 호출 흐름)
- 모델/그래프 구성 : compiler.ir.nodes 로 연산 그래프를 만든다.
- 패스 적용(컴파일 단계) : compiler.passes.pass_manager 가 canonicalize, fuse_elementwise 등 최적화/변환을 수행한다. -> 커널 호출 단위가 정리된다.
- 커널 선택(타게팅) compiler.kernels.selector 가 레지스트리 정보를 바탕으로 어떤 op 가 graph_executor 의 어떤 커널/런치 엔트리로 매핑되는지 결정
- 실행 준비 (런타임 컨트랙트 충족) compiler.runtime.executor 가 텐서 포인터, 스트라이드, shape, grid/block 등 런처가 필요로 하는 인자 형식으로 패킹한다.
- 네이티브 호출 : 파이썬에서 import graph_executor_v2 로 로딩된 pyd 에 바인딩된 함수를 호출, 내부에서 launch_table.cpp 가 op_id->실제 CUDA 커널 엔트리를 찾아 실행
- CUDA 커널이 결과를 쓰고, 파이썬 실행기가 다음 노드로 이어간다.
즉, compiler 는 무엇을/어떻게 실행할지를 결정하는 쪽, graph_executor 는 정해진 걸 진짜로 GPU에서 돌리는 쪽
폴더별 핵심 파일 역할(간단 안내)
- graph_executor_v2/src/bindings_min_api.cpp
pybind11 등으로 파이썬에 노출되는 함수 정의. 파이썬↔C++ ABI 경계. - graph_executor_v2/src/launch_table.cpp
op/커널 ID→함수 포인터(또는 functor) 테이블. 런처가 여길 통해 커널 호출. - graph_executor_v2/src/my_kernels.cu
실제 CUDA 커널들. - graph_executor_v2/include/ge_v2_api.h
C++ 공개 헤더. 인자 구조체, enum, 함수 시그니처 등 런타임 컨트랙트의 기준. - graph_executor_v2/build/…
CMake 탐침/컴파일 산출물(예: CMakeCUDACompilerId.*, *.obj, *.fatbin, rules.ninja, .ninja_log 등).
→ **VCS(깃)**에는 보통 제외합니다. - graph_executor_v2/graph_executor_v2.cp312-win_amd64.pyd
파이썬에서 import graph_executor_v2로 로딩되는 네이티브 확장 모듈. - compiler/ir/nodes.py
연산 그래프의 노드/엣지/속성 정의. - compiler/passes/*.py
그래프 변환/최적화 규칙들(정규화, 엘리먼트와이즈 퓨전 등). - compiler/kernels/registry.py, selector.py
op→백엔드 커널 매핑 정보/정책. - compiler/runtime/executor.py
그래프 실행기(토폴로지 순서 실행, 메모리 준비, 네이티브 모듈 호출).
import 및 의존 방향
- compiler ➜ (런타임 시) import graph_executor_v2
(반대 방향 의존성은 없음: 네이티브 모듈은 컴파일러를 모르고, 계약(API)만 노출) - graph_executor_v2는 독립적으로 빌드/배포 가능한 모듈이며, 파이썬에서 바로 불러 쓸 수 있음.
compiler는 그 모듈이 제공하는 API 시그니처에 맞춰 파라미터를 준비해서 호출.
'dev_AI_framework' 카테고리의 다른 글
| graph_executor_v2 변경 가이드 (무엇을 바꿀 때 어디를 고치는가) (0) | 2025.09.02 |
|---|---|
| graph_executor_v2 통합 문서 (수정 사항 + 빌드 & 스모크) (0) | 2025.09.02 |
| 커널 ABI, 런타임 컨트랙트에 대해 (0) | 2025.09.02 |
| AI Compiler 구현 - python -> graph_executor_v2 -> launch_kernel() 까지의 완료된 상황 (0) | 2025.09.02 |
| "CUDA" + "C++" + "pybind11" 모듈의 빌드 방법 및 과정, 체크리스트 확인 (0) | 2025.09.01 |