본문 바로가기

dev_AI_framework

AI Compiler 구현 - python -> graph_executor_v2 -> launch_kernel() 까지의 완료된 상황

1) 커널 ABI·런타임 컨트랙트 확정 (반나절~1일)

  • 인자 규약: (ptr, shape, strides, dtype, device, stream, workspace_ptr, workspace_bytes) 고정. Host에서 packed args buffer로 직렬화 → 런타임이 디바이스로 전달.
  • 런치 파라미터: grid, block, smem_bytes, stream을 계산하는 LaunchConfigFn을 커널 옆에 둠.
  • 에러/동기화 규약: 커널은 에러코드를 쓰지 말고 런타임이 cudaGetLastError()/hipGetLastError() or CPU 예외를 수집. SyncPolicy = {NoSync, EventRecord, FullSync}.
  • 메모리 모델: 기본은 row-major contiguous + strides 허용. Alias 금지/허용 플래그, inplace 가능 여부를 op schema에 명시.
  • 정확도/결정성: Deterministic=True|False, MathMode=FP32|TF32|FP16|BF16|Mixed.

2) “수직 슬라이스” 커널 3종 (하루~이틀)

최소 end-to-end를 위해 아래 3개만 먼저 진짜로 동작시키자.

  1. elementwise: y = sin(a*x + b) (브로드캐스트/스트라이드 지원)
  2. reduction: sum(x, axis=-1) (warp reduce → block reduce → grid stride loop)
  3. matmul: MxK·KxN (CPU ref + GPU naive tile 16x16; 나중에 WMMA/TF32로 고도화)

각 커널에 공통으로:

  • InferShapeFn, InferDTypeFn, CheckLayoutFn, LaunchConfigFn, KernelBody.
  • 호스트 사이드 ArgPack 빌더(Python→C++ 바인딩에서 텐서들을 pack).

3) 테스트·검증 인프라 (병행, 바로 착수)

  • 골든 레퍼런스: NumPy/CPU reference로 bitwise/ulp 비교.
  • 프로퍼티 테스트: 무작위 shape/stride/offset(=non-contig)로 stress.
  • 오류 주입: 잘못된 dtype, shape mismatch, 오버랩 버퍼, 0-size dim.
  • 성능 스모크: microbench(10–100ms 규모)로 TPUT/GOP/s, SM util, 메모리 bandwidth 추정.
  • 프로파일 훅: with profiler(): 구간에서 host/op/kernel 타임라인+launch cfg 기록.

4) 런타임 필수 기능 (필요 최소한)

  • Allocator: device/host/pinned 분리, 재사용 캐시, alignment 256B+.
  • Stream/이벤트: 기본 stream + 임의 stream 지원, 이벤트로 의존성 모델링.
  • 워크스페이스 매니저: op가 요구하는 workspace_bytes(op, shape) 쿼리 → 일시 대여.
  • JIT 캐시 키: (op, dtype, layout, tile, sm_arch)로 커널 바이너리/파라미터 캐시.

5) 그래프 레벨 1차 패스

  • 형상/타입 추론(Shape/DType): Python 레벨에서 eager 검증, 런타임에 assert 제거.
  • 상수 폴딩·CSE: Python 트레이스 시 간단 적용.
  • Elementwise Fusion v1: 연속된 EW 체인을 단일 커널로 합치기(메모리 왕복 절감).
  • 레드유스 프리패스: reduce 앞뒤 불필요한 reshape/squeeze 정리.

6) matmul 고도화 로드맵 (차주)

  • 타일 파라미터 튜너: (BM, BN, BK, num_warps, smem) grid search(짧은 샘플로).
  • 데이터 레이아웃: A/B 패널 스왑, swizzled shared memory로 bank conflict 완화.
  • Mixed Precision: Acc FP32 + input FP16/BF16/TF32 선택, 결정성 토글.
  • 배치/스트라이드 matmul + GEMV fastpath.

7) 체크리스트 (각 단계의 완료 정의)

  • ABI: Docstring/헤더 주석에 인자·동기화 규약 명문화, 샘플 커널 1개 연결.
  • EW 커널: 브로드캐스트/스트라이드/비연속 텐서 OK, ULP<2 기준 통과.
  • Reduction 커널: 任의 축, 0-size, 큰 텐서에서도 deadlock/NaN 없음.
  • Matmul v0: ref 대비 max-abs<1e-3(FP32)·성능 CPU 대비 >1.5×.
  • 테스트팩: 100+ 랜덤 케이스, CI에서 GPU 미탑재 시 CPU ref만.
  • 프로파일러: op 이름, grid/block, ms, bytes moved, flop 계산 로그.