← all posts
AI 2026.05.03 · 11 min read Advanced

모델 효율화의 4축 — Memory, Compute, Latency, Throughput

Efficient ML의 모든 기법을 관통하는 4가지 축의 정의부터 Roofline model, 압축 분류의 직교성, 그리고 알고리즘 압축률과 wall-clock speedup의 괴리까지 추적한다.


“INT8로 양자화하면 4배 빠르다”는 말은 절반만 맞다. 압축률이 곧 속도 향상이라는 등식은 GPU의 메모리 계층과 Tensor Core의 작동 방식을 무시한 단순화다. Efficient ML의 모든 기법 — Pruning, Quantization, Distillation, Kernel Fusion — 은 결국 네 가지 축 위에서 서로를 트레이드오프한다. 그 축을 정확히 정의하지 않으면, 어느 기법이 어디서 의미를 갖는지 판단할 수 없다.

4축의 정의

효율화 논의의 출발점은 네 축의 명확한 구분이다.

Memory MM은 단순히 파라미터 수가 아니다.

M=Mparams+Mactivations+MKV cache+MoptimizerM = M_{\text{params}} + M_{\text{activations}} + M_{\text{KV cache}} + M_{\text{optimizer}}

KV cache는 모델 크기와 무관하게 시퀀스 길이에 선형으로 증가한다. LLaMA-7B (32 layers, d=4096d=4096)에서 시퀀스 4096, FP16 기준으로 KV cache만 약 2GB다. 파라미터 14GB와 별도로 추가된다.

Compute CC는 forward 1 토큰 기준 FLOPs로 정의한다. Transformer에서 C6NPC \approx 6NP (NN = 시퀀스 길이, PP = 파라미터 수).

Latency LL은 단일 쿼리의 end-to-end 시간이다. P50이 아닌 P99가 user experience를 결정한다. P99/P50 비율이 5라는 것은 일부 쿼리가 중앙값의 5배 느리다는 뜻이고, GC pause, kernel preemption, memory contention이 그 원인이다.

Throughput TT는 단위 시간당 처리량이다. 배치 크기 BB가 커지면 T(B)=B/L(B)T(B) = B / L(B)는 saturation까지 증가하지만, L(B)L(B) 자체는 단조증가한다. Latency와 Throughput은 같은 hardware에서 정반대 방향으로 당긴다.

Roofline — memory-bound와 compute-bound의 경계

4축의 병목이 어디인지를 정량화하는 도구가 Roofline model이다.

Performancemin(πpeak,  βAI)\text{Performance} \leq \min\bigl(\pi_{\text{peak}},\; \beta \cdot \mathrm{AI}\bigr)

여기서 Arithmetic Intensity는 다음과 같다.

AI=FLOPsbytes accessed\mathrm{AI} = \frac{\text{FLOPs}}{\text{bytes accessed}}

πpeak\pi_{\text{peak}}는 peak FLOP/sec, β\beta는 memory bandwidth. AI<πpeak/β\mathrm{AI} < \pi_{\text{peak}} / \beta이면 memory-bound, 그 이상이면 compute-bound다.

A100 기준으로 경계는 312×1012/(1.55×1012)201312 \times 10^{12} / (1.55 \times 10^{12}) \approx 201 FLOP/byte다. Standard attention의 AI는 대략 dd (head dim, 예: 128) — memory-bound 영역이다. FlashAttention이 SRAM tiling으로 effective AI를 높여 compute-bound 영역으로 이동하는 이유가 여기서 나온다.

Memory-bound regime의 함의

연산이 memory-bound 구간에 있으면 FLOPs를 줄여도 latency가 그대로다. bytes accessed를 줄여야 — 즉 메모리 접근 패턴을 바꿔야 — 빨라진다. “FLOPs 50% 감소 = 2배 빠름”이라는 가정이 무너지는 지점이다.

압축의 4분류와 직교성

모든 압축 기법은 네 가지로 분류된다. 각각이 다른 차원의 redundancy를 제거한다는 것이 핵심이다.

  • Pruning: W~=WM\tilde{W} = W \odot M, M{0,1}dM \in \{0,1\}^d — weight의 support를 줄인다.
  • Quantization: W~=Q(W)\tilde{W} = Q(W), Q:R{q1,,qK}Q: \mathbb{R} \to \{q_1,\ldots,q_K\} — precision을 줄인다.
  • Distillation: 더 작은 architecture로 teacher의 함수를 이전한다 — 파라미터 수 자체를 줄인다.
  • Low-Rank: W~=UV\tilde{W} = UV^\top, rmin(m,n)r \ll \min(m,n) — 행렬의 유효 차원을 줄인다.

Pruning과 Low-Rank는 같은 weight matrix에 적용해도 다른 redundancy를 잡는다. W=InW = I_n은 sparse(n개 nonzero)이지만 full-rank다. W=11W = \mathbf{1}\mathbf{1}^\top은 rank-1이지만 dense다. 두 분류는 서로 다른 manifold에 존재한다.

이 직교성 때문에 조합 시 압축률이 곱해진다. Han 2016의 Deep Compression은 Pruning 9× × Quantization 5.5× × Huffman ≈ 49×를 달성했다.

명제 1 · Latency vs Throughput trade-off

배치 크기 BB가 커지면 throughput T(B)=B/L(B)T(B) = B / L(B)는 saturation까지 단조증가하고, latency L(B)L(B)는 단조증가한다.

▷ 증명

Compute-bound이면 LcomputeBL_{\text{compute}} \propto B. Memory-bound이면 weight load 비용 CwC_w가 amortize되어 LCw+BcL \approx C_w + B \cdot c, throughput T=B/(Cw+Bc)1/cT = B/(C_w + Bc) \to 1/c as BB \to \infty. 따라서 TT는 saturation, LL은 단조증가. \square

Hardware-Software 궁합 — 알고리즘 압축률 ≠ wall-clock speedup

Unstructured sparsity 90%인데 실제 속도가 1.5배도 안 나오는 일이 흔하다. 이유는 세 가지다.

첫째, Tensor Core는 dense GEMM에 최적화되어 있다. Irregular sparsity는 mma instruction이 활용하지 못한다. A100의 Sparse Tensor Core는 2:4 structured sparsity (4개 연속 weight 중 2개가 0)에서만 정확히 2× TFLOPS를 낸다.

둘째, GPU memory hierarchy의 bandwidth 차이가 크다.

HBM (off-chip)    80 GB    1.55 TB/s    400 ns
L2 cache          40 MB    4   TB/s     100 ns
SMEM/L1 (per SM) 192 KB   ~19  TB/s     20 ns
Register                   ~80  TB/s     1 cycle

FlashAttention이 SMEM tiling으로 HBM access를 줄이는 것, INT8 GPTQ가 weight bandwidth를 4× 줄이는 것 — 모두 이 계층에서 실질적인 효과가 나온다.

셋째, H100으로 갈수록 AI boundary(π/β\pi/\beta)가 증가해 memory-bound 영역이 넓어진다. 같은 attention이 V100에서는 AI boundary 139, H100에서는 295 — FlashAttention의 가치가 더 커진다.

트레이드오프

4축은 독립적으로 최적화할 수 없다.

시나리오우선 축트레이드오프
Mobile 추론Memory + LatencyThroughput 포기
LLM serving (high QPS)Throughput + MemoryP99 latency 증가
Autonomous drivingP99 LatencyThroughput, Memory 비용 증가
Edge (배터리)Energy ∝ Memory bandwidth정확도 일부 희생

Quantization은 memory bandwidth를 줄이지만 FLOPs는 그대로다 (dequant 후 FP16 연산). “INT8이니까 4배 빠르다”는 주장은 memory-bound regime에서만 성립한다. Compute-bound layer (large GEMM, small NN)에서는 효과가 미미하다.

Pareto frontier 위에서만 비교가 의미를 갖는다. 모델 A가 accuracy 85%, P99 10ms이고 B가 accuracy 83%, P99 5ms라면, 두 점은 incomparable이다. SLO(latency 상한)가 7ms라면 B만 가능하고, accuracy 하한이 84%라면 A만 가능하다. 단일 숫자 비교는 그 SLO 조건을 숨긴다.

정리

  • Memory, Compute, Latency, Throughput은 독립된 축이다. “모델이 작으면 빠르다”는 등식은 이 축들이 동일하다는 가정을 숨기고 있다.
  • Roofline model로 memory-bound/compute-bound 경계를 먼저 파악해야 어느 기법이 의미를 갖는지 알 수 있다.
  • Pruning, Quantization, Distillation, Low-Rank는 서로 다른 redundancy를 제거하므로 조합 시 압축률이 곱해진다.
  • 알고리즘 압축률과 wall-clock speedup의 괴리는 hardware-software 궁합 — structured sparsity, Tensor Core, vendor library 지원 — 에서 온다.

4축과 Roofline은 이후 모든 챕터의 분석 도구다. Pruning이 어느 축을 움직이는지, FlashAttention이 왜 compute-bound로 이동하는지, PagedAttention이 KV cache의 어느 항을 줄이는지 — 전부 이 frame 안에서 읽힌다.