ChatGPT는 어떻게 7억 명을 서빙하는데 나는 GPT-4 하나도 못 돌리나?
Ask HN: How can ChatGPT serve 700M users when I can't run one GPT-4 locally?
TL;DR Highlight
로컬에서 GPT-4가 안 돌아가는 이유와 OpenAI 같은 대형 서비스가 수억 명을 감당하는 인프라 원리를 설명하는 HN 토론.
Who Should Read
LLM을 자체 서버에 올리거나 로컬에서 돌려보려다 막힌 개발자. 온프레미스 vs 클라우드 API 선택을 고민 중인 ML 엔지니어나 스타트업 개발자.
Core Mechanics
- GPT-4는 추정 1.7조 파라미터 규모로, FP16 기준 단순 저장에만 3.4TB VRAM 필요 — 개인 GPU로는 물리적으로 불가
- OpenAI는 A100/H100 수천 장을 텐서 병렬(Tensor Parallelism) + 파이프라인 병렬로 모델을 쪼개 분산 실행
- 배치 처리(Batching)가 핵심 — 수천 명의 요청을 묶어서 한 번에 처리하면 GPU 활용률이 90%+ 유지
- KV Cache(이전 토큰 계산 결과 재활용)로 반복 연산을 제거해 처리량을 수배 이상 향상
- 규모의 경제 — GPU 수천 장을 풀가동하면 장당 비용이 개인 임대보다 수십 배 저렴해짐
- 로컬 대안으로는 Llama-3.1-8B, Mistral-7B 같은 소형 모델을 llama.cpp로 CPU에서도 구동 가능
Evidence
- GPT-4 MoE 구조 기준 활성 파라미터 ~280B, 전체 ~1.7T 추정 — 단일 H100(80GB) 1장으론 로드 불가
- vLLM 기준 A100 8장 클러스터에서 Llama-2-70B 처리량 약 2,000 tokens/sec (단일 요청 대비 10배 이상)
- OpenAI 인프라 비용 추정치 약 $700K/일 (2023년 기준) — 규모가 있어야 단가가 맞음
How to Apply
- GPT-4급 성능이 필요하면 API를 써라 — 자체 호스팅은 비용·운영 모두 비효율적
- 오픈소스 모델(Llama-3.1-8B, Mistral-7B)이면 llama.cpp + Ollama로 로컬 or 소형 GPU 서버에서 직접 서빙 가능
- 프로덕션 규모로 오픈소스 모델 서빙 시 vLLM + continuous batching 조합으로 처리량을 최대화하라
Code Example
snippet
# Ollama로 로컬에서 Llama-3.1-8B 바로 실행
# 설치: https://ollama.com
# 모델 다운 및 실행
ollama run llama3.1:8b
# API로 호출
curl http://localhost:11434/api/generate -d '{
"model": "llama3.1:8b",
"prompt": "Hello, how are you?",
"stream": false
}'
# --- vLLM으로 프로덕션 서빙 (GPU 서버) ---
pip install vllm
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-8B-Instruct \
--tensor-parallel-size 2 # GPU 2장 병렬Terminology
Tensor Parallelism모델을 레이어 안에서 행렬 단위로 잘라 여러 GPU에 나눠 동시에 계산하는 방법. 피자를 조각 내서 여러 사람이 동시에 먹는 것과 같음.
KV Cache이전에 계산한 토큰의 결과를 메모리에 저장해 재계산 안 하는 기법. 대화할 때 앞 내용을 기억해두고 다시 읽지 않는 것과 같음.
Continuous Batching요청이 들어오는 대로 실시간으로 묶어서 처리하는 방식. 버스가 정류장마다 빈자리에 승객을 채우며 달리는 것과 유사.
MoE (Mixture of Experts)모델 안에 여러 '전문가' 서브네트워크를 두고, 입력에 따라 일부만 활성화하는 구조. 전체를 다 쓰지 않아 효율적.
vLLMLLM 서빙을 위한 오픈소스 추론 엔진. PagedAttention 등 최적화 기법으로 처리량이 매우 높음.
llama.cppC/C++로 구현된 LLM 추론 라이브러리. GPU 없이 CPU나 Apple Silicon에서도 오픈소스 모델을 돌릴 수 있게 해줌.
FP1616비트 부동소수점 형식. 32비트(FP32) 대비 메모리를 절반만 씀. 모델 저장·실행 시 메모리 절약에 핵심.