본문 바로가기

공부방/Upstage AI Lab 4기

[NLP] VRAM이 딸려서 모델이 안돌아갈때 할 수 있는 방법들

VRAM(Video RAM) = 그래픽 처리 장치(GPU)에 내장된 고속 메모리. GPU와 실시간으로(아주아주 빠르게) 데이터를 주고받을 수 있다. 모델의 파라미터, 배치, 연산의 중간 결과 등을 저장하는 역할을 함.

딥러닝 모델을 학습시키거나 파인튜닝할 때,
큰 모델, 대용량 데이터를 넣으려면 VRAM이 많이 필요. (VRAM 용량이 부족하면 데이터, 모델을 못넣음)

 

VRAM이 부족한데 모델은 꼭 돌려보고 싶다면?

1) 배치를 줄이거나, 작은 모델을 쓴다. 대신 작업 속도가 느려지고, 품질이 낮아짐.

- 배치를 줄이고, 작은 배치를 여러 번 처리한 후 가중치를 업데이트(Gradient Accumulation) -> 이번 대회에서 가장 많이 쓰고 있는 방법! 

일반적인 학습: 배치마다 손실함수의 그래디언트를 계산하고 모델의 가중치를 업데이트
Gradient Accumulation: 여러 번의 미니 배치 결과를 모아놓고 한번에 가중치를 업데이트. 큰 배치 크기와 비슷한 효과..

Effective Batch Size= Mini-Batch Size × Gradient Accumulation Steps
전체 배치 크기 = 미니배치 x 그래디언트 스탭
8 x 4 = 32 (32배치 효과를 내는 것)
참고로 배치 크기가 클수록 그래디언트 계산이 더 안정적이고, 일반적으로 학습이 더 효율적.

2) 기존 모델의 파라미터 숫자를 줄여서 파인튜닝
- 모델 구조 변경(경량화된 모델을 쓰거나 특정 층을 제거, 뉴런 수 줄이기)
- 모델 압축 : 프루닝, 양자화
- 파라미터 공유
- LoRA(Low-Rank Adaptation): 파인튜닝 과정에서 모델의 일부 파라미터만을 학습하여 계산 자원과 메모리 사용을 대폭 줄일 수 있다.

 

3) Mixed Precision Training:
16비트 부동소수점(FP16)을 사용해 메모리 사용량을 줄이고 학습 속도를 높이는 방법.
NVIDIA GPU에서 PyTorch의 torch.cuda.amp 또는 TensorFlow의 mixed_precision API로 쉽게 구현 가능

4) Layer Freezing
사전 학습된 모델의 일부 층을 고정(freeze)하고, 필요한 층만 학습.
학습해야 할 파라미터 수를 줄여 VRAM을 절약.

5) VRAM 용량이 많은 GPU를 임시로 대여(ex. Colab Pro)

6) Distributed Data Parallelism (DDP)
데이터를 여러 GPU에 분산하여 학습하는 방식. 각 GPU가 모델의 복사본을 가지고 데이터의 일부분을 병렬로 처리.
Data Parallelism: 전체 데이터를 GPU 개수만큼 나누고, 각 GPU에서 병렬 처리. 각 GPU는 자신의 데이터 배치(batch)를 학습하고, 결과를 동기화하여 모델 가중치를 업데이트. /
DDP는 데이터를 나누는 방식이지 모델 자체를 나누는 방식이 아니므로, 모델 크기가 각 GPU의 VRAM 한도를 넘으면 여전히 학습이 불가능.

7) Zero Redundancy Optimizer (ZeRO)
모델의 옵티마이저와 가중치를 GPU 메모리 전체에 분산하여 VRAM 사용량을 최적화