LLM 실무 하드웨어 용어 정리
문서 목적
LLM을 실무에서 서빙하거나 파인튜닝할 때 반복적으로 마주치는 하드웨어 용어를 정리한다.
구매 결정, 리소스 산정, 병목 분석, 학습 레시피 선택의 직관을 잡기 위한 레퍼런스.
핵심 한 줄 요약
LLM 학습은 compute-bound, 추론(decode)은 memory-bound. 그래서 실무 체감 속도는 FLOPS보다 메모리 대역폭이 지배한다.
1. 메모리 계층과 대역폭 (Memory Hierarchy & Bandwidth)
왜 대역폭이 중요한가
LLM decode 단계에서는 매 토큰마다 모델 전체 가중치를 메모리에서 읽어 MatMul을 수행한다. 따라서 최대 토큰 생성 속도는 대략:
- 예: Llama-3-70B를 FP16(140GB)으로 H100 SXM(3.35TB/s)에서 돌리면 이론 상한 ≈ 24 tok/s (단일 배치, KV-cache 제외).
- 즉, FLOPS가 아니라 GB/s가 추론 속도의 상한을 결정한다.
메모리 종류별 대역폭 (대략치)
| 메모리 | 대역폭 | 주 용도 | 비고 |
|---|---|---|---|
| HBM3e | 4.8 TB/s | H200, B200 | 2024~ 데이터센터 GPU |
| HBM3 | 3.35 TB/s | H100 SXM, MI300X | 현행 DC 표준 |
| HBM2e | 2 TB/s | A100 80GB | 2020 세대 |
| GDDR7 | 1.7 TB/s | RTX 5090 | 2025 소비자 플래그십 |
| GDDR6X | 1 TB/s | RTX 4090 | 24GB, 소비자 최상위 |
| GDDR6 | 700 GB/s | RTX 4070/4080급 | |
| LPDDR5X (Unified) | 300–800 GB/s | Apple M3/M4 Ultra | 용량-대역폭 동시 확보 |
| DDR5 (시스템 RAM) | 70–90 GB/s | 서버/워크스테이션 CPU RAM | 듀얼채널 기준 |
| DDR4 (시스템 RAM) | 25–50 GB/s | 구세대 플랫폼 | |
| NVMe Gen5 SSD | 14 GB/s | 스토리지 | 데이터 로딩 병목 지점 |
| NVMe Gen4 SSD | 7 GB/s | 스토리지 |
VRAM vs CPU RAM의 진짜 차이
단순히 “GPU 메모리 vs 시스템 메모리”가 아니다. 대역폭이 30배 이상 차이나므로, 파라미터를 CPU로 offload하면 decode tok/s가 같은 비율로 떨어진다.
→device_map="auto"로 CPU offload가 걸리는 순간, 30–50배 느려지는 것이 정상이다.
2. GPU 상호연결 (Interconnect)
| 인터커넥트 | 대역폭 (단방향) | 용도 |
|---|---|---|
| NVLink 5 (B200) | 900 GB/s per GPU | GPU↔GPU, 텐서 병렬 |
| NVLink 4 (H100) | 450 GB/s per GPU (bi-dir 900) | GPU↔GPU |
| NVSwitch | 모든 GPU fully-connected | 8-GPU 노드 내부 |
| PCIe Gen5 x16 | 64 GB/s | CPU↔GPU, 비NVLink GPU간 |
| PCIe Gen4 x16 | 32 GB/s | 기존 서버/워크스테이션 |
| InfiniBand NDR | 400 Gbps (50 GB/s) | 노드간 (멀티노드 학습) |
| Ethernet 100/200/400G | 12.5–50 GB/s | 일반 데이터센터 |
PCIe (Peripheral Component Interconnect Express)란?
정의: CPU와 주변기기(GPU, NVMe SSD, NIC 등)를 연결하는 범용 고속 시리얼 버스 표준. 마더보드의 긴 슬롯이 곧 PCIe. GPU의 “기본 통로”지만 NVLink가 있으면 GPU↔GPU는 우회한다.
세대(Generation)와 lane 구조:
- PCIe는 세대마다 per-lane 대역폭이 2배로 증가. Gen3 → Gen4 → Gen5 → Gen6.
- 슬롯 크기는 lane 수로 표기:
x1, x4, x8, x16. GPU는 거의 모두 x16.- 총 대역폭 =
per-lane × lane 수.
세대 per-lane (편방향) x16 슬롯 (편방향) x16 양방향 현역성 Gen3 1 GB/s 16 GB/s 32 GB/s 레거시 서버 Gen4 2 GB/s 32 GB/s 64 GB/s 현행 주류 Gen5 4 GB/s 64 GB/s 128 GB/s H100/B200/RTX 5090 Gen6 8 GB/s 128 GB/s 256 GB/s 2025~ 데이터센터 표기 주의: NVIDIA 스펙시트는 보통 양방향(bi-directional) 으로 기재 (예: “PCIe Gen5 x16 128GB/s”), NVLink 표기와 혼동되기 쉬움. 실효 단방향은 절반.
CPU가 lane을 “발행”한다:
- PCIe lane 수는 CPU 스펙에서 고정. 예: AMD EPYC Genoa = 128 lanes, Intel Sapphire Rapids = 80 lanes, 소비자 Ryzen 9 = 28 lanes.
- 다중 GPU 워크스테이션에서 GPU가
x16 → x8로 떨어지는 이유가 이것 (lane 부족).- GPU 2개 + NVMe 2개 = 보통
x8 + x8 + x4 + x4로 분배됨.LLM 실무에서의 역할:
- CPU ↔ GPU: 데이터 로딩, 체크포인트 I/O, activation offload. 여기가 병목이면 DataLoader에서 GPU idle 발생.
- GPU ↔ GPU (NVLink 없을 때): DDP all-reduce를 PCIe로 타야 함 → NVLink 대비 ~10–30배 느림. TP는 사실상 불가.
- GPU ↔ NVMe (GPUDirect Storage): ZeRO-Infinity offload, dataset streaming.
실효 대역폭은 스펙의 70–85%: 프로토콜 오버헤드(TLP 헤더, 128b/130b 인코딩), re-timer, 메인보드 신호 품질로 실측은 Gen5 x16에서 50–55GB/s가 현실적.
nvidia-smi topo -m으로 현재 GPU간 연결 경로 확인:NV4(NVLink 4링크),PIX(PCIe bridge 경유),SYS(CPU 넘어감) 순으로 느려짐.
2.1 NVLink / NVSwitch 심화
- NVLink: NVIDIA GPU 전용 point-to-point 고속 링크. PCIe를 우회해 GPU↔GPU 직결 통신 수행.
- H100 SXM: NVLink 4 lane 18개 묶음 → 900 GB/s bi-directional (편방향 450).
- B200: NVLink 5 → 1.8 TB/s bi-directional.
- PCIe Gen5(64GB/s) 대비 약 10–30배 빠름. 이 배수가 TP(Tensor Parallel) 가능 여부를 가른다.
- NVSwitch: 8-GPU 노드 내부에서 모든 GPU를 fully-connected로 묶는 스위치 칩. DGX H100/H200, HGX 보드에 탑재.
- 결과적으로 한 노드 안에서는 어떤 GPU 쌍이든 동일 full-bandwidth로 통신. TP=8 구성의 전제.
- NVLink Switch System (NVL72): Blackwell 세대에서 72개 GPU를 단일 NVLink 도메인으로 묶음. 사실상 “한 노드”가 72 GPU.
- NVLink의 한계: 노드 경계를 넘지 못한다. 멀티노드는 반드시 InfiniBand/Ethernet + RDMA/GPUDirect를 탄다.
2.2 Collective Communication Primitives (NCCL) - ❓
분산 학습의 모든 통신은 몇 가지 집합 통신(collective) 패턴으로 환원된다. 각 병렬화 전략이 어떤 collective를 얼마나 자주 호출하느냐가 인터커넥트 요구사항을 결정한다.
| 프리미티브 | 동작 | 등장 위치 |
|---|---|---|
| All-Reduce | 모든 rank 값을 합산 후 모두에 배포 | DDP grad sync, TP 레이어 경계 |
| All-Gather | 각 rank의 shard를 모두 모음 | FSDP/ZeRO-3 param fetch |
| Reduce-Scatter | 합산 결과를 shard로 분배 | FSDP grad reduce |
| All-to-All | 각 rank가 모두에게 개별 데이터 송신 | MoE expert dispatch, SP |
| Broadcast / Reduce | 1→N / N→1 | 체크포인트 로드, scalar 수집 |
| Point-to-Point (P2P) | 지정한 rank 쌍 간 송수신 | Pipeline Parallel stage 전달 |
- NCCL은 위 연산을 ring / tree / double-binary-tree 알고리즘으로 구현. 링 알고리즘의 한 step 시간은
tensor_size / bandwidth에 비례 → 대역폭이 곧 학습 스텝 시간.
All-Reduce란?
정의: N개 rank가 각자 가진 같은 shape의 텐서를 elementwise 합(혹은 평균) 으로 reduce한 뒤, 그 결과를 모든 rank에 동일하게 배포하는 집합 연산.
개념적으로는
Reduce(N→1로 모음) +Broadcast(1→N으로 뿌림) 를 한 번에 처리한 것이지만, 실제 구현은 훨씬 똑똑하다.DDP에서의 역할: 각 GPU가 자기 micro-batch로 gradient를 계산한 뒤, all-reduce로 모든 GPU의 grad를 더해 평균 내어 모두가 동일한 gradient를 갖게 만든다. 이래야 다음 step에서 파라미터가 일치.
Ring All-Reduce 알고리즘 (NCCL 기본):
- 텐서를 N조각으로 나눔.
- Reduce-Scatter 단계 (N−1 step): 각 rank가 인접 rank로 조각을 흘려보내며 합산 → 결국 rank k는 “k번째 조각의 전체 합”만 갖는다.
- All-Gather 단계 (N−1 step): 그 조각들을 다시 링을 돌려 모두가 전체를 갖도록 공유.
통신량:
2 × (N−1)/N × tensor_size— N이 커져도 GPU당 통신량은 거의 2배로 수렴. 이게 ring all-reduce가 대규모 학습에서 표준이 된 이유(= 스케일링이 좋음).대역폭 병목 식:
T ≈ 2 × tensor_size / bandwidth. 예) 70B 모델 FP16 grad(140GB)를 NVLink4(450GB/s)로 all-reduce → 약 0.62초. PCIe Gen4(32GB/s)면 8.75초 → DP step 시간을 모조리 잡아먹음.
2.3 병렬화 전략과 인터커넥트 요구
관점 차이
여기서는 “어떤 인터커넥트가 있어야 각 병렬화가 실전에서 동작하는가” 에 집중한다. 메모리 샤딩/학습 footprint 관점은 §6 참조.
Data Parallel (DP / DDP)
- 아이디어: 모든 GPU가 모델 전체를 복제하고, 배치를 쪼개 각자 forward/backward. step 끝에 gradient를 all-reduce로 동기화.
- 통신량: step당 1회,
2 × params바이트(FP16 grad).- 7B 모델이면 grad all-reduce 14GB. PCIe Gen4(32GB/s)로 ~0.4초. → 참을 만함.
- 한계: 모델이 단일 GPU VRAM을 넘으면 불가능. LLM 70B는 DP만으로는 안 된다.
- 인터커넥트: PCIe로도 동작. 멀티노드는 IB 필요.
Summary
DP = gradient accumulation을 병렬화 버전으로 바꾼 거.
Tensor Parallel (TP, Megatron-style)
- 아이디어: 한 레이어의 weight 행렬을 column/row로 쪼개 여러 GPU에 분산. QKV projection, FFN의 두 Linear를 각각 “Column-parallel → Row-parallel”로 묶어 중간에 activation을 나눠 갖는다.
- 통신 패턴: 매 transformer block마다 all-reduce 2회 (attention 후, FFN 후). 시퀀스 길이 × hidden × batch 만큼의 activation을 계속 주고받음.
- Llama-3-70B, hidden=8192, seq=4096, batch=1, FP16 → 레이어당 ~67MB × 80 layers × 2 = ~10GB 통신 / forward 1회.
- 이걸 레이어 계산 시간 안에 끝내야 하므로 TB/s 급 대역폭 필요.
- 인터커넥트: NVLink 필수. PCIe Gen5로도 10배 이상 느려짐. TP=8이 DGX 한 노드 내 상한(= NVSwitch 연결 범위).
- 주 구현체: Megatron-LM, NeMo, TransformerEngine.
Pipeline Parallel (PP)
- 아이디어: 레이어를 stage 단위로 쪼개 서로 다른 GPU에 배치 (예: 레이어 1–20은 GPU0, 21–40은 GPU1). 입력 배치를 micro-batch로 더 잘게 나눠 각 stage에 파이프라이닝.
- 통신 패턴: stage 경계에서 activation만 P2P 전달 (forward) / gradient 전달 (backward). all-reduce 없음.
- 통신량 매우 적음 (TP의 1/10~1/100 수준).
- 주 비용: pipeline bubble (첫 micro-batch이 끝까지 가기 전/마지막 batch가 끝나기 전 idle 구간). 1F1B, Interleaved 1F1B (Megatron), Chimera, Zero-Bubble 등으로 완화.
- 인터커넥트: PCIe로도 실용적. 노드 간 PP를 IB로 타는 구성도 흔함.
- 전형적 조합: TP는 노드 내, PP는 노드 간.
FSDP (Fully Sharded Data Parallel) / ZeRO-3
- 아이디어: DP처럼 동작하되, 파라미터·gradient·optimizer state를 GPU들 사이에 shard해서 VRAM 절약.
- 레이어가 필요해질 때 all-gather로 파라미터를 모아 계산 → 계산 후 즉시 해제 (overlap 가능).
- backward에서 gradient는 reduce-scatter로 자기 shard에만 누적.
- 통신량: 전통 DP의 약 1.5배 (all-gather + reduce-scatter). 하지만 레이어 단위로 쪼개져 계산과 overlap 가능.
- 인터커넥트: NVLink 권장. PCIe에서도 동작하지만 overlap 여유가 줄어 throughput 30–50% 손해. 멀티노드 FSDP는 IB가 사실상 필수.
- 주 구현체:
torch.distributed.fsdp(PyTorch 2.x), DeepSpeed ZeRO-3. - FSDP2 (PyTorch 2.4+): per-parameter sharding,
torch.compile/TP와 조합 개선.
Sequence Parallel (SP)
- TP와 짝지어 사용. TP가 hidden 차원을 나눌 때, LayerNorm/Dropout 등 non-TP 영역은 sequence 차원으로 쪼개 activation 메모리를 추가 절감. 통신: all-gather + reduce-scatter (TP의 all-reduce를 쪼갠 형태).
Expert Parallel (EP) — MoE
- MoE 모델에서 expert들을 GPU간 분산. 라우팅된 토큰을 해당 expert GPU로 all-to-all로 보냄.
- 통신 패턴: all-to-all이 지배적. bandwidth-heavy. DeepSpeed-MoE, Megatron-Core, MegaBlocks가 최적화.
3D Parallelism
- 실제 대규모 학습은 TP × PP × DP(+ZeRO) 조합.
- 예: Llama-3 405B 학습 — TP=8 (노드 내 NVLink), PP=16 (노드 간 IB), DP=128 (replica).
- 규칙: 통신 다발성 높은 축을 빠른 인터커넥트에 매핑. TP→NVLink, PP/DP→IB/Ethernet.
2.4 한 장 요약 (인터커넥트 ↔ 병렬화 매핑)
| 병렬화 | 주요 collective | 통신 빈도 | 최소 요구 | 권장 |
|---|---|---|---|---|
| DP / DDP | All-Reduce (grad) | step당 1회 | PCIe Gen4 | NVLink + IB |
| TP (Megatron) | All-Reduce (activation) | 레이어당 2회 | NVLink | NVSwitch |
| PP | P2P (activation) | stage 경계 | PCIe Gen4 | IB (노드간) |
| FSDP / ZeRO-3 | All-Gather + Reduce-Scatter | 레이어당 2회 | PCIe Gen5 | NVLink |
| SP | All-Gather + Reduce-Scatter | 레이어당 2회 | NVLink | NVSwitch |
| EP (MoE) | All-to-All | 레이어당 2회 | NVLink | NVSwitch + IB |
의사결정 플로우
- 모델이 단일 GPU에 들어가나? → 예: DDP로 충분. / 아니오: 다음으로.
- NVLink 노드를 갖고 있나? → 예: TP=#GPU로 묶고 남는 축은 FSDP/PP. / 아니오: FSDP만, 혹은 PP.
- 노드가 여러 개인가? → 예: 노드 내 TP, 노드 간 PP 또는 FSDP. IB 필수.
- MoE인가? → EP 축 추가, all-to-all 대역폭 확보.
3. 주요 GPU 스펙 비교 (LLM 실무 기준)
| GPU | VRAM | 대역폭 | FP16 TFLOPS | FP8 TFLOPS | TDP | 비고 |
|---|---|---|---|---|---|---|
| B200 | 192GB HBM3e | 8 TB/s | 2,250 | 4,500 | 1000W | Blackwell, 2025 |
| H200 | 141GB HBM3e | 4.8 TB/s | 989 | 1,979 | 700W | H100 메모리 확장판 |
| H100 SXM | 80GB HBM3 | 3.35 TB/s | 989 | 1,979 | 700W | 현행 DC 표준 |
| H100 PCIe | 80GB HBM3 | 2 TB/s | 756 | 1,513 | 350W | NVLink 제한적 |
| A100 80GB | 80GB HBM2e | 2 TB/s | 312 | — | 400W | FP8 없음 |
| L40S | 48GB GDDR6 | 864 GB/s | 362 | 733 | 350W | 추론/소형 학습 |
| RTX 6000 Ada | 48GB GDDR6 | 960 GB/s | 362 | 733 | 300W | 워크스테이션 |
| RTX 5090 | 32GB GDDR7 | 1.79 TB/s | 419 | 838 | 575W | 2025 소비자 최상위 |
| RTX 4090 | 24GB GDDR6X | 1 TB/s | 330 | 660 | 450W | 24GB 제약이 실무 상한 |
| MI300X (AMD) | 192GB HBM3 | 5.3 TB/s | 1,307 | 2,614 | 750W | ROCm, 192GB가 강점 |
| Apple M3 Ultra | 192GB unified | 800 GB/s | 28 (GPU) | — | 200W | MLX, 대형 모델 로컬 실험 |
스펙 시트의 FLOPS는 sparse/이론치인 경우가 많다
NVIDIA는 “w/ sparsity” 값을 대표 수치로 내세우는데, 실제 dense LLM 학습은 그 절반으로 봐야 한다.
4. 정밀도 (Precision) & 양자화 (Quantization)
학습/추론에 쓰이는 수치 포맷
| 포맷 | 비트 | 지수/가수 | 주 용도 | 비고 |
|---|---|---|---|---|
| FP32 | 32 | 8/23 | 레거시 학습 | 현재는 거의 사용 안 함 |
| TF32 | 19 (하드웨어) | 8/10 | A100+ 기본 MatMul | FP32 호환 I/O |
| FP16 | 16 | 5/10 | 혼합정밀도 학습/추론 | overflow 위험 |
| BF16 | 16 | 8/7 | 현행 학습 표준 | FP32와 지수 범위 동일 |
| FP8 (E4M3/E5M2) | 8 | 4/3 or 5/2 | H100+ 학습/추론 | 2023 이후 확산 |
| INT8 | 8 | — | 추론 양자화 | LLM.int8, SmoothQuant |
| INT4 | 4 | — | 추론 양자화 | GPTQ, AWQ, GGUF Q4 |
| NF4 | 4 | normal-float | QLoRA | bitsandbytes 4-bit |
메모리 footprint 규칙 (경험식)
- 추론 모델 가중치:
params × bytes/param- 7B FP16 = 14GB / 7B INT4 = ~4GB
- 학습 메모리 (AdamW, FP16 mixed precision):
~16–20 × params (bytes)- 7B 모델 full fine-tune = ~120–140GB VRAM 필요 → 단일 GPU 불가
- 구성: params(2) + grads(2) + optimizer m,v(각 4) + activations
- LoRA: base 모델(FP16) + 작은 adapter만 학습 → 7B가 단일 24GB에서 학습 가능
- QLoRA: base 4-bit + LoRA FP16 → 7B가 12–16GB에서 학습 가능
KV Cache 크기
- Llama-3-70B, batch=1, seq=8192, FP16 → 약 2.5GB. seq=128K가 되면 40GB 소모 → VRAM의 절반.
- 그래서 long-context serving은 PagedAttention(vLLM)이 사실상 필수.
주요 양자화 방식 — GPTQ / AWQ / GGUF / bitsandbytes
양자화는 언제 적용하느냐(학습 중 vs 사후), 무엇을 줄이느냐(weight만 vs weight+activation), 어떤 하드웨어 타깃이냐(GPU vs CPU/Apple)로 분류한다.
GPTQ (Frantar et al., 2022) — GPU 추론용 W4A16 표준
- Post-Training Quantization (PTQ). 학습된 모델을 calibration set(수백 샘플)으로 재양자화.
- 레이어별로 Hessian 기반 OBS/OBQ(Optimal Brain Surgeon/Quantizer)를 풀어, 한 weight를 양자화할 때의 오차를 남은 weight로 보정.
- 결과물: 4-bit weight + 16-bit activation (W4A16). 7B 모델 14GB → ~4GB.
- 툴:
AutoGPTQ,GPTQ-for-LLaMa. vLLM/TGI/TensorRT-LLM 네이티브 지원.- 약점: calibration이 오래 걸리고(수십 분~몇 시간), 3/2-bit까지 내리면 품질 급락.
AWQ (Lin et al., 2023) — activation-aware, 하드웨어 친화
- 핵심 관찰: 0.1–1%의 “salient” weight가 성능을 지배 → activation magnitude로 찾아 보존.
- Hessian을 풀지 않고 per-channel scaling만 탐색하므로 calibration이 GPTQ보다 훨씬 빠름(수 분).
- W4A16. GPTQ와 비슷한 품질이지만 추론 커널이 단순해 속도가 더 빠른 경우가 많음.
- 툴:
llm-awq,AutoAWQ. vLLM/TGI 지원. 현재 서빙 현장 de facto.GGUF (llama.cpp) — CPU / Apple Silicon / 엣지 포맷
- 포맷 이름이자 양자화 스킴들의 묶음. 이전 GGML을 대체한 파일 포맷.
- k-quants(Q2_K, Q3_K_S/M/L, Q4_K_S/M, Q5_K_M, Q6_K, Q8_0): 블록 단위로 서로 다른 비트폭을 섞어 품질/크기 trade-off.
- 실무 권장: Q4_K_M (크기↓ 품질 준수), 여유 있으면 Q5_K_M / Q6_K.
- IQ-quants (IQ2_XXS, IQ3_XS 등): importance matrix로 극저비트에서도 품질 유지.
- 특화: CPU/Apple Silicon 에서
mmap+ SIMD로 구동. Metal/CUDA 백엔드도 있음.- 툴:
llama.cpp,Ollama,LM Studio,text-generation-webui.bitsandbytes (bnb) — 학습 친화, QLoRA의 기반
- Tim Dettmers의 CUDA 라이브러리. HuggingFace
Transformers에load_in_4bit=True로 통합.- LLM.int8(): 큰 값(outlier)은 FP16으로 유지하고 나머지는 INT8로 → 품질 거의 동일. 추론용.
- NF4 (NormalFloat 4-bit): weight가 정규분포를 따른다는 가정 위에 quantile 기반 4-bit 포맷 설계. information-theoretically optimal.
- QLoRA: base를 NF4로 고정 + LoRA adapter를 BF16으로 학습 → 70B 모델도 단일 48GB에서 파인튜닝 가능.
- 약점: 순수 추론 throughput은 GPTQ/AWQ보다 느림(학습 지원이 주 목적).
비교 요약
기법 타이밍 타깃 비트 용도 속도 대표 구현 GPTQ PTQ GPU W4A16 추론 빠름 AutoGPTQ, vLLM AWQ PTQ GPU W4A16 추론 매우 빠름 AutoAWQ, vLLM GGUF k-quants PTQ CPU/Apple/GPU 2–8bit 혼합 추론 (로컬) 중 llama.cpp, Ollama bnb LLM.int8 PTQ GPU W8A16 추론 중 transformers bnb NF4 PTQ GPU W4A16 학습 (QLoRA) 느림(학습용) transformers+PEFT FP8 (TE) QAT/PTQ H100+ W8A8 학습·추론 가장 빠름 TransformerEngine SmoothQuant PTQ GPU W8A8 추론 빠름 여러 구현 선택 가이드
- GPU 서빙: AWQ 먼저, 호환 이슈면 GPTQ.
- 로컬(맥북/미니PC/CPU): GGUF Q4_K_M.
- 파인튜닝 VRAM 부족: QLoRA (NF4).
- H100/H200 보유 + 처리량 극대화: FP8 (TransformerEngine).
- outlier 민감한 큰 모델(>30B)에서 품질 우선: LLM.int8 또는 SmoothQuant + W8A8.
5. FLOPS와 연산량 계산 (Compute Budget)
5.1 용어 정의
- FLOP (Floating-Point Operation): 부동소수점 연산 1회. 관례적으로 FMA(
a·b + c)는 2 FLOPs로 센다. - FLOPs (복수, count): 총 연산 횟수. 예: “학습에 3×10²³ FLOPs 소모”.
- FLOP/s = FLOPS (rate): 초당 연산 속도. 예: “H100 BF16 989 TFLOPS”.
- 표기 주의: 논문에서 소문자 끝
FLOPs는 count, 대문자 끝FLOPS는 rate.
5.2 단위
| 단위 | 값 | 예 |
|---|---|---|
| GFLOPS | 10⁹ | 모바일 NPU 수준 |
| TFLOPS | 10¹² | 소비자 GPU / DC GPU 단일 |
| PFLOPS | 10¹⁵ | DGX 노드, 소형 슈퍼컴 |
| EFLOPS | 10¹⁸ | 현행 최상위 슈퍼컴 |
| ZFLOPS | 10²¹ | 한 번의 대형 LLM 학습 총량 |
5.3 정밀도별 FLOPS (같은 하드웨어도 포맷에 따라 다름)
H100 SXM 기준:
| 정밀도 | Dense TFLOPS | 비고 |
|---|---|---|
| FP64 | 34 | HPC 용도 |
| FP32 | 67 | LLM에선 거의 안 씀 |
| TF32 | 495 | FP32 호환 matmul |
| BF16 / FP16 | 989 | 학습 표준 |
| FP8 (E4M3/E5M2) | 1,979 | H100+ 학습/추론 |
| INT8 | 1,979 | 추론 양자화 |
규칙: 비트수가 절반이 되면 처리량은 대략 2배.
5.4 Transformer FLOPs 경험식
파라미터 수 N, 토큰 수 T에 대해 (Kaplan 2020 / Hoffmann 2022):
- Forward ≈
2N/ 토큰, Backward ≈4N/ 토큰 → 학습 합계6N. - Attention 보정항:
+ 12 × L × d × s × T(L=layers, d=hidden, s=seq)s < d/12면 무시 가능. long-context에서는 지배적이 됨.
5.5 계산 예시
예시 1. Llama-3-70B 추론, 토큰당 FLOPs 및 이론 속도
- 토큰당 forward =
2 × 70×10⁹= 1.4×10¹¹ FLOPs = 140 GFLOPs - H100 BF16 989 TFLOPS 기준 compute 상한:
989×10¹² / 1.4×10¹¹≈ 7,000 tok/s - 메모리 상한(§1):
3.35 TB/s / 140 GB≈ 24 tok/s - 결론: 300배 차이로 memory-bound. 배치를 키워 FLOPS를 쓰는 게 남는 장사.
예시 2. Llama-3-70B를 15T 토큰으로 학습하는 총 예산
- 총 FLOPs =
6 × 70×10⁹ × 15×10¹²= 6.3×10²⁴ FLOPs = 6.3 YFLOPs - H100 SXM 1대, MFU 40% 가정: 실질
989×10¹² × 0.4= 395 TFLOPS - 필요 시간 =
6.3×10²⁴ / 3.95×10¹⁴≈ 5×10¹⁰ s ≈ 1,600년 (단일 GPU) - 16,000 H100으로 분산 →
1,600년 / 16,000≈ 36일 (Llama-3 논문 보고치와 근사)
예시 3. 7B 모델을 10B 토큰으로 파인튜닝
- FLOPs =
6 × 7×10⁹ × 10×10⁹= 4.2×10²⁰ - A100 80GB BF16 312 TFLOPS × MFU 50% = 156 TFLOPS
- 단일 GPU 시간 =
4.2×10²⁰ / 1.56×10¹⁴≈ 2.7×10⁶ s ≈ 31일 - 8-GPU 노드 → ~4일. QLoRA로 연산은 동일하나 VRAM만 절감.
예시 4. Chinchilla 최적 토큰 수
- Chinchilla 법칙:
T_opt ≈ 20 × N - 7B → 140B 토큰, 총 FLOPs =
6 × 7×10⁹ × 140×10⁹≈ 5.88×10²¹ - 70B → 1.4T 토큰 → 5.88×10²³ (N을 10배 키우면 FLOPs는 100배, 비용은 N²에 비례)
5.6 MFU (Model FLOPs Utilization)
실측 throughput을 이론 FLOPS로 나눈 “하드웨어 활용률”:
| 현업 보고치 | MFU |
|---|---|
| PaLM (TPU v4) | 46% |
| GPT-3 (A100) | 20% |
| Llama 2 | 50% |
| Megatron-LM 최적화 | 52% |
- 40–55%면 건강한 학습. 20% 미만이면 DataLoader, 통신, recompute 중 하나가 병목.
- HFU(Hardware FLOPs Utilization)는 activation recompute 등 실제 수행된 FLOPs를 포함하므로 항상
HFU ≥ MFU.
5.7 빠른 계산용 Cheat Sheet
| 상황 | 공식 | 비고 |
|---|---|---|
| 추론 1 tok FLOPs | 2N | decode, attention 무시 |
| 학습 1 tok FLOPs | 6N | forward + backward |
| 학습 총 FLOPs | 6 N T | Chinchilla 기준 T=20N |
| Attention 항 | 4 L d s² · (batch) | long-context 지배 |
| 필요 시간 | 총 FLOPs / (GPU수 × peak × MFU) | MFU 0.4 디폴트 |
| Chinchilla 비용 | ∝ N² | 모델 2배면 학습비 4배 |
30초 견적법
“N B짜리 모델을 T T 토큰으로 학습하려면 몇 GPU·며칠?” →
6NT / (GPU수 × peak_FLOPS × 0.4). 숫자만 넣으면 초 단위 답이 나온다.
6. Compute-bound vs Memory-bound (Roofline 직관)
Arithmetic Intensity (연산 밀도)
- Prefill (프롬프트 처리): 배치/시퀀스 전체를 MatMul → AI 높음 → compute-bound
- Decode (토큰 생성): 단일 토큰마다 전체 가중치 읽음 → AI 낮음 → memory-bound
| 단계 | 지배 자원 | 최적화 방향 |
|---|---|---|
| Prefill | FP16/FP8 TFLOPS | FlashAttention, FP8 |
| Decode | 메모리 대역폭 | 양자화, speculative decoding, 배치 확대 |
배치를 키우면 decode가 compute-bound로 이동
배치 1에서는 memory-bound, 배치 32+에서는 가중치를 한 번 읽고 여러 샘플에 재사용 → compute-bound로 전환. 서빙 시 continuous batching이 효과적인 이유.
7. 분산 학습 개념 (Distributed Training)
병렬화 축
| 기법 | 분할 대상 | 통신 빈도 | 요구 인터커넥트 |
|---|---|---|---|
| Data Parallel (DP/DDP) | 배치 | step당 1회 all-reduce | PCIe 가능 |
| Tensor Parallel (TP) | 레이어 내부 matrix | 매 레이어 | NVLink 필수 |
| Pipeline Parallel (PP) | 레이어 블록 | stage간 activation 전달 | PCIe 가능 |
| Sequence Parallel (SP) | 시퀀스 차원 | Attention 주변 | NVLink 권장 |
| Expert Parallel (EP) | MoE expert | all-to-all | NVLink/IB |
| ZeRO-1/2/3 (DeepSpeed) | optimizer/grad/params 샤딩 | stage 3은 매 레이어 fetch | NVLink 권장 |
| FSDP (PyTorch) | ZeRO-3 PyTorch 네이티브 구현 | 위와 동일 | NVLink 권장 |
메모리 절감 트릭
- Gradient Checkpointing (activation checkpointing): activation 재계산으로 메모리 ~60–80% 절감, 속도 ~20% 감소.
- Gradient Accumulation: batch를 쪼개 누적 → effective batch 확대, VRAM 그대로.
- CPU Offload (ZeRO-Infinity): optimizer state를 CPU RAM/NVMe로 → VRAM 절약하지만 PCIe 대역폭 병목.
8. 추론 최적화 키워드
| 용어 | 설명 |
|---|---|
| FlashAttention (v2/v3) | Attention을 SRAM tiling으로 재작성, HBM 왕복 제거. 2–4배 빠름 + 메모리 선형. |
| PagedAttention | KV cache를 OS 가상 메모리처럼 페이지 단위 관리 (vLLM). fragmentation 제거. |
| Continuous Batching | 생성 중 요청을 동적으로 합류/퇴출. throughput 10배+ |
| Speculative Decoding | 작은 draft 모델이 N토큰 예측 → 큰 모델이 검증. 2–3배 가속. |
| Prefix Caching | 공통 시스템 프롬프트의 KV를 재사용. |
| Chunked Prefill | 긴 프롬프트를 조각내어 decode와 섞어 처리 (vLLM, TensorRT-LLM). |
| Tensor Parallel w/ NCCL | 여러 GPU에 가중치 분할, NVLink all-reduce. |
서빙 성능 지표
| 지표 | 의미 |
|---|---|
| TTFT (Time To First Token) | 요청 도착 → 첫 토큰 출력까지. prefill 성능 지배. |
| TPOT (Time Per Output Token) | 토큰당 평균 생성 시간. decode 성능 = 메모리 대역폭 지배. |
| Throughput (tok/s) | 서버 전체 초당 토큰 수. 배치/TP 설계 성능. |
| Goodput | SLA(예: TTFT<2s) 만족하는 throughput만 카운트. |
9. 주요 프레임워크 매핑
| 레이어 | 대표 도구 | 비고 |
|---|---|---|
| 학습 (분산) | DeepSpeed, FSDP, Megatron-LM, NeMo | Megatron은 TP+PP 레퍼런스 |
| PEFT | PEFT (HF), bitsandbytes, Unsloth | QLoRA = bnb+PEFT, Unsloth는 커널 최적화 |
| 추론 서빙 | vLLM, SGLang, TensorRT-LLM, TGI, llama.cpp | vLLM이 오픈소스 de facto |
| 양자화 | GPTQ, AWQ, GGUF(llama.cpp), bitsandbytes, FP8 (TE) | GGUF는 CPU/Apple 친화 |
| 프로파일링 | nvidia-smi, nsys, nvprof, PyTorch Profiler, py-spy | nsys가 GPU 타임라인 분석 표준 |
10. 실무 체크리스트
모델 → 하드웨어 산정 빠른 공식
추론: VRAM ≥
params(B) × bytes/param × 1.2(+KV cache)
LoRA 학습: VRAM ≥params(B) × 2 × 1.5(BF16 기준, batch=1, grad ckpt 가정)
Full FT: VRAM ≥params(B) × 20(AdamW, BF16 mixed)
자주 마주치는 병목
- OOM인데 VRAM은 남음 → fragmentation.
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True또는 vLLM PagedAttention 사용. - 배치 키워도 느려짐 → compute-bound 전환 후 FLOPS 한계 도달. FP8/TP 필요.
- decode는 빠른데 TTFT가 김 → prefill compute 부족. GPU TFLOPS 체크 or chunked prefill.
- CPU RAM 스왑 발생 →
os.cached+ dataloadernum_workers과다. NVMe로 WebDataset 전환. - multi-node가 single-node보다 느림 → IB 없이 Ethernet로 all-reduce. NCCL_DEBUG=INFO로 확인.
11. 용어 Cheat Sheet
| 용어 | 한 줄 정의 |
|---|---|
| VRAM | GPU 전용 고대역폭 메모리 (HBM/GDDR) |
| HBM | 3D 스택형 초고대역폭 메모리, 데이터센터 GPU 표준 |
| GDDR | 그래픽 전용 DRAM, 소비자 GPU용 |
| Unified Memory | CPU와 GPU가 동일 물리 메모리 공유 (Apple Silicon) |
| TDP | Thermal Design Power, 발열/전력 설계 기준 (W) |
| SM | Streaming Multiprocessor, NVIDIA GPU 연산 단위 |
| Tensor Core | MatMul 전용 연산 유닛, FP16/BF16/FP8 지원 |
| NVLink | NVIDIA GPU 전용 고속 인터커넥트 |
| PCIe | 범용 CPU↔장치 버스, Gen5 x16 = 64GB/s |
| NCCL | NVIDIA Collective Communications Library |
| KV Cache | Attention 계산 시 저장되는 Key/Value, 메모리 주범 |
| Checkpointing | activation 재계산으로 메모리 절감 |
| Offloading | CPU RAM/NVMe로 텐서 이동해 VRAM 절약 |
| Quantization | 저비트 표현(INT8/INT4)로 메모리/대역폭 절감 |
12. 참고 링크
- NVIDIA H100 Datasheet
- vLLM Documentation
- EleutherAI: Transformer Math 101
- Hugging Face: Model Memory Calculator
- Unsloth: Fine-tuning VRAM Requirements
13. 내 워크로드 메모 (TODO — 본인 환경 입력)
학습 모드에서 직접 채우기
아래 3개 항목은 사용자 본인의 환경/목표를 적어두면, 이후 모델·기법 선택 시 빠른 판단 기준이 된다. 5–10줄이면 충분.
# 내 현재 하드웨어
- GPU:
- VRAM:
- 시스템 RAM:
- 인터커넥트 (NVLink/PCIe):
- 스토리지:
# 주 워크로드
- 주로 다루는 모델 크기 (예: 7B/13B/70B):
- 목적 (추론 서빙 / LoRA / Full FT / 실험):
- 시퀀스 길이 요구:
- throughput vs latency 중 어느 쪽 우선:
# 현재 겪고 있는 병목 (있다면)
-