국내 기업들을 방문해서 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 모델 가중치 및 로딩 스크립트