본문 바로가기

공부/LLM

LLM모델 경량화 및 최적화 방법

LLM(Large Language Model)을 경량화하고 최적화하는 것은 실시간 응답성, 메모리 사용량 감소, 배포 비용 절감 등의 측면에서 매우 중요

 

특히 자원이 제한된 환경(예: 모바일 장치, 웹 서비스, Google Colab 등)에서 LLM을 사용할 때 이러한 작업은 필수

1. 모델 경량화(Compression) 방법

  1. 모델 축소(Model Distillation)
    • 설명: 큰 모델(교사 모델)의 정보를 작은 모델(학생 모델)로 압축하여 학습합
      • 이 방법은 작은 모델이 큰 모델의 성능을 모방하도록 훈련
      • 작은 모델임에도 불구하고 성능 저하 최소화
    • 장점: 모델 크기 및 추론 속도 최적화
    • 예시:
      • BERT → DistilBERT
      • GPT-3 → DistilGPT.
  2. 양자화(Quantization)
    • 설명: 모델의 가중치와 활성화를 32비트 부동 소수점 -> 16비트, 8비트, 또는 그 이하로 줄여 모델 크기를 줄이고 속도를 높임
    • 장점: 모델 크기 및 추론 속도 최적화, 특히 CPU 및 Edge 장치에 효과적.
    • 종류:
      • 정밀도 양자화(8-bit, 16-bit): 성능 손실이 적으면서 메모리 사용량 감소
      • 가중치 공유 및 이동 양자화(Weight-sharing & Clipping): 추가 압축 가능
    • 예시: 8-bit BERT, INT8 Quantized GPT-2.
  3. 희소화(Sparsification)
    • 설명: 모델의 매개변수 중 중요하지 않은 연결(가중치) 제거 -> 희소한 구조로 변환
      • 이를 통해 연산량을 줄이고 메모리 사용량을 줄임
    • 장점: 메모리 및 계산 비용 절감
    • 방법: 가중치 절단(Weight Pruning), 희소화 학습(Structured Sparsity Training).
    • 예시: 파인튜닝 후 가중치가 작은 값들을 제거하는 Pruned BERT
  4. 가중치 공유(Weight Sharing)
    • 설명: 같은 매개변수를 여러 계층(layer)에서 공유하는 방식,
      • 가중치 수를 줄이고 메모리 사용을 줄입니다.
    • 장점: 모델 크기 감소, 메모리 사용량 감소
    • 예시: ALBERT(구조 공유).
  5. 토큰 감소(Token Reduction) 및 입력 압축
    • 설명: 모델이 처리해야 할 입력 길이를 줄여 연산량을 감소시키는 방법
      • 이를 위해 문장 전처리 및 요약 기법 등을 사용
    • 장점: 추론 속도 증가, 메모리 사용 감소.
    • 예시: 사전 전처리를 통해 입력 길이 제한 또는 정보 요약 사용

2. 모델 최적화(Optimization) 방법

  1. 혼합 정밀도 훈련(Mixed Precision Training)
    • 설명: 훈련 시 일부 텐서를 FP16(16-bit float)로, 일부는 FP32로 계산하여 메모리 사용량과 연산 비용을 줄임
    • 장점: GPU 메모리 절약, 훈련 속도 증가.
    • 도구: NVIDIA의 Apex 또는 PyTorch의 torch.cuda.amp.
  2. 배치 정규화 및 축소(Micro-Batching)
    • 설명: 큰 배치를 여러 개의 작은 배치로 나누어 처리하여 메모리 사용을 효율적으로 관리
    • 장점: 메모리 효율성 증가, GPU 메모리 부족 문제 해결.
  3. 동적 모델 크기 조정(Dynamic Model Size Scaling)
    • 설명: 사용 환경에 따라 모델의 깊이(계층 수)나 폭(각 계층의 크기)을 조정할 수 있도록 모델 구성
    • 장점: 유연한 메모리 및 계산 자원 관리
    • 예시: EfficientNet의 "compound scaling" 방식
  4. 메모리 캐시 및 체크포인팅(Memory Caching & Checkpointing)
    • 설명: 중간 계산 결과를 캐시하거나 필요할 때만 다시 계산하는 방식
      • 메모리 사용량을 줄이고 훈련 시 메모리 부족 문제 해결
    • 장점: 메모리 사용량 감소, 메모리 효율성 증가
    • 도구: PyTorch의 torch.utils.checkpoint.
  5. TensorRT와 같은 추론 엔진 사용
    • 설명: NVIDIA TensorRT 같은 고성능 추론 엔진을 사용해 모델을 최적화, 딥러닝 추론 가속화
    • 장점: 추론 속도 증가, 성능 최적화.
    • 플랫폼: TensorFlow Lite, ONNX Runtime, NVIDIA TensorRT.

3. 기타 최적화 기술

  1. 메모리 레이아웃 최적화(Memory Layout Optimization)
    • 설명: 연산 최적화를 위해 데이터 메모리 배치를 재구성하는 방식
      • 예를 들어, 모델의 인풋 텐서와 가중치 텐서를 더 나은 접근 패턴으로 재배치하여 메모리 접근 시간 줄임
    • 장점: 메모리 대역폭 사용 최적화, 추론 속도 개선.
  2. 텐서 합성(Tensor Fusion)
    • 설명: 여러 연산을 하나의 커널에서 실행하도록 합성하여 오버헤드를 줄이는 기법
    • 장점: 커널 호출 횟수 감소, 연산 속도 최적화.
  3. 지연 연산(Delayed Execution) 및 그래프 최적화
    • 설명: 필요할 때만 연산을 실행하는 방식
      • 메모리 사용과 계산을 최적화
    • 장점: 메모리와 계산 자원 관리 최적화

4. 플랫폼 최적화 및 환경 설정

  1. 분산 훈련 및 파이프라인 병렬화
    • 설명: 모델을 여러 GPU/TPU로 분할하여 병렬로 훈련 or 추론
    • 장점: 훈련 속도 및 추론 성능 향상.
    • 도구: PyTorch DDP(Distributed Data Parallel), TensorFlow MirroredStrategy.
  2. 컴파일러 최적화
    • 설명: XLA(Accelerated Linear Algebra)와 같은 컴파일러를 사용하여 TensorFlow 모델을 더 빠르게 실행
    • 장점: 더 나은 하드웨어 활용, 속도 향상