가이드 · 개념 이해

LLM 실행에 필요한 VRAM 계산하는 법

가중치는 파라미터 수에 정밀도별 바이트를 곱하면 나와요. 여기에 KV 캐시와 런타임 여유 1~3GB를 더하면 필요한 VRAM이에요.

업데이트
읽는 시간
약 5분

필요한 VRAM은 세 가지를 더한 값이에요

추론에는 모델 가중치, KV 캐시, 런타임 여유가 필요해요. 가장 큰 몫인 가중치는 파라미터 수에 아래 바이트 수를 곱하면 나와요.

정밀도별 파라미터 하나당 크기
정밀도바이트1B 파라미터당
FP324약 4 GB
FP16 · BF162약 2 GB
INT8 · FP81약 1 GB
4비트 (GPTQ · AWQ · GGUF Q4)약 0.5~0.6약 0.6 GB

4비트는 이론상 0.5바이트지만, 양자화에 필요한 부가 정보와 16비트로 남는 레이어가 있어서 0.6바이트로 잡는 게 안전해요.

모델 크기별 가중치 메모리 (추정)
모델 크기16비트8비트4비트
7B약 14 GB약 7 GB약 4.2 GB
8B약 16 GB약 8 GB약 4.8 GB
14B약 28 GB약 14 GB약 8.4 GB
32B약 64 GB약 32 GB약 19 GB
70B약 140 GB약 70 GB약 42 GB

KV 캐시는 컨텍스트 길이에 비례해 늘어나요

모델은 앞 토큰의 Key와 Value를 저장해 두고 다음 토큰을 만들 때 다시 써요. 토큰 하나당 크기는 모델 구조로 정해져요.

text
토큰당 KV 캐시 = 2 × 레이어 수 × KV 헤드 수 × 헤드 차원 × 바이트
앞의 2는 Key와 Value 두 개를 뜻해요.

Llama 3.1 8B는 레이어 32개, KV 헤드 8개, 헤드 차원 128이에요. 16비트면 토큰당 2 × 32 × 8 × 128 × 2 = 131,072바이트(약 0.13MB)라서 8K 토큰이면 약 1.1GB, 128K 토큰이면 약 17GB예요. 동시 요청이 있으면 요청 수만큼 곱해요.

런타임 여유는 1~3GB를 잡아 두세요

CUDA 컨텍스트만 수백 MB를 쓰고, 프레임워크에 따라 중간 계산 값과 메모리 풀이 더 필요해요. 큰 모델이면 가중치의 5% 정도로 잡으세요.

vLLM은 시작할 때 gpu_memory_utilization 비율(기본 약 90%)만큼 메모리를 미리 잡고 남는 공간을 KV 캐시로 써요. nvidia-smi에 90% 가까이 차 보여도 정상이에요.

파인튜닝은 학습 방식에 따라 크게 달라요

학습에는 그래디언트와 옵티마이저 상태도 메모리에 올려야 해요. Adam으로 전체 학습을 하면 혼합 정밀도에서도 파라미터 하나당 약 16바이트가 들어요.

  • 전체 파인튜닝: 모든 파라미터를 학습해요. 8B 모델도 GPU 여러 장이 필요해요.
  • LoRA: 기본 가중치는 16비트로 고정하고, 전체의 1%도 안 되는 작은 어댑터만 학습해요.
  • QLoRA: 기본 가중치를 4비트로 불러온 뒤 LoRA 어댑터를 학습해요. 메모리가 가장 적게 들어요.
학습 방식별 필요 VRAM (시퀀스 2048, 배치 1, 그래디언트 체크포인팅 기준 추정)
모델QLoRALoRA (16비트)전체 파인튜닝
8B약 8 GB약 20 GB약 130 GB 이상
32B약 24 GB약 71 GB약 530 GB 이상
70B약 47 GB약 150 GB약 1.1 TB 이상

VRAM별로 올릴 수 있는 모델 크기

VRAM별로 여유 있게 다룰 수 있는 모델 크기 (컨텍스트 4K, 배치 1, VRAM의 85% 기준 추정)
VRAM16비트 추론4비트 추론QLoRA
8 GB약 2B약 8B약 5B
16 GB약 5B약 15B약 15B
20 GB약 7B약 20B약 20B
24 GB약 8B약 25B약 25B
32 GB약 10B약 35B약 35B
80 GB약 30B약 100B약 100B

VRAM을 한계까지 채우면 조금 더 큰 모델도 올라가요. Shelf에서는 지금 20GB(GA102)와 24GB(RTX 3090)를 쓸 수 있고, 8GB, 16GB, 32GB, 80GB GPU는 준비 중이에요. 모델과 컨텍스트 길이를 직접 넣어 보려면 LLM VRAM 계산기를 쓰세요.

메모리가 모자랄 때 줄이는 순서

  1. 양자화 정밀도를 낮춰요

    16비트를 8비트나 4비트로 바꾸면 가중치 메모리가 절반에서 3분의 1 수준으로 줄어요.

  2. 컨텍스트 길이와 동시 요청 수를 줄여요

    KV 캐시가 바로 줄어요. vLLM은 --max-model-len, Ollama는 num_ctx로 최대 컨텍스트를 정해요.

  3. KV 캐시를 8비트로 저장해요

    vLLM은 --kv-cache-dtype fp8로 켜요. 컨텍스트가 길수록 효과가 커요.

  4. 학습이라면 배치를 줄이고 체크포인팅을 켜요

    줄인 배치는 그래디언트 누적으로 보완하고, 그래디언트 체크포인팅으로 활성화 메모리를 줄여요.

  5. 그래도 부족하면 더 큰 GPU로 옮겨요

    설정을 계속 줄이면 품질이나 속도가 먼저 떨어져요. 데이터를 볼륨에 두면 더 큰 GPU 서버에 연결해 이어서 작업할 수 있어요.

이미 오류가 났다면 CUDA out of memory 오류 해결하기를 보세요.

자주 묻는 질문

7B 모델은 VRAM이 몇 GB면 돌릴 수 있나요?

16비트 그대로면 가중치만 약 14GB라서 20GB 이상이 편해요. Shelf에서는 GA102 20GB나 RTX 3090 24GB가 맞아요. 4비트로 양자화하면 8GB에서도 짧은 컨텍스트로 추론할 수 있어요.

70B 모델을 GPU 한 장으로 돌릴 수 있나요?

4비트로 양자화하면 가중치가 약 42GB라서 80GB GPU 한 장에 올라가요. 24GB나 32GB 한 장으로는 4비트로도 부족해요. Shelf의 A100 80GB는 준비 중이에요.

계산 결과와 실제 사용량이 다른 이유는 무엇인가요?

프레임워크마다 메모리 확보 방식, 어텐션 구현, 양자화 형식이 달라서 20% 안팎 차이가 날 수 있어요. 계산값은 GPU를 고르는 출발점으로 쓰고, 실제 사용량은 nvidia-smi로 확인하세요.

GPU 서버가 필요할 때

필요한 GPU와 개발 환경을 골라 시간 단위로 시작해요.