대형 언어 모델 효율화: 두 판 사이의 차이
| 편집 요약 없음 | 편집 요약 없음 | ||
| (같은 사용자의 중간 판 2개는 보이지 않습니다) | |||
| 4번째 줄: | 4번째 줄: | ||
| 모델의 가중치(weight)와 활성값(activation)을 부동소수(FP32) 대신 정수(INT8, INT4 등)로 표현하여  메모리와 연산량을 줄이는 기술이다. [[신경망 양자화|'''신경망 양자화''']]에 관한 일반적 내용은 해당 문서에서 확인할 수 있다. | 모델의 가중치(weight)와 활성값(activation)을 부동소수(FP32) 대신 정수(INT8, INT4 등)로 표현하여  메모리와 연산량을 줄이는 기술이다. [[신경망 양자화|'''신경망 양자화''']]에 관한 일반적 내용은 해당 문서에서 확인할 수 있다. | ||
| === 가중치와 활성값 === | |||
| * 가중치는 학습이 완료되면 고정되는 값이다.  | |||
| ** 양자화를 고려한 학습이 이루어질 수도 있지만, 일반적으로 학습 후 정적으로 양자화가 이루어진다. | |||
| ** 활성값에 비해 양자화가 상대적으로 쉽다. | |||
| * 활성값은 추론 시, 입력에 가중치를 곱해나가는 과정에서 일시적으로 활용되는 값이다. | |||
| ** 추론 과정이 모두 끝나면 사라지지만, 추론 과정의 연산량 감소를 위해 동적으로 양자화가 이루어진다. | |||
| ** 아래에서 설명할 이상치 때문에 양자화가 특히 어렵다. | |||
| === 이상치 고려 필요 === | |||
| LLM은 모델 특성상 다른 DNN에 비해 아래와 같은 '''[[이상치]]'''가 두드러지므로 이에 대한 별도 처리를 하지 않으면 같은 [[신경망 양자화 기법|'''신경망 양자화 기법''']]을 적용했을 때 특히 손실이 크다. 따라서 LLM용 Outlier 관리 기법이 별도로 중요하게 사용된다. | LLM은 모델 특성상 다른 DNN에 비해 아래와 같은 '''[[이상치]]'''가 두드러지므로 이에 대한 별도 처리를 하지 않으면 같은 [[신경망 양자화 기법|'''신경망 양자화 기법''']]을 적용했을 때 특히 손실이 크다. 따라서 LLM용 Outlier 관리 기법이 별도로 중요하게 사용된다. | ||
| ''' 주요 이상치 ''' | |||
| *[[과도한 활성값|과도한 활성값(Massive Activation)]] | *[[과도한 활성값|과도한 활성값(Massive Activation)]] | ||
| *[[대형 언어 모델 채널별 이상치|채널별 이상치(Channel-wise Outlier)]] | *[[대형 언어 모델 채널별 이상치|채널별 이상치(Channel-wise Outlier)]] | ||
| ''' | |||
| === LLM 특화 기법=== | |||
| 이상치를 고려하여 일반적으로 아래와 같은 단계로 양자화가 이루어진다. | |||
|  [ Training 완료 ] | |||
|       ↓ | |||
|  [ Smoothing 단계 ] | |||
|   - Activation outlier 완화 | |||
|   - Weight scaling 조정 | |||
|   - 회전(rotate) or 분포 균등화 | |||
|       ↓ | |||
|  [ Quantization 단계 ] | |||
|   - 스케일/제로포인트 결정 | |||
|   - INT8, INT4 등으로 변환 | |||
|   - 손실 최소화 (e.g. GPTQ, AdaQuant) | |||
|       ↓ | |||
|  [ Inference ] | |||
| ''' 평탄화(Smoothing) 기법 ''' | |||
| *[[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) | |||
| ** | *[[AWQ|'''AWQ''' (Activation-aware Weight Quantization, MLSys 2024)]] | ||
| *''' | **SmoothQuant를 확장하여 채널별 스케일 인자 s를 학습(learnable)으로 둠. | ||
| ** | **Calibration 데이터셋에서 activation 분포를 프로파일링하여 scaling factor를 자동 조정. | ||
| *'''ZeroQuant''' (Microsoft, 2022) | **Outlier-aware scaling을 통해 SmoothQuant보다 높은 정확도를 유지. | ||
| ** | |||
| *[[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 기법.   | ||
| 98번째 줄: | 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를 삭제하여 메모리 사용량 감소.
 
- Wanda (Weight and Activation Aware Pruning) [2]
- Magnitude뿐 아니라 Activation 크기를 반영하여 중요도를 계산.
- LLM 구조에 최적화된 post-training pruning 기법.
 
- 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에 강건, 모델 안정성 향상 | 통계 계산과 구현이 복잡 | 

