PyTorch Profiling과 Kernel Optimization
이 경로는 PyTorch 학습 코드를 측정하고, 기존 CUDA 트랙을 실제 모델에 연결하는 최적화 경로입니다.
목표는 “빠를 것 같다”가 아니라, profiler와 benchmark로 병목을 찾고, PyTorch 레벨 최적화와 custom CUDA extension의 전후 차이를 기록하는 것입니다.
첫 실습은 RMSNorm입니다. RMSNorm은 작고 통제하기 쉬워 PyTorch reference, custom CUDA extension, optimized CUDA kernel을 비교하기 좋습니다.
두 번째 실습은 attention입니다. 직접 작성한 PyTorch attention, torch.nn.functional.scaled_dot_product_attention, optimized attention backend를 같은 shape와 dtype에서 비교합니다. 특히 attention은 prefill-like workload와 decode-like workload를 나눠야 vLLM과 KV cache로 자연스럽게 이어집니다.
이 path의 최종 산출물은 코드만이 아니라 재현 가능한 benchmark report입니다.
baseline profile
-> RMSNorm benchmark
-> custom CUDA RMSNorm integration
-> manual attention benchmark
-> PyTorch SDPA benchmark
-> prefill vs decode workload split
-> optimized attention comparison
-> end-to-end report
- PyTorch Single-GPU Training Loop — forward, loss, backward, optimizer update, mixed precision을 포함한 단일 GPU 학습 루프를 만든다.
- CUDA Event Timing과 Benchmark — CUDA 최적화 전에 kernel 구간을 일관되게 측정하는 법을 익힌다.
- PyTorch Profiler로 Baseline 측정하기 — torch.profiler와 CUDA event로 Transformer forward/backward의 시간과 메모리 병목을 기록한다.
- PyTorch RMSNorm Benchmark Baseline — 직접 구현한 PyTorch RMSNorm을 기준선으로 삼아 latency, memory, correctness tolerance를 측정한다.
- PyTorch JIT Extension으로 RMSNorm 연결하기 — torch.utils.cpp_extension.load로 RMSNorm CUDA kernel을 Colab에서 즉석 빌드하고 torch.Tensor workflow에 연결한다.
- Optimized RMSNorm Benchmark — Path 2의 naive RMSNorm을 block/warp reduction으로 개선하고 PyTorch extension에서 비교한다.
- Custom RMSNorm Extension을 PyTorch Transformer에 연결하기 — 기존 CUDA RMSNorm kernel을 PyTorch Transformer block의 RMSNorm 위치에 연결하고 전후 성능을 비교한다.
- Manual PyTorch Attention Benchmark — matmul, causal mask, softmax, value matmul로 직접 작성한 attention을 profiling 기준선으로 삼는다.
- PyTorch SDPA Attention Benchmark — torch.nn.functional.scaled_dot_product_attention을 manual attention 기준선과 비교한다.
- Attention Workload: Prefill vs Decode — attention benchmark를 prefill-like와 decode-like workload로 나누어 측정한다.
- torch.compile에서 Triton과 CUDA까지 — PyTorch 코드 최적화를 시작할 때 torch.compile, Triton, CUDA를 어떤 순서로 생각하면 좋은지 이해한다.
- torch.compile과 Fused Op 비교 — eager 실행, torch.compile, fused operation 후보를 비교하며 PyTorch 레벨 최적화의 한계를 확인한다.
- Optimized Attention Benchmark — manual attention, PyTorch SDPA, optimized attention backend를 prefill/decode workload에서 비교한다.
- PyTorch Transformer Benchmark Report 작성하기 — RMSNorm과 attention profiling, 최적화 결과를 하나의 재현 가능한 실험 리포트로 정리한다.