Pytorch 추론 가속 기법 테스트 계획 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

1. 기본 전제

  • 현재 환경: GPU A100(vRAM 40GB), bf16 (torch.bfloat16) 로딩 상태
  • 모델: FLUX 1 Kontext dev
  • 목표: 추론 속도 및 효율 최적화

2. 5가지 최적화 기법: 상호 관계 분석

항목 번호 기술명 적용 계층 상호 의존성
1 torch.compile 모델 전체 (Graph 수준) 다른 최적화와 병행 가능 (독립)
2 SDPA (scaled_dot_product_attention) Attention 연산 단위 (커널 수준) torch.compile과 병행 가능 (독립)
3 channels_last 데이터 포맷 (메모리 수준) cudnn.benchmark과 시너지
4 cudnn.benchmark Conv2D 알고리즘 선택 (런타임 수준) channels_last와 함께 쓰면 효과 증가
5 CUDA Graph 실행 계획 최적화 (런타임 수준) 반드시 고정된 입력 형태 확보 후 적용 가능

3. 순서 결정의 핵심 기준

  1. 서로 간섭이 없는 독립적인 최적화인지? (병행 가능)
  2. 선행 조건(예: 고정 입력, 데이터 포맷)이 필요한지?
  3. 측정 가능성과 롤백 용이성

4. 테스트 순서

순서 항목 이유
channels_last ✅ Conv2D 성능 향상의 기본 전제 (cudnn.benchmark에 영향)
cudnn.benchmark = True ✅ Conv2D 알고리즘 최적화 → channels_last가 먼저 적용되어야 효과적
torch.compile ✅ 모델 전체 그래프 최적화 → 기존 설정과 병행 가능, 독립적으로 평가
SDPA ✅ 특정 Attention 블록만 최적화 → 전체와 독립적 (torch.compile과 병행 가능)
CUDA Graph ✅ 입력/메모리 포맷/알고리즘 등 모든 설정이 안정화된 뒤 마지막에 적용 → 반드시 입력 고정 상태 필요

5. 병행/독립성 체크

항목 병행 가능 여부 주의사항
channels_last ↔ cudnn.benchmark ✅ 병행 가능 (시너지) channels_last 먼저
torch.compile ↔ 나머지 모두 ✅ 병행 가능 항상 안전
SDPA ↔ 나머지 모두 ✅ 병행 가능 transformer 내부에만 영향
CUDA Graph ↔ 나머지 모두 ✅ 병행 가능 단, 고정된 입력 필수

6. 최종 요약: 단계별 가이드

단계 작업 내용 목적 독립 여부
1️⃣ channels_last 적용 Conv2D 가속의 기본 필요
2️⃣ cudnn.benchmark = True 알고리즘 선택 최적화 필요
3️⃣ torch.compile(model) 전체 그래프 최적화 독립
4️⃣ SDPA 적용 여부 확인 어텐션 속도 최적화 독립
5️⃣ CUDA Graph 적용 호출 오버헤드 제거 필요 (입력 고정)
  • 3, 4번은 순서 무관,
  • 1 → 2 → 5번은 반드시 순서 유지 필요