본문 바로가기
Python/AI

LLM 학습 시 메모리 고려(feat. LLaMA-7B)

by JONGSKY 2024. 1. 13.
728x90
SMALL

1. 메모리 사용량 계산 (모델의 파라미터가 fp32일 때)

 

파라미터 당 bytes : 32 bits / 8 bits = 4 bytes

 

2. 모델 학습 시 메모리 사용량 고려

 

Forwarding을 위해 필요한 모델 파라미터를 N이라고 가정했을 때,

모델 메모리는 4 * N

Optimizer 메모리 - 4 * 4 * N

Gradient 메모리 - 4 * N

 

예시 모델 : LLaMA-7B

모델 메모리는 4 * 7B = 28GB

Optimzer(AdamW) 4 * 4* 7B = 112GB

Gradient 4 * 7B = 28GB

총 메모리 사용량 = 28 + 112 + 28 = 168GB

LLaMA-7B 모델 훈련을 위해서는 168GB 이상의 vRAM이 소요

 

한정된 자원에서 모델을 훈련시키는데에 메모리가 너무 많이 소요된다.

 

3. 그래서 Model optimization techniques

 

- Quantization(GPTQ) : 모델 파라미터의 Precision을 줄이자.

    - precision : 하나의 숫자를 표현하기 사용되는 bits 수

    - Quantization : 원본 파라미터의 precision을 감소시키는 경량화 방법론

 

- Sparsity(Pruning) : 모델 파라미터 중 중요한 파라미터만 사용하자.

    - 모델의 파라미터 중 성능에 중요한 일부 파라미터만 사용

 

- Distillation(Distillation Step-by-Step) : 더 작은 모델이 비슷하게 행동하도록 학습시키자.

    - 큰 모델과 유사한 출력을 생성하는 작은 모델을 생성하여 추론하는 방법론

 

4. Model Training Optimization Techniques

 

모델이 학습된 결과를 근사하는 모듈을 트랜스포머 구조 내부에 추가

- Adapter : 각 sub-layer 직후

    - 원본 모델은 학습하지 않고, Adapter 모듈 내 파라미터만 학습하는 방법론

- Prefix-Tuning : Self Attention의 Key와 value

    - 원본 모델은 학습하지 않고, 추가된 Prefix 파라미터만 학습하는 방법론

- LoRA : Self Attention의 Query와 Key

    - 원본 모델은 학습하지 않고, 추가된 LoRA Layer 내 파라미터만 학습하는 방법론

 

즉, 학습 대상이 되는 Optimizer와 Gradient에 해당되는 파라미터를 효과적을 줄이는 방법

 

5. 파인튜닝을 한 것에 대한 측정

 

- Open-LLM Learderboard

    - H7 Dataset(7개 평가 데이터셋)을 이용한 LLM ㄹ평가 리더보드

- 평가방식(lm-evaluation-harness)

    - ARC(AI2 Reasoning Challenge) : 초등학교 수준의 과학 지식에 대한 다양한 질문 및 지식 유형을 통한 평가

    - Hellawag : 일상 생활에서 발생하는 다양한 문장 연결 관계 파악 태스크

    - TruthfulQA : 사실 기반 문장 이해 능력 평가, 38개 도메인으로 구성, 사실관계가 매우 중요한 질문

    - WinoGrande : 초등학생 수준의 일반 상식 보유 능력 평가

    - GSM8k : 초등학생 수준의 수학문제

    - DROP(Discrete Reasoning Over the content of Paragraphs) : 모델의 문맥 내 수치 이해 및 추론 능력 평가

    - MMLU(Massive Multitask Language Understanding) : 다중 태스크 57개의 태스크로 구성

 

728x90
LIST