체크리스트: 다음 최적화 후보
A) GEMM / Matmul 계열
- cuBLASLt Epilogue로 Bias/활성화 Fuse (중·상 / 🔥효과 큼)
- run_graph.cu MATMUL 분기 → cublasLtMatmul로 교체, CUBLASLT_EPILOGUE_BIAS(+ RELU_BIAS) 사용.
- Sigmoid/Tanh는 별도 커널 유지.
- dW “배치-리듀스(M=∑) 단일 단계화” (상 / 효과 큼·작은 행렬에서 특히)
- 현재: StridedBatched로 dW_tmp 생성 → 최종 reduce.
- 선택1) Grouped GEMM(cuBLASLt)로 dW_b 생성 단계 런치 감소.
- 선택2) CUTLASS BRGEMM 또는 WMMA로 직접 커널 작성(진짜 BRGEMM).
- 알고리즘 힌트/힐리스틱 캐시 (중 / 효과 중)
- cuBLAS/Lt 알고리즘 선택 결과를 shape별로 캐시 → 재사용.
B) 메모리 & 런치 오버헤드
- CUDA Graphs 캡처 (중 / 🔥효과 큼)
- forward + loss + backward + optimizer를 그래프로 1회 캡처 → 각 step cudaGraphLaunch() 한 방.
- 메모리 풀/재사용 (중 / 효과 중)
- ensure_output() 경로에서 cudaMallocAsync + cudaMemPool 또는 커스텀 풀.
- dW_tmp/중간 그래디언트 워크스페이스를 레이어 간 재사용.
- 스트림 파이프라인 & H2D/D2H 오버랩 (중 / 효과 중)
- Data preload(다음 배치 H2D) 스트림과 compute 스트림을 이벤트로 연결.
- 작은 배치/짧은 네트워크에서 체감 큼.
C) 활성화/손실/백워드
- Activation In-Place 스케일링 (하 / 효과 소~중)
- backward에서 dY를 in-place로 스케일(예: ReLU 마스크) → 추가 버퍼/복사 제거.
- dBias Epilogue(BGRAD) 활용 (중 / 효과 중)
- 환경이 지원하면 cuBLASLt BGRAD epilogue로 sum(dY)를 GEMM 에필로그에서 바로 산출.
- 미지원이면 현행 ones·GEMM 유지.
- 작은 Reduce 커널 최적화 (하 / 효과 소)
- add_inplace/sum_rows류 커널에 warp-level reduce, vectorized load, occupancy 조절.
D) 합성곱 경로
- cuDNN 도입(Forward/Backward) (중·상 / 🔥효과 큼)
- CONV2D forward/backward를 cuDNN으로 대체(autotune 결과 캐시).
- shape 고정이면 cuDNN이 매우 유리.
- im2col+GEMM 경로 튜닝 (중 / 효과 중)
- 임시 메모리 풀, StridedBatched GEMM, epilogue 활용 등으로 최적화.
E) 정밀도 / 데이터 레이아웃
- Mixed Precision 확대(FP16/BF16 + FP32 Accum) (중·상 / 🔥효과 큼)
- 마스터 웨이트 FP32 유지 + Loss Scaling(동적) → 안정화.
- TF32 정책 세분화 (하 / 효과 소~중)
- 레이어별 정확도 민감도에 따라 TF32/FP32 혼용.
- 레이아웃/정렬/패딩 점검 (하 / 효과 소~중)
- row-major에서 leading dim 정렬(128/256B 정렬), N 다중수 padding으로 coalescing 최적화.
F) 옵티마이저
- 멀티-텐서 Optimizer 커널 (중 / 효과 중)
- Adam/Momentum/SGD를 파라미터 묶음으로 한 번에 업데이트(메모리 접근 coalesced).
- Fused Adam 계열 (중·상 / 효과 중)
- Apex/DeepSpeed 같은 접근 참고. (Windows 환경이면 직접 구현이 현실적)
G) 컴파일/빌드 & 런타임 세팅
- -use_fast_math 선택적 적용 (하 / 효과 소, 정확도 주의)
- 환경 변수/플래그 캐시 (하 / 효과 소)
- cuBLAS math mode, cuDNN autotune 결과, 알고리즘 선택 결과를 shape key로 저장.
H) 프로파일링 & 회귀 방지
- Nsight Systems/Compute 정례 프로파일 (하 / 효과 큼)
- 체크: Tensor Core utilization, DRAM BW, L2 Hit, SM Eff., 런치 횟수/간격, H2D/D2H 오버랩.
- 마이크로벤치 스위트 (하 / 효과 큼)
- 레이어별·배치별·shape별 타임 측정 자동화 + CSV 로그.
- 수치 안정성 테스트 (하 / 효과 큼)
- FP32 vs TF32/FP16 오차, loss scaling under/overflow 모니터, NaN guard.
“어디를 먼저?” 추천 순서
- CUDA Graphs 캡처 → 런치 오버헤드 바로 감소.
- 메모리 풀/재사용 + cudaMallocAsync → 할당/해제 비용/단편화 개선.
- cuBLASLt Epilogue(BIAS/+ReLU) → matmul+add(+relu)를 한 방에.
- dBias BGRAD(가능 시) → reduce GEMV 제거.
- cuDNN로 Conv 경로 교체 → 합성곱 포함 모델에서 크게 상승.
- Mixed Precision 확대 → 큰 모델/배치에서 체감 큼.
- 멀티-텐서 Optimizer → 클수록 효과 상승.
'dev_AI_framework' 카테고리의 다른 글
| cnn_layer 구현 및 수정 (0) | 2025.08.22 |
|---|---|
| Regression 에서 오류 발생, XOR 은 잘 되는데 왜...? - 해결완료 (0) | 2025.08.19 |
| TF 32 활성화 적용 - FP 32 에서 변환 (0) | 2025.08.15 |
| CUDA 커널 호출 구조 개선 - 한 번의 호출로 학습 완료! (2) | 2025.08.15 |
| 배치 루프 (여러 번 런치) vs 배치 결합 (한 번에 런치) (4) | 2025.08.15 |