국내 기업들을 방문해서 AI 인프라 관련 분들을 만나면, 가장 많이 물어보는 질문들 중 하나가 LLM 추론 시 메모리 크기는 얼마나 되는 것인 가이다. 아무래도내부에 가진 서버를 그대로 사용할 것인가? 아니면 신규로 서버를 구매할 것인가?에 대해 LLM을 동작 시킬 때 총 메모리 용량이 얼마나 되는 지 궁금해서 일 것이다.
예를 들어, meta-llama/Meta-Llama-3-8B-Instruct에서 훈련(Training) 또는 추론(Inference)할 때, Tensor Type으로 BF16 이면 메모리 크기는 얼마이며, 몇 장의 GPU를 사용해야 하는가에 대해 묻는다면, 어떻게 답변을 해야 하는지 알아 볼 것이다
1. Meta-Llama-3-8B-Instruct에서 훈련 시 메모리 크기 및 GPU 장수는?
-
메모리 사용량 개략적 계산 = (모델 파라미터 * 2) + 파라미터의 2 - 3배
- BF16(bfloat16)은 FP16과 마찬가지로 16비트 정밀도를 사용하므로, 기본적으로 모델 파라미터*자체가 차지하는 메모리는 FP16 대비 큰 차이가 없음.
- AdamW 와 같은 옵티마이저 상태나 그래디언트, 중간 활성화 (activations) 등으로 인해 실제 요구되는 메모리는 2~3배 가량 될 수 있음.
- 계산식: (16 * 2) + (16GB * 2 or 16GB * 3) = 32GB + (32 or 48 )GB = 64 or 80 GB
- BF16 타입으로 풀 파인튜닝(Full fine-tuning)시
- 단일 GPU으로는 최소 40GB 이상, 안정적인 배치 크기 확보를 위해서는 A100/H100 80GB급이 1장이 권장
- 80GB H100 1장으로 분산 학습을 활용해도 충분히 학습이 가능함.
2. Meta-Llama-3-8B-Instruct에서 추론 시 메모리 크기 및 GPU 장수는?
-
메모리 사용량
- 모델 파라미터
- 매개변수(Parameter) 수: 약 80억(8B)
- BF16(2바이트)로 저장 시: 8 Billion × 2 Bytes≈16 GB
- 추가 메모리(오버헤드)
- 추론 시 활성화(Activation)와 캐시(cache) 등이 필요하지만, 학습보다는 훨씬 적은 양의 메모리를 사용함.
- 프롬프트 길이(문맥 길이), 배치 크기에 따라 달라지나, 일반적으로 수GB 정도의 여유가 필요함. 보통 안전하게 20GB 전후의 GPU 메모리가 권장.
- AdamW 와 같은 옵티마이저 상태나 그래디언트, 중간 활성화 (activations) 등으로 인해 실제 요구되는 메모리는 2~3배 가량 될 수 있음.
- 단일 GPU에서 BF16 추론을 원활하게 수행하려면, 대략 20GB 이상의 VRAM을 갖춘 GPU가 필요함.
- 예: 24GB급(예: RTX 3090, RTX 4090, A6000) 이상이면 단일 GPU로 충분히 가능
- 만약 16GB급 GPU에서 시도한다면,
- 컨텍스트 길이나 동시 추론(batch) 크기를 작게 조정하거나,
- 8비트/4비트 양자화(quantization) 같은 기법을 추가로 활용해야 할 수 있음.
-
권장 GPU 수
- 1장으로도 충분히 추론이 가능하지만,
- 여러 배치 요청이나 긴 시퀀스, 다양한 파이프라인 처리를 동시에 해야 한다면, 여러 장의 GPU를 사용하는 멀티 GPU 환경(예: 데이터 병렬)을 구성할 수 있음.
-
결론
- 보통은 8B급 모델에서는 성능(처리 속도)을 높이기 위해서 여러 장을 쓰기보다는 단일 고용량 GPU(예: 24GB+) 한 장을 사용하는 경우가 많음.
3. 필요 구성 요소
-
BF16 지원 GPU
- 모델 파라미터
- Ampere 아키텍처(A100, RTX 3090, RTX 4090 등) 또는 Hopper(H100), Ada Lovelace(RTX 6000 Ada) 계열 이상 권장
- 구형 GPU(V100, T4 등)는 BF16 지원이 제한적이거나 성능이 떨어질 수 있음
-
추론 프레임워크 및 라이브러리
- PyTorch(최신 버전), Transformers(Hugging Face)
- 모델 로딩 시 torch.bfloat16 또는 auto_dtype="bf16" 형태로 설정하여 BF16 추론 활성화
-
소프트웨어/환경 설정
- CUDA와 PyTorch 버전이 해당 GPU와 호환되어야 함
- BF16 연산을 지원하도록 프레임워크 및 드라이버 세팅 필요
- 가능하다면 Docker 또는 Conda 환경을 통해 의존성 버전 고정 및 재현성 확보
-
모델 파일
- meta-llama/Meta-Llama-3-8B-Instruct 모델 가중치(Weights)
- 모델 아키텍처를 불러오고 BF16 모드로 변환할 수 있는 스크립트(Transformers 예시 등)
4. 정리
- 메모리: BF16 상태에서 모델 자체가 약 16GB, 추가 오버헤드 감안 시 20GB 이상 권장
- GPU 수: 단일 24GB급 GPU 1장으로도 추론이 가능함
-
필요 요소:
- BF16 연산이 가능한 Ampere급 이상 GPU
- PyTorch, Transformers 등 BF16 지원 라이브러리
- CUDA/드라이버 호환 환경
- meta-llama/Meta-Llama-3-8B-Instruct 모델 가중치 및 로딩 스크립트