대형 언어 모델 효율화: 두 판 사이의 차이

IT 위키
편집 요약 없음
편집 요약 없음
 
(같은 사용자의 중간 판 3개는 보이지 않습니다)
2번째 줄: 2번째 줄:


==양자화 (Quantization)==
==양자화 (Quantization)==
모델의 가중치(weight)와 활성값(activation)을 부동소수(FP32) 대신 정수(INT8, INT4 등)로 표현하여  메모리와 연산량을 줄이는 기술이다. [[신경망 양자화]]에 관한 일반적 내용은 해당 문서에서 확인할 수 있다.
모델의 가중치(weight)와 활성값(activation)을 부동소수(FP32) 대신 정수(INT8, INT4 등)로 표현하여  메모리와 연산량을 줄이는 기술이다. [[신경망 양자화|'''신경망 양자화''']]에 관한 일반적 내용은 해당 문서에서 확인할 수 있다.


'''주요 방식'''
=== 가중치와 활성값 ===
*정적 양자화 (Static Quantization)
 
**사전 수집된 데이터셋으로 scale과 zero-point를 미리 계산.
* 가중치는 학습이 완료되면 고정되는 값이다.
*동적 양자화 (Dynamic Quantization)
** 양자화를 고려한 학습이 이루어질 수도 있지만, 일반적으로 학습 후 정적으로 양자화가 이루어진다.
**실행 시점에 활성값을 실시간으로 양자화.
** 활성값에 비해 양자화가 상대적으로 쉽다.
*후처리 양자화 (Post-training Quantization, PTQ)
* 활성값은 추론 시, 입력에 가중치를 곱해나가는 과정에서 일시적으로 활용되는 값이다.
**학습된 모델에 재학습 없이 양자화를 적용.
** 추론 과정이 모두 끝나면 사라지지만, 추론 과정의 연산량 감소를 위해 동적으로 양자화가 이루어진다.
*양자화 인식 학습 (Quantization-Aware Training, QAT)
** 아래에서 설명할 이상치 때문에 양자화가 특히 어렵다.
**학습 단계에서 양자화 효과를 모의(simulation)하여 정확도 손실을 최소화.
 
'''세분화 수준 (Granularity)'''
=== 이상치 고려 필요 ===
*Tensor-based quantization
 
*Vector-based quantization
LLM은 모델 특성상 다른 DNN에 비해 아래와 같은 '''[[이상치]]'''가 두드러지므로 이에 대한 별도 처리를 하지 않으면 같은 [[신경망 양자화 기법|'''신경망 양자화 기법''']]을 적용했을 때 특히 손실이 크다. 따라서 LLM용 Outlier 관리 기법이 별도로 중요하게 사용된다.
*Group-based quantization
''' 주요 이상치 '''
'''Outlier 관리'''
*[[과도한 활성값|과도한 활성값(Massive Activation)]]
*[[대형 언어 모델 채널별 이상치|채널별 이상치(Channel-wise Outlier)]]
 
=== LLM 특화 기법===
이상치를 고려하여 일반적으로 아래와 같은 단계로 양자화가 이루어진다.
[ Training 완료 ]
     ↓
[ Smoothing 단계 ]
 - Activation outlier 완화
 - Weight scaling 조정
 - 회전(rotate) or 분포 균등화
     ↓
[ Quantization 단계 ]
 - 스케일/제로포인트 결정
 - INT8, INT4 등으로 변환
 - 손실 최소화 (e.g. GPTQ, AdaQuant)
     ↓
[ Inference ]
''' 평탄화(Smoothing) 기법 '''


LLM은 모델 특성상 다른 DNN에 비해 [[이상치]]가 두드러지므로 이에 대한 별도 처리를 하지 않으면 같은 [[신경망 양자화 기법]]을 적용했을 때 특히 손실이 크다. 따라서 LLM용 Outlier 관리 기법이 별도로 중요하게 사용된다.
*Massive Activation
*Channel-wise Outlier
*Clip Activation / Clip Weight
'''LLM 특화 양자화 기법'''
*[[SmoothQuant|'''SmoothQuant''' (ICML 2023)]]
*[[SmoothQuant|'''SmoothQuant''' (ICML 2023)]]
**활성값의 outlier 문제를 가중치 쪽으로 이전(migrate)하여 양자화 오차를 줄임.
**활성값의 outlier 문제를 가중치 쪽으로 이전(migrate)하여 양자화 오차를 줄임.
**수식:  Y = (X·diag(s)^(-1))·(diag(s)·W)
**수식:  Y = (X·diag(s)^(-1))·(diag(s)·W)
**α 하이퍼파라미터로 activation–weight 균형 제어.
**α 하이퍼파라미터로 activation–weight 균형 제어.
*[[QuaRot]]
**Post-Training Quantization(PTQ)에서 activation clipping 없이 정확도 손실을 최소화.
*'''GPTQ''' (Quantization by Gradient Descent)
 
**학습 후 Hessian 근사 기반 최적화 양자화.
*[[AWQ|'''AWQ''' (Activation-aware Weight Quantization, MLSys 2024)]]
*'''AWQ''' (Activation-aware Weight Quantization)
**SmoothQuant를 확장하여 채널별 스케일 인자 s를 학습(learnable)으로 둠.
**Calibration 단계에서 outlier-aware scaling 적용.
**Calibration 데이터셋에서 activation 분포를 프로파일링하여 scaling factor를 자동 조정.
*'''ZeroQuant''' (Microsoft, 2022)
**Outlier-aware scaling을 통해 SmoothQuant보다 높은 정확도를 유지.
**End-to-end 자동 양자화 파이프라인.
 
*[[QuaRot|'''QuaRot''' (arXiv 2024)]]
**직교 행렬 R을 적용하여 weight 및 activation의 분포를 회전(rotate)시켜 outlier 방향을 분산.
**Quantization 전 선형 변환을 통해 activation/weight의 스케일 균등화.
**Outlier-free 4-bit inference를 구현하며, 추가 연산 비용이 거의 없음.
 
*[[DuQuant|'''DuQuant''' (NeurIPS 2024)]]
**스칼라(scalar), 회전(rotation), 순열(permutation) 기반의 3중 변환을 결합해 outlier를 분산(distribute).
**Permutation matrix를 활용해 출력은 동일하게 유지하면서 내부 분포만 균등화.
**Outlier-sensitive layer에서도 안정적인 저비트 양자화를 달성.
 
*[[SpinQuant|'''SpinQuant''' (arXiv 2024)]]
**회전 행렬을 학습(learned rotation)하여 양자화 후 손실이 최소화되도록 최적화.
**직교성(orthogonality)을 유지하기 위해 Cayley Optimization 기법 사용.
**QuaRot의 수학적 기반을 일반화한 학습형 버전으로, fine-tuning 시 함께 학습 가능.
 
''' 양자화(Quantization) 기법 '''
 
*[[AdaQuant|'''AdaQuant''' (ICML 2021)]]
**소량의 Calibration 데이터로 레이어별 최적 스케일(scale)과 offset(Zero-point)을 학습.
**Sequential AdaQuant은 각 레이어의 양자화 후 재보정(calibration)을 순차적으로 수행.
**데이터 효율적 PTQ(Post-Training Quantization) 접근으로, 학습 데이터가 제한된 환경에 적합.
 
*[[GPTQ|'''GPTQ''' (Quantization by Gradient Descent, NeurIPS 2022)]]
**OBS(Optimal Brain Surgeon) 기반의 2차 미분 근사를 사용해 weight를 하나씩 양자화.
**양자화 시 손실(Loss) 증가를 최소화하기 위해 나머지 weight를 동적으로 보정(update).
**LLM용 고정밀 Post-Training Quantization 기법으로, 최소한의 fine-tuning으로 높은 정확도 유지.
 
*[[OBS|'''OBS''' (Optimal Brain Surgeon, NIPS 1992)]]
**2차 미분(Hessian) 기반으로 중요도가 낮은 weight를 제거(prune)하거나 양자화 시 손실 증가를 최소화.
**양자화보다는 pruning 연구에서 출발했으나 GPTQ·OBQ의 수학적 기반이 됨.
**OBD(Optimal Brain Damage)보다 정밀한 손실 추정이 가능하며, modern PTQ의 이론적 전신.
 
*[[CodeQuant|'''CodeQuant / Clustering Quantization''']]
**가중치(weight)를 클러스터링하고 각 클러스터 중심값(centroid)으로 치환하여 연산 단순화.
**Outlier에 강인하며 LUT(Look-Up Table) 기반 곱셈 대체 구조에 적합.
**양자화 대비 오류(Error)가 낮고, 메모리 접근 효율성이 높음.
 
*[[LUT Quantization|'''LUT-based Quantization''']]
**입력과 가중치를 저비트(예: 4bit) 코드로 변환해 Look-Up Table(LUT)에서 곱셈 결과를 조회.
**덧셈-곱셈 연산(MAC)을 테이블 참조로 대체하여 메모리 대역폭 절감.
**하드웨어 친화적 LLM inference 구조 설계에 사용됨.
 
*[[ZeroQuant|'''ZeroQuant''' (Microsoft, 2022)]]
**엔드투엔드 자동 양자화 파이프라인.
**모델 프로파일링, scaling factor 추정, dynamic quantization을 자동화.
**FP16→INT8 변환 과정을 전체적으로 최적화하여 on-device inference 효율을 향상.
==가지치기 (Pruning)==
==가지치기 (Pruning)==
불필요하거나 기여도가 낮은 가중치를 제거하여 모델 크기를 줄이고 추론 속도를 향상시키는 방법. [[신경망 가지치기]]에 대한 일반적 내용은 해당 문서 참조
불필요하거나 기여도가 낮은 가중치를 제거하여 모델 크기를 줄이고 추론 속도를 향상시키는 방법. [[신경망 가지치기]]에 대한 일반적 내용은 해당 문서 참조


'''LLM 특화 프루닝 기법'''
'''LLM 특화 프루닝 기법'''
*'''KV Cache Pruning''' <ref>Ge, Suyu, et al. "Model tells you what to discard: Adaptive KV cache compression for LLMs." arXiv, 2023.  </ref>
*'''[[KV 캐시 가지치기|KV Cache Pruning]]''' <ref>Ge, Suyu, et al. "Model tells you what to discard: Adaptive KV cache compression for LLMs." arXiv, 2023.  </ref>
**Key/Value 벡터(Kᵢⱼ, Vᵢⱼ)를 토큰 중요도 기반으로 압축.  
**Key/Value 벡터(Kᵢⱼ, Vᵢⱼ)를 토큰 중요도 기반으로 압축.  
**Attention score에 따라 불필요한 KV를 삭제하여 메모리 사용량 감소.  
**Attention score에 따라 불필요한 KV를 삭제하여 메모리 사용량 감소.  


*'''Wanda (Weight and Activation Aware Pruning)''' <ref>arXiv:2306.11695, 2023.  </ref>
*'''[[Wanda 가지치기|Wanda (Weight and Activation Aware Pruning)]]''' <ref>arXiv:2306.11695, 2023.  </ref>
**Magnitude뿐 아니라 Activation 크기를 반영하여 중요도를 계산.  
**Magnitude뿐 아니라 Activation 크기를 반영하여 중요도를 계산.  
**LLM 구조에 최적화된 post-training pruning 기법.  
**LLM 구조에 최적화된 post-training pruning 기법.  
112번째 줄: 171번째 줄:
|}
|}


 
== 각주 ==
[[분류:인공지능]]
[[분류:인공지능]]
<references />
<references />
[[분류:딥 러닝]]
[[분류:딥 러닝]]
[[분류:대형 언어 모델]]
[[분류:대형 언어 모델]]

2025년 10월 30일 (목) 02:47 기준 최신판

본 문서는 대형 언어 모델(Large Language Model, LLM)의 저장 공간 및 연산 효율을 개선하기 위한 대표적 기법들을 정리한 것이다. 주요 방향은 양자화(Quantization), 가지치기(Pruning), 지식 증류(Knowledge Distillation)이며, LoRA, SmoothQuant, MoE 등 최신 기법들도 포함된다.

양자화 (Quantization)[편집 | 원본 편집]

모델의 가중치(weight)와 활성값(activation)을 부동소수(FP32) 대신 정수(INT8, INT4 등)로 표현하여 메모리와 연산량을 줄이는 기술이다. 신경망 양자화에 관한 일반적 내용은 해당 문서에서 확인할 수 있다.

가중치와 활성값[편집 | 원본 편집]

  • 가중치는 학습이 완료되면 고정되는 값이다.
    • 양자화를 고려한 학습이 이루어질 수도 있지만, 일반적으로 학습 후 정적으로 양자화가 이루어진다.
    • 활성값에 비해 양자화가 상대적으로 쉽다.
  • 활성값은 추론 시, 입력에 가중치를 곱해나가는 과정에서 일시적으로 활용되는 값이다.
    • 추론 과정이 모두 끝나면 사라지지만, 추론 과정의 연산량 감소를 위해 동적으로 양자화가 이루어진다.
    • 아래에서 설명할 이상치 때문에 양자화가 특히 어렵다.

이상치 고려 필요[편집 | 원본 편집]

LLM은 모델 특성상 다른 DNN에 비해 아래와 같은 이상치가 두드러지므로 이에 대한 별도 처리를 하지 않으면 같은 신경망 양자화 기법을 적용했을 때 특히 손실이 크다. 따라서 LLM용 Outlier 관리 기법이 별도로 중요하게 사용된다. 주요 이상치

LLM 특화 기법[편집 | 원본 편집]

이상치를 고려하여 일반적으로 아래와 같은 단계로 양자화가 이루어진다.

[ Training 완료 ]
     ↓
[ Smoothing 단계 ]
 - Activation outlier 완화
 - Weight scaling 조정
 - 회전(rotate) or 분포 균등화
     ↓
[ Quantization 단계 ]
 - 스케일/제로포인트 결정
 - INT8, INT4 등으로 변환
 - 손실 최소화 (e.g. GPTQ, AdaQuant)
     ↓
[ Inference ]

평탄화(Smoothing) 기법

  • SmoothQuant (ICML 2023)
    • 활성값의 outlier 문제를 가중치 쪽으로 이전(migrate)하여 양자화 오차를 줄임.
    • 수식: Y = (X·diag(s)^(-1))·(diag(s)·W)
    • α 하이퍼파라미터로 activation–weight 균형 제어.
    • Post-Training Quantization(PTQ)에서 activation clipping 없이 정확도 손실을 최소화.
  • AWQ (Activation-aware Weight Quantization, MLSys 2024)
    • SmoothQuant를 확장하여 채널별 스케일 인자 s를 학습(learnable)으로 둠.
    • Calibration 데이터셋에서 activation 분포를 프로파일링하여 scaling factor를 자동 조정.
    • Outlier-aware scaling을 통해 SmoothQuant보다 높은 정확도를 유지.
  • QuaRot (arXiv 2024)
    • 직교 행렬 R을 적용하여 weight 및 activation의 분포를 회전(rotate)시켜 outlier 방향을 분산.
    • Quantization 전 선형 변환을 통해 activation/weight의 스케일 균등화.
    • Outlier-free 4-bit inference를 구현하며, 추가 연산 비용이 거의 없음.
  • DuQuant (NeurIPS 2024)
    • 스칼라(scalar), 회전(rotation), 순열(permutation) 기반의 3중 변환을 결합해 outlier를 분산(distribute).
    • Permutation matrix를 활용해 출력은 동일하게 유지하면서 내부 분포만 균등화.
    • Outlier-sensitive layer에서도 안정적인 저비트 양자화를 달성.
  • SpinQuant (arXiv 2024)
    • 회전 행렬을 학습(learned rotation)하여 양자화 후 손실이 최소화되도록 최적화.
    • 직교성(orthogonality)을 유지하기 위해 Cayley Optimization 기법 사용.
    • QuaRot의 수학적 기반을 일반화한 학습형 버전으로, fine-tuning 시 함께 학습 가능.

양자화(Quantization) 기법

  • AdaQuant (ICML 2021)
    • 소량의 Calibration 데이터로 레이어별 최적 스케일(scale)과 offset(Zero-point)을 학습.
    • Sequential AdaQuant은 각 레이어의 양자화 후 재보정(calibration)을 순차적으로 수행.
    • 데이터 효율적 PTQ(Post-Training Quantization) 접근으로, 학습 데이터가 제한된 환경에 적합.
  • GPTQ (Quantization by Gradient Descent, NeurIPS 2022)
    • OBS(Optimal Brain Surgeon) 기반의 2차 미분 근사를 사용해 weight를 하나씩 양자화.
    • 양자화 시 손실(Loss) 증가를 최소화하기 위해 나머지 weight를 동적으로 보정(update).
    • LLM용 고정밀 Post-Training Quantization 기법으로, 최소한의 fine-tuning으로 높은 정확도 유지.
  • OBS (Optimal Brain Surgeon, NIPS 1992)
    • 2차 미분(Hessian) 기반으로 중요도가 낮은 weight를 제거(prune)하거나 양자화 시 손실 증가를 최소화.
    • 양자화보다는 pruning 연구에서 출발했으나 GPTQ·OBQ의 수학적 기반이 됨.
    • OBD(Optimal Brain Damage)보다 정밀한 손실 추정이 가능하며, modern PTQ의 이론적 전신.
  • CodeQuant / Clustering Quantization
    • 가중치(weight)를 클러스터링하고 각 클러스터 중심값(centroid)으로 치환하여 연산 단순화.
    • Outlier에 강인하며 LUT(Look-Up Table) 기반 곱셈 대체 구조에 적합.
    • 양자화 대비 오류(Error)가 낮고, 메모리 접근 효율성이 높음.
  • LUT-based Quantization
    • 입력과 가중치를 저비트(예: 4bit) 코드로 변환해 Look-Up Table(LUT)에서 곱셈 결과를 조회.
    • 덧셈-곱셈 연산(MAC)을 테이블 참조로 대체하여 메모리 대역폭 절감.
    • 하드웨어 친화적 LLM inference 구조 설계에 사용됨.
  • ZeroQuant (Microsoft, 2022)
    • 엔드투엔드 자동 양자화 파이프라인.
    • 모델 프로파일링, scaling factor 추정, dynamic quantization을 자동화.
    • FP16→INT8 변환 과정을 전체적으로 최적화하여 on-device inference 효율을 향상.

가지치기 (Pruning)[편집 | 원본 편집]

불필요하거나 기여도가 낮은 가중치를 제거하여 모델 크기를 줄이고 추론 속도를 향상시키는 방법. 신경망 가지치기에 대한 일반적 내용은 해당 문서 참조

LLM 특화 프루닝 기법

  • KV Cache Pruning [1]
    • Key/Value 벡터(Kᵢⱼ, Vᵢⱼ)를 토큰 중요도 기반으로 압축.  
    • Attention score에 따라 불필요한 KV를 삭제하여 메모리 사용량 감소.  
  • Streaming-LLM[3]
    • Attention Sink 문제를 완화하며, 초기 토큰의 KV를 부분 유지.  
    • Sliding Window Attention과 KV 캐시 재활용을 결합하여 효율적 스트리밍 추론 구현.  

저랭크 분해 (Low-rank Decomposition for LLM)[편집 | 원본 편집]

저랭크 분해(Low-rank Decomposition)는 대규모 언어모델(LLM)의 파라미터를 효율적으로 줄이기 위한 대표적인 방법이다. 거대한 가중치 행렬을 두 개의 더 작은 행렬로 근사함으로써, 계산량과 저장 공간을 줄이면서도 모델의 표현력을 유지한다.

기본 개념

  • 일반적인 신경망에서는 거대한 가중치 행렬이 입력을 출력으로 변환한다.
  • 저랭크 분해는 이 큰 행렬을 두 개의 더 작은 행렬로 나누어 근사한다.
  • 이렇게 하면 모델은 전체 행렬을 학습하지 않고, 두 개의 더 작고 효율적인 행렬만 학습하게 된다.
  • 결과적으로 필요한 연산과 저장 공간이 크게 줄어든다.

장점

  • 학습 시 필요한 연산량이 감소하고, GPU 메모리 사용량이 줄어든다.
  • 가중치 수가 크게 줄어, 모델의 저장 공간이 절약된다.
  • I/O 비용이 줄어 추론 속도가 빨라진다.

단점

  • 너무 작은 차원으로 근사하면 모델의 표현력이 손상되어 정확도가 급격히 떨어질 수 있다.
  • 최적의 차원 수(랭크)를 선택하는 과정이 쉽지 않다.

SVD 기반 접근[편집 | 원본 편집]

  • 저랭크 분해는 수학적으로 ‘특이값 분해(SVD)’로 설명될 수 있다.
  • 하나의 가중치 행렬을 세 부분으로 나누어, 핵심 정보를 담은 중간 부분만 남기고 나머지를 제거한다.
  • 이렇게 하면 중요한 패턴은 유지하면서 불필요한 세부 정보를 제거할 수 있다.
  • 다만, 단순히 분해만 수행하면 연산량이 줄지 않고 오히려 늘어날 수 있다.
  • 따라서 실제 응용에서는 작은 특이값(영향이 적은 부분)을 제거하는 방식으로 최적화한다.

Transformer 구조에서의 적용[편집 | 원본 편집]

  • 대규모 언어모델의 핵심 연산은 선형 변환과 어텐션 프로젝션에 집중되어 있다.
  • 이 부분에 저랭크 분해를 적용하면 다음과 같은 이점을 얻을 수 있다.
    • 연산량이 감소하여 추론 속도가 빨라진다.
    • GPU 메모리와 저장 공간이 절감된다.
    • KV 캐시(과거 토큰의 키·값 벡터)의 크기가 줄어들어 긴 문맥을 더 효율적으로 다룰 수 있다.

QSVD (Query–Key–Value 통합 저랭크 근사)[편집 | 원본 편집]

  • QSVD는 Transformer의 Query, Key, Value 세 가지 선형 변환을 하나의 공통 구조로 결합하여 효율을 높인 방법이다.
  • 기존 방식에서는 Q, K, V 각각 별도의 행렬을 학습했지만, QSVD는 이를 하나로 묶어 공통 저차원 공간을 공유하도록 한다.
  • 이렇게 하면 세 변환 간의 중복된 정보를 줄이고, 필요한 계산과 저장 공간이 줄어든다.
  • 또한 캐시 메모리 사용량이 크게 감소하여 긴 입력 문장 처리 시 효율이 향상된다.
  • 이 접근은 시각·언어 융합 모델 등 멀티모달 구조에서도 유용하다.

특징

  • Q, K, V를 병합하여 하나의 큰 행렬로 만든 뒤, 이를 저차원으로 근사한다.
  • 이후 다시 필요한 형태로 분리하면서 공통된 저차원 표현을 공유한다.
  • 동일한 크기의 모델에서도 더 적은 계산으로 비슷한 품질을 유지할 수 있다.

ASVD (Activation-Aware SVD)[편집 | 원본 편집]

  • ASVD는 입력 데이터의 분포를 함께 고려하는 발전된 저랭크 분해 방식이다.
  • 기존 방법은 가중치 행렬만 보고 근사하기 때문에, 입력값의 크기나 분포에 따라 성능이 불안정할 수 있다.
  • ASVD는 입력 활성값(activation)의 통계적 특징을 분석해, 각 채널별 중요도를 반영한다.
  • 이렇게 하면 특정 채널에 값이 과도하게 크거나 불균형할 때도 안정적으로 근사할 수 있다.
  • 결과적으로, 채널별 이상치(outlier)에 강건한 저랭크 근사가 가능해지고 LLM의 압축 안정성이 향상된다.

기법 간 비교[편집 | 원본 편집]

기법 주요 개념 장점 한계
기본 저랭크 분해 가중치를 두 개의 작은 행렬로 근사 단순하고 구현이 쉬움 근사 차원 선택이 어려움
SVD 기반 가중치의 주요 성분만 남기고 나머지를 제거 정보 손실이 적고 수학적으로 안정적 입력 분포를 고려하지 않음
QSVD Query/Key/Value를 통합하여 저차원 표현 공유 캐시 절약, 연산 효율 향상 구조 복잡, 추가 변환 필요
ASVD 입력 활성값의 통계까지 반영한 SVD Outlier에 강건, 모델 안정성 향상 통계 계산과 구현이 복잡

각주[편집 | 원본 편집]

  1. Ge, Suyu, et al. "Model tells you what to discard: Adaptive KV cache compression for LLMs." arXiv, 2023.  
  2. arXiv:2306.11695, 2023.  
  3. Xiao, Guangxuan, et al. "Efficient streaming language models with attention sinks." arXiv, 2023.