Post

Pruning Granularity

Pruning Granularity

1. What is Pruning?

  • 뉴럴넷의 가중치(weight) 또는 구조적 단위(뉴런, 필터, 레이어 등)를 제거하여 모델을 경량화하는 기법
  • 핵심 가정: 학습된 모델은 over-parameterized → 실제로 중요한 가중치는 일부에 불과함
  • 일반적인 파이프라인:

    \[\text{Train} \rightarrow \text{Prune} \rightarrow \text{Fine-tune}\]
  • 제거 기준(criterion)으로는 weight의 크기(magnitude), gradient, 활성화값 등이 사용됨
  • Granularity: 제거하는 단위의 크기에 따라 Structured와 Unstructured로 나뉨
    • Structured: 필터, 채널, 레이어 등 구조적 단위를 제거
    • Unstructured: 개별 weight를 제거. 구조 자체는 변하지 않음.

2. Granularity Types

  • 프루닝 단위. 개별 weight만 지울 수도 있고, 채널 등 구조 자체를 바꿀 수도 있음.

2.1 Unstructured Pruning

  • Element pruning: weight matrix의 개별 원소를 독립적으로 제거
  • 제거 위치에 제약이 없으므로 높은 sparsity를 달성하면서 accuracy 유지에 유리
  • 단점: irregular sparse matrix → 일반 GPU의 dense 연산 유닛을 활용하지 못해 실제 속도 향상이 어려움
    • cuSPARSE 등 sparse 연산 라이브러리 필요, 오버헤드 있음

2.2 Semi-structured Pruning

Unstructured와 Structured의 중간으로, 일정한 패턴을 가진 sparsity를 강제함

  • Pattern pruning (N:M sparsity) ⭐: 연속된 M개의 weight 중 N개만 남기는 방식
    • ex) NVIDIA의 2:4 sparsity — 4개 중 2개 제거 → Sparse Tensor Core로 2× 속도 향상
    • Unstructured에 비해 하드웨어 친화적, Structured에 비해 accuracy 유지 유리
  • Block (Tile) pruning: weight matrix를 고정 크기의 블록으로 나누고, 블록 단위로 제거
    • 하드웨어의 tiling 연산 구조와 맞아 cache 효율을 높일 수 있음

2.3 Structured Pruning

구조적 단위를 통째로 제거 → dense matrix 형태를 유지하므로 추가 라이브러리 없이 직접적인 속도 향상 가능.

  • Neuron / Head pruning ⭐: FFN의 뉴런 또는 Attention head 단위 제거
    • 일부 head는 redundant하다는 연구 결과 에 근거
  • Width pruning: hidden dimension(d_model)을 전체 레이어에 걸쳐 균일하게 줄임
    • d_ff(FFN intermediate) 축소는 Neuron pruning과 동일하므로 여기서는 d_model 축소를 의미
  • Layer (Block) pruning ⭐: Transformer block 전체를 제거
    • 가장 coarse한 단위 → accuracy drop이 크지만 속도 이득도 가장 큼
    • LLM에서 최근 활발히 연구됨 (ex. ShortGPT, LaCo)
  • Expert pruning (MoE): Mixture-of-Experts 모델에서 일부 expert를 제거
    • 활성화 빈도가 낮은 expert를 제거해 모델 크기 감소

3. Trade-offs

3.1 핵심 축: 자유도 ↔ 규칙성

  • Granularity가 작을수록(fine) → accuracy·압축률에 유리, 클수록(coarse) → 실제 속도 향상에 유리
  • Fine(element) 쪽은 중요한 weight만 골라 살릴 수 있는 자유도가 높은 대신, 메모리 접근이 불규칙해짐
  • Coarse(layer) 쪽은 제거 단위가 커서 중요한 weight도 같이 날아가지만, 결과는 작아진 dense 행렬이므로 기존 GPU 연산 그대로 활용 가능

3.2 비교 표

Granularity같은 accuracy에서 달성 sparsity실제 속도 향상필요 HW/SW메모리 절감
Element★★★★★★☆☆☆☆cuSPARSE★★★★★
N:M (2:4)★★★★☆★★★☆☆Sparse Tensor Core★★★★☆
Block/Tile★★★☆☆★★★☆☆block-sparse kernel★★★☆☆
Neuron/Head★★★☆☆★★★☆☆일반 dense 연산★★★☆☆
Width★★☆☆☆★★★★☆일반 dense 연산★★★☆☆
Layer★★☆☆☆★★★★★일반 dense 연산★★☆☆☆
Expert (MoE)★★★☆☆★★★★☆일반 dense 연산★★★★☆

3.3 왜 이런 trade-off가 생기는가

  • Accuracy 측면: fine할수록 중요한 weight만 선택적으로 남길 수 있음. coarse하면 그룹 안의 중요한 weight까지 함께 제거됨
  • 속도 측면: fine할수록 불규칙 메모리 접근, index 오버헤드, load imbalance가 발생함. coarse하면 작아진 dense GEMM을 그대로 사용 가능

3.4 FLOPs 감소 ≠ Latency 감소

  • Compute-bound: 연산량(FLOPs)이 병목 → FLOPs 줄이면 latency 감소
  • Memory-bound: weight 로딩이 병목 → FLOPs를 줄여도 latency 개선 미미
  • LLM decode(batch=1)는 대표적인 memory-bound 케이스 → unstructured pruning도 weight 로딩량 자체가 줄어들어 latency 이득이 날 수 있음
  • 즉, structured pruning이 항상 우월한 게 아니며 타겟 연산 regime에 따라 선택이 달라짐

3.5 Structured 내부 trade-off: Width vs Depth

  • Depth pruning (layer 제거): 순차 레이어 수가 줄어 small batch latency에 유리. 단, 같은 파라미터 제거량 대비 accuracy drop이 큰 편
  • Width pruning (d_model 축소): 병렬 연산 폭이 줄어듦. Minitron 은 retraining 후 width pruning이 depth pruning보다 accuracy가 높았다고 보고

3.6 선택 가이드

조건권장 방향
목적이 메모리 절감fine-grained (element, N:M)
목적이 추론 속도 향상structured (layer, width)
타겟이 Ampere 이상 GPUN:M (2:4 sparsity)
타겟이 범용 하드웨어structured pruning
Fine-tuning 불가 (one-shot)fine-grained 쪽이 복구 부담 작음
This post is licensed under CC BY 4.0 by the author.