Pruning 정의
Pruning은 모델의 크기나 복잡성을 줄이기 위해 불필요한 구성 요소를 제거하는 기법.
Unstructured pruning, Semi-structured pruning, Structured pruning으로 나눌 수 있다.

Structured pruning
- 뉴런, 어텐션 헤드, 레이어와 같은 요소를 특정 규칙에 따라 제거하여 전체 구조를 유지하는 pruning
- 중요한 구성요소를 제거할 경우 성능저하를 초래
- Unstrctured와 비교해 구조를 유지하므로 기존 하드웨어에서도 추론 속도에 영향을 주지 않음
- Loss-based Pruning, Magnitude-based Prun
ing, Regularization-based Pruning 으로 나눌 수 있다.
1. Loss-based Pruning
- loss, gradient를 기준으로 중요도가 낮은 부분을 선별해 pruning하는 방식
LLM-Pruner
- task와 무관하게 gradient 정보를 활용해 중요하지 않은 상호 연결 구조를 선별해 pruning
- LLaMA 아키텍처에서 가중치, 파라미터, 그룹 중요도를 계산하고 pruning 후에 정확도 회복을 위해 LoRA로 post-training
Shortened LLaMA
- loss, 이계도함수를 통해 중요도가 낮은 Transformer block을 선별해 제거
- Transformer block을 제거 후 정확도 회복을 위해 LoRA로 post-training
LoRAPrune
- LoRA의 weight와 gradient를 활용해 중요도를 추정
- 50%의 압축률에서 LLM-Pruner보다 더 높은 효율
2. Magnitude-based Pruning
- 크기를 기준으로 pruning unit 단위로 나누고, 각 unit의 중요도를 평가해 특정 임계값 이하의 중요도를 가지는 unit을 제거하는 방식
FLAP
- Structured Fluctuation Metric
- 모델 channel간 변동성을 측정하는 지표
- 변동성이 낮은 channel은 해당 입력 채널을 제거하더라도 출력의 영향이 적음
- Adaptive Structure Search
- layer와 module간의 압축 비율을 결정
- Baseline Bias Compensation
- pruning 후에 bias를 추가해 제거된 channel의 영향을 보상
SliceGPT
- computational invariance를 통해 모델의 결과가 변하지 않는 더 작은 가중치 행렬로 변환해 차원 수를 줄임
Deja Vu
- 특정 입력에 대해 모델의 일부 attention head와 MLP 만으로도 유사한 출력을 만들 수 있다는 '문맥적 희소성(Contextual Sparsity)을 제안
- 모델의 일부분만을 추론에 사용하므로 추론 가속화에 이점.
3. Regularization-based Pruning
- loss function에 정규화 요소(L0,L1,L2)를 추가하여 sparsity를 유도
Sheared LLaMA
- LLM-Pruner의 성능 향상을 위한 방법 2가지 제안
- LLaMA2-7B 모델을 1.3B 파라미터까지 압축
- targeted structured pruning
- 모델의 head, layer, hidden-layer 단위로 제거
- dynamic batch loading
- 다양한 도메인에 걸친 손실 변화에 따라 각 배치의 학습 데이터 구성을 동적으로 업데이트
Reference
https://arxiv.org/abs/2312.03863 - Efficient Large Language Models: A Survey
https://arxiv.org/abs/2308.07633 - A Survey on Model Compression for Large Language Models