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

모델 압축·배포 최적화 시리즈 3편: Pruning (가중치 가지치기)

Leeys 2025. 9. 14. 22:46
반응형

"신경망에서 정말 모든 weight가 필요할까?"
Pruning은 중요도가 낮은 weight, 뉴런, 채널을 제거해 모델을 가볍게 만드는 기법입니다.


Pruning

 

Pruning이란?

Pruning(가지치기)은 신경망의 불필요한 파라미터를 제거하여 모델 크기를 줄이고 추론 속도를 높이는 방법입니다.

  • 학습이 끝난 모델의 weight 중요도를 측정
  • 중요도가 낮은 weight → 0으로 만들거나 제거
  • 모델 sparsity 증가 → 연산량 감소

왜 중요한가?

  • 모델 크기 줄이기 (저장 공간, 메모리 사용량 절약)
  • 추론 속도 향상 (특히 하드웨어가 sparsity 가속 지원 시)
  • Overfitting 감소 → 일반화 성능이 더 좋아질 수도 있음

Pruning의 종류

Unstructured Pruning 개별 weight 중요도 기준으로 0으로 만듦 (sparse matrix) 모델 크기 크게 줄어듦 sparsity 지원 없는 HW에서는 속도 향상 제한
Structured Pruning 채널/필터/헤드 단위로 제거 속도 향상 확실 모델 아키텍처 자체가 변경, 성능 영향 클 수 있음
Iterative Pruning 여러 단계로 조금씩 Pruning → Fine-tuning 반복 성능 보존 학습 시간 증가
One-shot Pruning 한 번에 가지치기 후 fine-tuning 빠름 성능 급격히 떨어질 수 있음

중요도 측정 기준

  • Magnitude (L1/L2 Norm): weight 크기 작은 것부터 제거 (가장 흔한 방식)
  • Gradient-based: loss 변화에 민감하지 않은 weight 제거
  • Fisher Information / Hessian: 중요도 정량화 후 제거

장점

1. 모델 크기 줄이기 (압축 효과)
2. 연산량 감소 → latency 단축
3. Overfitting 감소 → regularization 효과
4. 다른 압축 기법과 조합 가능 (Quantization + KD + Pruning)


단점 & 주의점

지나치게 Pruning 시 성능 급락
Unstructured sparsity는 하드웨어 가속 없으면 속도 향상 거의 없음
Structured pruning은 모델 capacity 줄어들어 fine-tuning 필요


PyTorch 예시 (Unstructured Pruning)

import torch
import torch.nn.utils.prune as prune

model = get_pretrained_model()

# Conv layer weight 중 30%를 L1 기준으로 pruning
prune.l1_unstructured(model.conv1, name="weight", amount=0.3)

# 실제 weight 값 확인 (많은 값이 0으로 됨)
print(model.conv1.weight)

실제 효과 (예시)

ResNet-50 50% (unstructured) 25.6M → 12.8M -0.5%
ResNet-50 80% (unstructured) 25.6M → 5.1M -3.0%
BERT-base 40% (structured, head pruning) latency 20% ↓ -1.5%

적절한 비율을 찾는 것이 핵심 → 보통 30~50% 수준이 sweet spot


실무 적용 팁

  • 먼저 unstructured pruning으로 sparsity vs accuracy curve 확인
  • 최적 sparsity 찾은 후 structured pruning으로 변환 (속도 향상)
  • pruning 후 반드시 fine-tuning 수행 (성능 회복)
  • Quantization과 함께 쓰면 추가 압축 가능

결론

Pruning은 모델의 불필요한 연결을 줄여 가볍고 빠르게 만드는 핵심 기법입니다.
적절히 적용하면 성능 저하 없이 모델 크기와 latency를 줄일 수 있습니다.
단, 하드웨어 가속이 있는 환경(예: NVIDIA Ampere, TensorRT Sparse 지원)에서 효과가 극대화됩니다.

 

 

 

다음 편은 아래에 있습니다!

https://machineindeep.tistory.com/70

 

모델 압축·배포 최적화 시리즈 4편: Weight Clustering / Sharing

"비슷한 값의 가중치를 굳이 따로 저장할 필요가 있을까?"Weight Clustering(또는 Sharing)은 유사한 가중치를 묶어 모델을 추가로 압축하는 기법입니다.Weight Clustering / Sharing이란?Weight Clustering은 비슷한

machineindeep.tistory.com

 

반응형