본문 바로가기

dev_AI_framework

폴더 및 파일 구조 변경 - Python 내 통제 방법으로 변경 예정

개발/유지/확장 면에서 Python 통제형이 훨씬 유리합니다. 런치 오버헤드는 CUDA Graphs지속(persistent) 커널로 대부분 상쇄할 수 있습니다.

 

왜 Python 통제가 유리한가 (실전 관점)

  1. Pass/퓨전 반복 속도
  • MatMul+Bias+Act, Conv+BN+Act 같은 패턴-리라이트를 Python에서 20~50줄로 시도/롤백/AB테스트 가능.
  • C++/CUDA로 하면 컴파일·디버그 사이클이 길고 실험 비용 큼.
  1. 커널 선택(Selector)·오토튠
  • Shape/레이아웃/정밀도에 따라 후보 커널 점수화 → Python에서 마이크로 벤치 후 캐시(JSON/SQLite).
  • 장비 바뀌어도 학습된 선택을 재사용.
  1. 멀티 백엔드
  • CPU/ROCm/NPU를 붙일 때 IR/Pass/Selector는 그대로 쓰고, launch_*만 새 바인딩으로 연결.
  1. 디버깅·관측성
  • IR dump, pass-by-pass diff, 메모리 플래너 시각화 등 “보이는 개발”이 가능.

 

📦dev
 ┣ 📂.pytest_cache
 ┃ ┣ 📂v
 ┃ ┃ ┗ 📂cache
 ┃ ┃ ┃ ┣ 📜lastfailed
 ┃ ┃ ┃ ┣ 📜nodeids
 ┃ ┃ ┃ ┗ 📜stepwise
 ┃ ┣ 📜.gitignore
 ┃ ┣ 📜CACHEDIR.TAG
 ┃ ┗ 📜README.md
 ┣ 📂backend
 ┃ ┣ 📂graph_executor
 ┃ ┃ ┣ 📂activation
 ┃ ┃ ┃ ┣ 📜activation_ops.cu
 ┃ ┃ ┃ ┣ 📜activation_ops.cuh
 ┃ ┃ ┃ ┗ 📜readme.md
 ┃ ┃ ┣ 📂bias
 ┃ ┃ ┃ ┣ 📜add_bias_rowwise.cu
 ┃ ┃ ┃ ┣ 📜add_bias_rowwise.cuh
 ┃ ┃ ┃ ┗ 📜readme.md
 ┃ ┃ ┣ 📂bindings
 ┃ ┃ ┣ 📂build
 ┃ ┃ ┃ ┣ 📂lib.win-amd64-cpython-312
 ┃ ┃ ┃ ┃ ┣ 📜graph_executor.cp312-win_amd64.exp
 ┃ ┃ ┃ ┃ ┣ 📜graph_executor.cp312-win_amd64.lib
 ┃ ┃ ┃ ┃ ┗ 📜graph_executor.cp312-win_amd64.pyd
 ┃ ┃ ┃ ┗ 📂temp.win-amd64-cpython-312
 ┃ ┃ ┃ ┃ ┗ 📂Release
 ┃ ┃ ┃ ┃ ┃ ┗ 📜build.ninja
 ┃ ┃ ┣ 📂cnn
 ┃ ┃ ┃ ┣ 📜cnn_kernels.cu
 ┃ ┃ ┃ ┣ 📜cnn_kernels.cuh
 ┃ ┃ ┃ ┗ 📜readme.md
 ┃ ┃ ┣ 📂executor
 ┃ ┃ ┃ ┣ 📜run_graph.cu
 ┃ ┃ ┃ ┣ 📜run_graph.cuh
 ┃ ┃ ┃ ┣ 📜run_graph_backward.cu
 ┃ ┃ ┃ ┣ 📜run_graph_backward.cuh
 ┃ ┃ ┃ ┣ 📜run_graph_utils.cuh
 ┃ ┃ ┃ ┣ 📜run_graph_with_loss.cu
 ┃ ┃ ┃ ┗ 📜run_graph_with_loss.cuh
 ┃ ┃ ┣ 📂ge
 ┃ ┃ ┃ ┣ 📜act_map.cuh
 ┃ ┃ ┃ ┣ 📜alloc_utils.cuh
 ┃ ┃ ┃ ┣ 📜cublas_utils.cuh
 ┃ ┃ ┃ ┣ 📜cuda_check.cuh
 ┃ ┃ ┃ ┣ 📜fill.cuh
 ┃ ┃ ┃ ┣ 📜gemm_rm.cuh
 ┃ ┃ ┃ ┣ 📜logging_config.h
 ┃ ┃ ┃ ┣ 📜pack_utils.cu
 ┃ ┃ ┃ ┗ 📜pack_utils.cuh
 ┃ ┃ ┣ 📂kernels
 ┃ ┃ ┃ ┣ 📂activation
 ┃ ┃ ┃ ┣ 📂add
 ┃ ┃ ┃ ┣ 📂backward
 ┃ ┃ ┃ ┣ 📂graph
 ┃ ┃ ┃ ┣ 📂matmul
 ┃ ┃ ┃ ┗ 📂reduce
 ┃ ┃ ┣ 📂loss
 ┃ ┃ ┃ ┣ 📜loss_kernels.cu
 ┃ ┃ ┃ ┗ 📜loss_kernels.cuh
 ┃ ┃ ┣ 📂optimizer
 ┃ ┃ ┃ ┣ 📜optimizer_config.cuh
 ┃ ┃ ┃ ┣ 📜optimizer_kernels.cu
 ┃ ┃ ┃ ┣ 📜optimizer_kernels.cuh
 ┃ ┃ ┃ ┣ 📜optimizer_types.cuh
 ┃ ┃ ┃ ┗ 📜readme.md
 ┃ ┃ ┣ 📂pooling
 ┃ ┃ ┃ ┣ 📜pooling_kernels.cu
 ┃ ┃ ┃ ┣ 📜pooling_kernels.cuh
 ┃ ┃ ┃ ┣ 📜pooling_ops.cu
 ┃ ┃ ┃ ┗ 📜pooling_ops.cuh
 ┃ ┃ ┣ 📂quant
 ┃ ┃ ┃ ┣ 📜epilogue_kernels.cuh
 ┃ ┃ ┃ ┣ 📜int8_gemm_dp4a.cuh
 ┃ ┃ ┃ ┣ 📜observers.cuh
 ┃ ┃ ┃ ┣ 📜quant_kernels.cuh
 ┃ ┃ ┃ ┣ 📜quant_passes.cu
 ┃ ┃ ┃ ┣ 📜quant_types.cu
 ┃ ┃ ┃ ┗ 📜quant_types.cuh
 ┃ ┃ ┣ 📂reduce
 ┃ ┃ ┃ ┣ 📜reduce_ops.cuh
 ┃ ┃ ┃ ┗ 📜reduce_stride.cuh
 ┃ ┃ ┣ 📂rnn
 ┃ ┃ ┃ ┣ 📜rnn_kernels.cu
 ┃ ┃ ┃ ┗ 📜rnn_kernels.cuh
 ┃ ┃ ┣ 📂softmax
 ┃ ┃ ┃ ┣ 📜softmax_kernels.cu
 ┃ ┃ ┃ ┗ 📜softmax_kernels.cuh
 ┃ ┃ ┣ 📂test
 ┃ ┃ ┃ ┣ 📜backward_test.py
 ┃ ┃ ┃ ┣ 📜graph_executor.cp312-win_amd64.pyd
 ┃ ┃ ┃ ┣ 📜run_graph_test.py
 ┃ ┃ ┃ ┣ 📜test_cnn.py
 ┃ ┃ ┃ ┣ 📜test_cnn_model_fit.py
 ┃ ┃ ┃ ┣ 📜test_optimizer_update.py
 ┃ ┃ ┃ ┣ 📜test_run_graph_with_loss.py
 ┃ ┃ ┃ ┗ 📜test_run_graph_with_loss_batch.py
 ┃ ┃ ┣ 📜bindings.cpp
 ┃ ┃ ┣ 📜op_structs.cuh
 ┃ ┃ ┣ 📜setup.py
 ┃ ┃ ┗ 📜setup2.py
 ┃ ┣ 📂__pycache__
 ┃ ┃ ┣ 📜base.cpython-312.pyc
 ┃ ┃ ┣ 📜cpu.cpython-312.pyc
 ┃ ┃ ┣ 📜cuda.cpython-312.pyc
 ┃ ┃ ┗ 📜__init__.cpython-312.pyc
 ┃ ┣ 📜base.py
 ┃ ┣ 📜cpu.py
 ┃ ┣ 📜cuda.py
 ┃ ┗ 📜__init__.py
 ┣ 📂backpropagation
 ┣ 📂layers
 ┃ ┣ 📂tests
 ┃ ┃ ┣ 📂__pycache__
 ┃ ┃ ┃ ┣ 📜dense_mat_test.cpython-312.pyc
 ┃ ┃ ┃ ┣ 📜dense_test.cpython-312-pytest-8.3.5.pyc
 ┃ ┃ ┃ ┗ 📜__init__.cpython-312.pyc
 ┃ ┃ ┣ 📜activation_check.py
 ┃ ┃ ┣ 📜cce_test.py
 ┃ ┃ ┣ 📜cnn_pooling_test.py
 ┃ ┃ ┣ 📜cnn_test.py
 ┃ ┃ ┣ 📜pytorch_xor.py
 ┃ ┃ ┣ 📜regression_test.py
 ┃ ┃ ┣ 📜regression_test_v2.py
 ┃ ┃ ┣ 📜rnn_test.py
 ┃ ┃ ┣ 📜sequential_model_test.py
 ┃ ┃ ┣ 📜test_optimizer.py
 ┃ ┃ ┣ 📜test_realdata_binary.py
 ┃ ┃ ┣ 📜wdbc.data
 ┃ ┃ ┣ 📜xor_test.py
 ┃ ┃ ┗ 📜__init__.py
 ┃ ┣ 📂__pycache__
 ┃ ┃ ┣ 📜activations.cpython-312.pyc
 ┃ ┃ ┣ 📜activation_layer.cpython-312.pyc
 ┃ ┃ ┣ 📜activation_mat.cpython-312.pyc
 ┃ ┃ ┣ 📜BatchNormalization.cpython-312.pyc
 ┃ ┃ ┣ 📜Conv2D.cpython-312.pyc
 ┃ ┃ ┣ 📜dense.cpython-312.pyc
 ┃ ┃ ┣ 📜dense2.cpython-312.pyc
 ┃ ┃ ┣ 📜dense_cuda.cpython-312.pyc
 ┃ ┃ ┣ 📜dense_mat.cpython-312.pyc
 ┃ ┃ ┣ 📜Dropout.cpython-312.pyc
 ┃ ┃ ┣ 📜flatten.cpython-312.pyc
 ┃ ┃ ┣ 📜layer.cpython-311.pyc
 ┃ ┃ ┣ 📜layer.cpython-312.pyc
 ┃ ┃ ┣ 📜pooling.cpython-312.pyc
 ┃ ┃ ┣ 📜Pooling2D.cpython-312.pyc
 ┃ ┃ ┣ 📜Rnn.cpython-312.pyc
 ┃ ┃ ┗ 📜shape_def.cpython-312.pyc
 ┃ ┣ 📜activation_layer.py
 ┃ ┣ 📜BatchNormalization.py
 ┃ ┣ 📜Conv2D.py
 ┃ ┣ 📜dense.py
 ┃ ┣ 📜Dropout.py
 ┃ ┣ 📜flatten.py
 ┃ ┣ 📜layer.py
 ┃ ┣ 📜Pooling2D.py
 ┃ ┣ 📜Rnn.py
 ┃ ┗ 📜shape_def.py
 ┣ 📂ml
 ┃ ┣ 📂metrics
 ┃ ┃ ┣ 📂__pycache__
 ┃ ┃ ┃ ┣ 📜metrics.cpython-312.pyc
 ┃ ┃ ┃ ┗ 📜__init__.cpython-312.pyc
 ┃ ┃ ┣ 📜metrics.py
 ┃ ┃ ┗ 📜__init__.py
 ┃ ┣ 📂model_selection
 ┃ ┃ ┣ 📂__pycache__
 ┃ ┃ ┃ ┣ 📜search.cpython-312.pyc
 ┃ ┃ ┃ ┣ 📜split.cpython-312.pyc
 ┃ ┃ ┃ ┣ 📜validation.cpython-312.pyc
 ┃ ┃ ┃ ┗ 📜__init__.cpython-312.pyc
 ┃ ┃ ┣ 📜search.py
 ┃ ┃ ┣ 📜split.py
 ┃ ┃ ┣ 📜validation.py
 ┃ ┃ ┗ 📜__init__.py
 ┃ ┗ 📂preprocessing
 ┃ ┃ ┣ 📂__pycache__
 ┃ ┃ ┃ ┣ 📜pipeline.cpython-312.pyc
 ┃ ┃ ┃ ┣ 📜preprocessing.cpython-312.pyc
 ┃ ┃ ┃ ┗ 📜__init__.cpython-312.pyc
 ┃ ┃ ┣ 📜pipeline.py
 ┃ ┃ ┣ 📜preprocessing.py
 ┃ ┃ ┗ 📜__init__.py
 ┣ 📂models
 ┃ ┣ 📂__pycache__
 ┃ ┃ ┣ 📜model.cpython-311.pyc
 ┃ ┃ ┣ 📜model.cpython-312.pyc
 ┃ ┃ ┣ 📜OPL.cpython-312.pyc
 ┃ ┃ ┣ 📜sequential.cpython-312.pyc
 ┃ ┃ ┣ 📜sequential_mat.cpython-312.pyc
 ┃ ┃ ┣ 📜__init__.cpython-311.pyc
 ┃ ┃ ┗ 📜__init__.cpython-312.pyc
 ┃ ┣ 📜model.py
 ┃ ┣ 📜OPL.py
 ┃ ┣ 📜sequential.py
 ┃ ┗ 📜__init__.py
 ┣ 📂tests
 ┃ ┣ 📂__pycache__
 ┃ ┃ ┣ 📜conftest.cpython-312-pytest-8.3.5.pyc
 ┃ ┃ ┣ 📜test_setup.cpython-312-pytest-8.3.5.pyc
 ┃ ┃ ┣ 📜test_setup.cpython-312.pyc
 ┃ ┃ ┗ 📜__init__.cpython-312.pyc
 ┃ ┣ 📜conftest.py
 ┃ ┣ 📜test_backend.py
 ┃ ┣ 📜test_backend_gpu.py
 ┃ ┣ 📜test_preprocessing.py
 ┃ ┣ 📜test_setup.py
 ┃ ┣ 📜__init__.py
 ┃ ┗ 📜진단코드.py
 ┣ 📂utils
 ┃ ┣ 📂__pycache__
 ┃ ┃ ┣ 📜activations.cpython-312.pyc
 ┃ ┃ ┗ 📜load_cuda.cpython-312.pyc
 ┃ ┗ 📜load_cuda.py
 ┣ 📂__pycache__
 ┃ ┣ 📜__init__.cpython-311.pyc
 ┃ ┗ 📜__init__.cpython-312.pyc
 ┣ 📜main.py
 ┣ 📜pytest.ini
 ┣ 📜runtest.py
 ┗ 📜__init__.py

 

폴더 및 파일 구조의 변경 계획, CUDA 소스 / pybind 바인딩 / 컴파일러 3층으로 쪼개서, IR -> 패스 -> 커널 선택 -> 런타임을 Python 에서 통제하고, CUDA 는 실행 엔진으로 쓰도록 변경

 

[Python 모델/그래프]
     ↓ (IR로 변환, 패스 적용)
[컴파일러층 python/ ...]
  └─ selector가 커널이름 결정
     ↓ (이름 + 버퍼 포인터 전달)
[pybind 바인딩 bindings.cpp]
     ↓
[CUDA 구현 kernels/cuda/... .cu]

 

 

새 폴더 구조 계획

dev/
 ┣ backend/
 ┃ ┣ graph_executor/        # 기존 CUDA 실행기 (현행 그대로 유지)
 ┃ ┣ compiler/              # 새 Python 기반 AI 컴파일러
 ┃ ┃ ┣ ir/                  # 중간 표현
 ┃ ┃ ┣ passes/              # 최적화 패스
 ┃ ┃ ┣ kernels/             # 레지스트리, 셀렉터
 ┃ ┃ ┣ runtime/             # 실행기 (ExecutorV2)
 ┃ ┃ ┗ __init__.py
 ┃ ┗ __init__.py

2. 동작 관계

  • graph_executor/ = 백엔드 엔진 (CUDA + pybind .pyd)
  • compiler/ = 프론트/컴파일러층 (IR·Pass·커널선택·런타임 플래너)
  • compiler/runtime/executor.py에서 최종적으로 import graph_executor 해서 커널 launch 호출.