ML | DL/딥러닝 방법론|실습

추론 속도 최적화 시리즈 1편: Operator Fusion (연산자 융합)

Leeys 2025. 9. 15. 09:14
반응형

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

 

Operator Fusion

 

Operator Fusion이란?

Operator Fusion은 모델 그래프 상에서 연속된 연산들을 하나로 합쳐
메모리 접근을 줄이고, 커널 실행 횟수를 최소화하는 최적화 기법입니다.

예를 들어 일반적인 CNN 레이어 조합:

 
Conv → BatchNorm → ReLU

각각 독립적으로 실행하면:

  • Conv 연산 → 메모리에 결과 저장
  • BN 연산 → 메모리에서 불러와 연산 후 저장
  • ReLU 연산 → 다시 불러와 연산 후 저장

Fusion 하면:

 
Fused Conv BN ReLU → 한 번의 커널에서 연산 완료

즉, 메모리 I/O와 커널 런칭 오버헤드를 줄임 → 속도 ↑


왜 중요한가?

  • 추론 속도 대부분은 연산 자체보다 메모리 접근이 병목
  • 연속된 연산을 합치면 메모리 접근 횟수 감소
  • 특히 GPU에서는 커널 런칭 횟수가 줄어 latency 단축

Fusion 대상 예시

연산자 패턴 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

 

반응형