C.W.K.
Stream
Lesson 03 of 12 · published

메모리 산수 — 파라미터당 바이트

~10 min · memory, deployment

Level 0Token
0 XP0/94 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

메모리는 거의 모든 LLM 배포 결정의 구속 제약. 계산은 단순한데 모든 조각을 추적해야 해.

총 메모리 ≈ params × bytes_per_param + KV cache + activation 버퍼 + 프레임워크 오버헤드
포맷params당 바이트7B 모델 가중치70B 모델 가중치
FP32428 GB280 GB
FP16 / BF16214 GB140 GB
INT8 / Q817 GB70 GB
INT4 / Q40.53.5 GB35 GB

이건 가중치만. 추가:

  • KV cache — 컨텍스트 길이 × n_layers × n_kv_heads × d_head × precision에 비례. Llama 3.3 70B 128K 컨텍스트 FP16: ~32 GB.
  • 추론 중 활성 — 보통 몇 GB, 학습 중엔 훨씬 큼.
  • 프레임워크 오버헤드 — CUDA 드라이버, 할당자, optimizer state. 종종 총량의 5-15%.

H100 80 GB가 70B INT4 모델(35 GB) + ~32 GB KV cache 여유 + 오버헤드 수용 가능. FP16은 H100 최소 2장 필요. 이 단순 산수가 배포의 거의 모든 "모델 X 써야 하나?" 대화를 형성.

Code

Honest memory budget for an inference deployment·python
def deployment_memory_gb(
    params_b, dtype_bytes, n_layers, n_kv_heads, d_head,
    max_context, batch_size=1, overhead_pct=0.10,
):
    weights = params_b * 1e9 * dtype_bytes / 1e9
    kv_cache = (
        2 * batch_size * max_context * n_layers
        * n_kv_heads * d_head * dtype_bytes / 1e9
    )
    activations = 2.0   # rough; depends on framework
    base = weights + kv_cache + activations
    return base * (1 + overhead_pct)

# Llama 3.3 70B, INT4 weights, FP16 KV cache, 128K context, batch=1
mem = deployment_memory_gb(70, 0.5, 80, 8, 128, 128_000, batch_size=1)
print(f"~{mem:.0f} GB")    # ≈ 70 GB total — fits on a single H100

External links

Exercise

서빙 고려할 모델 하나 골라서 총 배포 메모리 계산 — (a) batch=1, 컨텍스트 8K, FP16, (b) batch=1, 컨텍스트 128K, FP16, (c) batch=8, 컨텍스트 8K, INT4, (d) batch=8, 컨텍스트 128K, INT4. 본인 접근 가능한 GPU에 실제로 들어가는 구성은?

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.