1) Executor 연동(e2e 실행) - 완료
- 목표: IR → Pass → 커널 선택 → f16 Lt 커널 호출까지 파이프라인 연결
- 수정 파일
- compiler/runtime/executor.py
- _prepare_buffers()에서 GEMM op의 MNK/act/bias 유무를 Params로 생성하여 bufs 마지막에 추가 (이미 골격 있음)
- CuPy/Torch 텐서에서 device_ptr 추출 경로 점검
- compiler/runtime/executor.py
- 검증
- 간단 IR로 GEMM_BIAS_ACT 1개짜리 그래프 만들어 ExecutorV2(dry_run=False) 호출 → f16 커널이 선택되고 값이 맞는지 비교
2025.09.03 - [dev_AI_framework] - 📄 문서: e2e f16 GEMM + Bias + ReLU 테스트 동작 과정
2) 벤치마크/프로파일링(성능 베이스라인 만들기)
- 목표: f32 스텁 vs f16 Lt 성능/정확도 베이스라인 확보
- 추가 파일
- bench/bench_gemm.py (신규)
- 다양한 (M,N,K) 입력에 대해 시간/오차 수집, 반복 warmup 포함
- bench/bench_gemm.py (신규)
- 도구
- CUDA 이벤트로 시간 측정(+ CuPy의 cp.cuda.Event)
- Nsight Systems/Compute는 선택
- 검증
- 오차 분포(평균/최대)와 처리량(GFLOPS) 출력
3) Autotune(알고리즘/워크스페이스 탐색 캐시)
- 목표: cuBLASLt의 heuristic을 (WS 크기, Algo ID)로 탐색 후 (M,N,K) 버킷별 캐시
- 수정 파일
- src/my_kernels.cu
- ge2_launch_gemm_bias_act_tc_f16 안에서 (M,N,K,arch) 키로 std::unordered_map 캐시 보유
- 필요 시 작은 WS 풀(cudaMalloc/Free 오버헤드 줄이기)
- src/my_kernels.cu
- 검증
- 동일 크기 반복 호출 시 첫 호출 대비 재호출 시간이 줄어드는지
4) Bias+Act 완전 Fuse(선택 성능 최적화)
- 목표: 후처리를 cuBLASLt로 흡수
- 접근 옵션
- 전치 트릭: Dᵀ = Bᵀ @ Aᵀ 형태로 계산해 bias(N) 를 “행-bias”로 맞춘 뒤 필요 시 레이아웃 복구
- CUTLASS: Column-bias + 활성화 Epilogue Visitor로 한 번에 해결
- 수정 파일
- (옵션1) 전치 트릭: src/my_kernels.cu (A/B/D 레이아웃/ld, TRANS 설정, 임시 버퍼 관리)
- (옵션2) CUTLASS 도입: CMakeLists.txt(서브모듈/FetchContent), src/my_kernels_cutlass.cu(신규), src/launch_table.cpp 등록
- 검증
- 현재 후처리 대비 성능 이득 확인, 오차 동일성 확인
5) 기능 커버리지 확장
- GELU:
- Params.act에 2 매핑 → 후처리 커널에서 t * 0.5f * (1.f + erf(t/√2)) 적용
- 수정: src/my_kernels.cu (add_bias_relu_fp16 → add_bias_act_fp16) 이름/로직 확장
- Batched GEMM:
- Params에 batch와 strideA/B/D 추가 (또는 descs에서 stride 사용)
- cuBLASLt의 batched matmul 사용
- Strided/Non-contiguous:
- executor.py에서 descs에 stride 채워 넣고, 네이티브에서 ld/stride 반영
6) 안정성/에러 핸들링 강화를 위한 ABI 보강
- 목표: 에러 원인 가시화 + 호환성 체크
- 수정 파일
- include/ge_v2_api.h
- GE2_API_VERSION를 2로 올리고, 에러코드 enum 문서화
- src/bindings_min_api.cpp
- 예외 메시지에 CUDA/cuBLASLt status 문자열 포함
- compiler/runtime/executor.py
- GE2_API_VERSION 읽어 경고/에러 출력
- include/ge_v2_api.h
- 검증
- 의도적으로 잘못된 파라미터 전달 시 명확한 메시지 표출
7) 선택 로직 강화(selector)
- 목표: f16 Lt가 맞지 않을 때 f32로 자동 폴백, 또는 특정 범위에서 f32가 더 빠르면 f32 선택
- 수정 파일
- compiler/kernels/selector.py
- _score_by_rules()에 (M,N,K) 임계값, dtype 가중치, 장치 capability 반영
- src/launch_table.cpp
- capability 점수 미세 조정
- compiler/kernels/selector.py
- 검증
- 작은 K, 매우 비정형 크기 등에서 f32가 선택되는지
8) 테스트/CI
- 목표: 회귀 방지
- 추가 파일
- tests/test_gemm_bias_act.py (pytest)
- 무작위 (M,N,K) 여러 케이스, (has_bias, act) 조합, dtype 조합
- tests/test_gemm_bias_act.py (pytest)
- CI 스텝
- 빌드 → 스모크(py) → 선택 일부 사이즈의 정밀/성능 체크(간단)
9) 문서/샘플
- 목표: 사용성을 높이고 유지보수 맥락 제공
- 추가/수정
- docs/feature_fp16_lt.md: 내부 구조/제약/튜닝 포인트 정리
- examples/01_gemm_fp16.ipynb: 간단 사용 예제 (CuPy/Torch)
'dev_AI_framework' 카테고리의 다른 글
| Header-only 템플릿 라이브러리 - CUTLASS (0) | 2025.09.03 |
|---|---|
| cuBLASLt / CUTLASS 의 에필로그 epilogue 까지 흡수한다. - GEMM 연산 이후의 연산들 (bias add, activation, scaling 등 ) 의 커널 통합 ( 호스트 디스패치 + 커널 특화 방식, 나는 CUTLASS 가 맞을 듯??) (0) | 2025.09.03 |
| 📄 문서: e2e f16 GEMM + Bias + ReLU 테스트 동작 과정 (0) | 2025.09.03 |
| 📄 신규 기능 추가 과정 문서: FP16 TensorCore GEMM (cuBLASLt) (0) | 2025.09.02 |
| graph_executor_v2 변경 가이드 (무엇을 바꿀 때 어디를 고치는가) (0) | 2025.09.02 |