안녕하세요.
요즘 출시되는 LLM(거대 언어 모델)들의 성능(추론 능력, 신뢰성, 언어 능력 등)이 점점 더 높아지고 있습니다. 성능이 높아질수록 LLM의 크기도 커지게 됩니다. 현재 발표된 모델 중 가장 큰 모델로 알려진 MT-NLG(Megatron-Turing NLG 530B, MS & NVIDIA)의 경우, 파라미터 수가 5300억 개로 알려져 있습니다. 이는 해당 모델이 차지하는 용량이 1TB는 가볍게 넘어설 것으로 보입니다.
이번 포스팅에서는 이러한 LLM을 경량화하는 방법과 효율적으로 작동하도록 하는 기법들에 대해 알아보겠습니다.
Summary
| LLM 경량화 방법 | LLM 성능 개선 방법 | 
| 1) 지식 증류 (Knowledge Distillation) | 1) FlashAttention2 | 
| 2) 양자화 (Quantization) | 2) PagedAttention (vLLM) | 
| 3) 프루닝 (Pruning) | 3) 동적 추론 (Dynamic Inference) | 
| 4) 압축 및 클러스터링 (Compression and Clustering) | 4) 파라미터 공유 (Parameter Sharing) | 
| 5) AWQ (Activation-aware Weight Quantization) | 
반응형
    
    
    
  
대규모 언어 모델(LLM)을 가볍게 만드는 대표적인 방법에는 다음과 같은 기술들이 있습니다.
- 지식 증류(Knowledge Distillation)
- 큰 모델(교사 모델)을 사용하여 작은 모델(학생 모델)을 학습시킵니다. 큰 모델이 예측한 출력을 사용해 작은 모델을 훈련함으로써, 작은 모델이 큰 모델의 성능을 모방하도록 합니다.
- 이 방법은 작은 모델이 큰 모델의 지식을 압축하여 가지게 되므로, 성능 저하를 최소화하면서도 모델 크기를 줄일 수 있습니다.
 
- 양자화(Quantization)
- 모델의 가중치와 연산을 낮은 비트 정밀도로 표현하여 모델 크기를 줄이고 계산 효율성을 높이는 방법입니다.
- 예를 들어, 32비트 부동 소수점 연산을 8비트 정수 연산으로 변환합니다. 이는 메모리 사용량을 줄이고 처리 속도를 향상시킵니다.
 
- 프루닝(Pruning)
- 불필요하거나 중요하지 않은 뉴런이나 가중치를 제거하여 모델을 경량화하는 법입니다.
- 네트워크 구조에서 중요한 연결만 남기고, 중요하지 않은 연결을 제거함으로써 모델 크기를 줄입니다. 이는 연산량을 줄이고 메모리 효율성을 높입니다.
 
- 압축 및 클러스터링(Compression and Clustering)
- 유사한 가중치를 클러스터링하여 하나의 대표 값으로 대체하거나, 압축 알고리즘을 사용해 모델 파라미터를 효율적으로 저장합니다.
- 이는 모델의 저장 공간을 줄이는 동시에 계산 효율성을 높일 수 있습니다.
 
- AWQ (Activation-aware Weight Quantization)  
- 모델의 가중치를 양자화할 때 활성화 함수의 출력을 고려하여 가중치를 양자화하는 법입니다.
- AWQ는 활성화 함수를 고려하여 상대적인 중요도에 따라 양자화 수준을 달리하여 성능 저하를 최소화합니다. 이 기술은 모델의 추론 속도를 높이고 메모리 사용량을 줄이는 데 유용합니다. 비교적 약간의 성능 감소를 통해 모델의 추론 속도와 메모리 사용량을 크게 높일 수 있습니다.
 
대규모 언어 모델(LLM)이 효율적으로 작동하도록 만드는 방법에는 다음과 같은 기술들이 있습니다.
- FlashAttention2
- 효율적인 메모리 사용과 연산 속도를 개선하기 위한 방법입니다. 이 방법은 어텐션 메커니즘을 최적화하여 더 빠르고 메모리 효율적인 계산을 가능하게 합니다.
- 이는 GPU 메모리의 사용을 최소화하고, 연산을 더 빠르게 수행할 수 있도록 설계되었습니다.
 
- PagedAttention (vLLM)  
- 대규모 언어 모델을 더 효율적으로 실행하기 위한 방법입니다. 이 방법은 메모리 페이징 기법을 활용하여, 메모리 사용을 최적화하고 필요할 때 필요한 메모리 페이지를 불러와 사용합니다.
- 메모리 제약이 있는 환경에서 대규모 모델을 실행할 때 유용합니다.
 
- 동적 추론 (Dynamic Inference)  
- 입력 데이터의 특성에 따라 모델의 경로를 동적으로 조정하여 계산량을 줄이는 방법입니다.
- 예를 들어, 쉬운 입력에 대해서는 간단한 경로를, 어려운 입력에 대해서는 복잡한 경로를 선택하여 효율성을 극대화할 수 있습니다.
 
-  파라미터 공유 (Parameter Sharing)
- 모델 내의 여러 레이어가 같은 파라미터를 공유하여 사용하는 방법입니다.
- 이를 통해 모델의 파라미터 수를 줄이고, 메모리 사용을 최적화할 수 있습니다.
 
이와 같은 기법들을 통해 Fine-tuning으로 인해 커진 LLM 모델을 다시 작게 만들고, 성능 저하를 최소화하면서도 효율성을 높일 수 있습니다. 이러한 방법들은 모델의 크기와 연산 복잡도를 줄여, 대규모 언어 모델이 더 효율적으로 작동할 수 있도록 도와줍니다. 상황에 따라 하나 이상의 기법을 조합하여 사용함으로써 최적의 성능을 달성할 수 있습니다. Fine-tuning된 모델의 성능과 효율성을 동시에 극대화하는 것이 가능해집니다.
긴 글 읽어주셔서 감사합니다 :)
반응형
    
    
    
  'AI 용어' 카테고리의 다른 글
| Firebase & Flutter 개발 환경 셋팅 및 기본 명령어 (0) | 2024.10.25 | 
|---|---|
| 스테이블디퓨전 프롬프트 작성방법 (0) | 2024.08.25 | 
| LLM 성능 평가에 대해서 알아보자. (1) | 2024.05.27 | 
| 서버와 통신에 사용되는 FastAPI / RemoteRunnable에 대해 알아보자. (0) | 2024.05.23 | 
| AI 학습을 위한 기본 용어에 대해 알아보자 (2) | 2024.05.21 | 
 
                  
                 
                  
                 
                  
                