"Conv → BN → ReLU, 꼭 따로따로 계산해야 할까?"
Operator Fusion은 여러 연산을 하나로 합쳐서 추론 속도를 높이는 기법입니다.

Operator Fusion이란?
Operator Fusion은 모델 그래프 상에서 연속된 연산들을 하나로 합쳐
메모리 접근을 줄이고, 커널 실행 횟수를 최소화하는 최적화 기법입니다.
예를 들어 일반적인 CNN 레이어 조합:
각각 독립적으로 실행하면:
- Conv 연산 → 메모리에 결과 저장
- BN 연산 → 메모리에서 불러와 연산 후 저장
- ReLU 연산 → 다시 불러와 연산 후 저장
Fusion 하면:
즉, 메모리 I/O와 커널 런칭 오버헤드를 줄임 → 속도 ↑
왜 중요한가?
- 추론 속도 대부분은 연산 자체보다 메모리 접근이 병목
- 연속된 연산을 합치면 메모리 접근 횟수 감소
- 특히 GPU에서는 커널 런칭 횟수가 줄어 latency 단축
Fusion 대상 예시
| Conv + BatchNorm | FusedConv (weight, bias 사전 계산) |
| Conv + BN + ReLU | Single Fused Conv-BN-ReLU |
| MatMul + BiasAdd | Gemm + Bias |
| LayerNorm + Add | Fused LayerNorm |
| QKV Projection (Attention) | Single GEMM kernel |
코드로 보는 Conv+BN Fusion
BatchNorm 공식:
y = (x - μ) / sqrt(σ² + ε) * γ + β
Conv 출력 z = W * x + b 라고 하면,
BN 파라미터를 미리 합쳐서 새로운 weight, bias 계산 가능:
W_fused = W * (γ / sqrt(σ² + ε))
b_fused = (b - μ) * (γ / sqrt(σ² + ε)) + β
결과: BN 레이어 삭제 → Conv에 weight, bias만 바꿔서 저장
장점
1. 추론 속도 향상 (1.2~1.5×)
2. 메모리 접근 줄어 latency ↓
3. 추론 시 모델 그래프 단순화 → 배포/디버깅 편리
4. 모바일/엣지 환경에서 전력 효율 ↑
단점 & 고려사항
1. Fusion은 학습 시가 아닌 추론 시 적용
2. 일부 연산자는 fusion 불가능 (비선형 조합, 조건 분기)
3. 너무 aggressive하게 fusion하면 디버깅 어려워짐 (gradient 계산 필요 시 불가)
PyTorch 예시 (Conv+BN Fusion)
import torch
import torch.nn.utils.fusion as fusion
model = get_trained_model()
# Conv+BN 모듈 찾아서 fusion
fused_model = fusion.fuse_conv_bn_eval(model)
fused_model.eval()
fuse_conv_bn_eval 적용 시 weight, bias 재계산 후 BN 레이어 제거
TensorRT / ONNX Runtime에서의 Fusion
- ONNX Graph Optimizer: Conv+BN, MatMul+Bias, Add+Relu 등 자동 fusion
- TensorRT: layer fusion + kernel auto-tuning → GPU 최적 커널 선택
- JAX/XLA: 연산 그래프 자체를 최적화 컴파일 (fusion 자동 적용)
실제 효과 (벤치마크)
| 모델 | Fusion 전 | Fusion 후 | 속도 향상 |
| ResNet-50 (FP32) | 8.5 ms | 6.9 ms | 1.23× |
| MobileNetV2 | 5.2 ms | 4.1 ms | 1.27× |
특히 소규모 모델, 모바일 환경에서 효과 큼
실무 적용 팁
- 학습이 끝난 모델 → eval() 모드에서 fusion 수행
- TorchScript, ONNX export 전에 적용 → 변환 후에도 유지
- INT8/FP16 Quantization 전에 fusion → 성능 최적화 극대화
결론
Operator Fusion은 추론 최적화의 기본 단계입니다.
메모리 접근과 커널 호출을 줄여 latency를 줄이고,
Quantization, TensorRT 최적화와 함께 쓰면 효과 극대화됩니다.
다음 시리즈는 아래에 있습니다!
https://machineindeep.tistory.com/77
MLOps 시리즈 1편: 모델 모니터링 (Model Monitoring)
"모델은 배포가 끝이 아니다!"모델 모니터링은 모델이 실제 환경에서 잘 동작하는지 지속적으로 확인하고,이상 징후를 조기에 발견해 대응하는 프로세스입니다.모델 모니터링이란?모델 모니터
machineindeep.tistory.com
'ML | DL > 딥러닝 방법론|실습' 카테고리의 다른 글
| MLOps 시리즈 2편: Dataset Versioning (1) | 2025.09.15 |
|---|---|
| MLOps 시리즈 1편: 모델 모니터링 (Model Monitoring) (1) | 2025.09.15 |
| 대규모 모델 학습·추론 최적화 시리즈 4편: FSDP · ZeRO · DeepSpeed (0) | 2025.09.15 |
| 대규모 모델 학습·추론 최적화 시리즈 3편: Gradient Checkpointing (1) | 2025.09.14 |
| 대규모 모델 학습·추론 최적화 시리즈 2편: Gradient Accumulation (1) | 2025.09.14 |