《GPU Mode》
L058
2025 · Disaggregated
High priority
transcript · failed
Disaggregated LLM Inference
LLM 서빙에서 prefill 과 decode 의 자원 형태가 본질적으로 다르다는 관찰 위에서, 두 단계를 별도의 GPU pool 에 분리해 각자 다른 batch / parallel / scheduling 으로 돌리고 KV cache 를 PCIe·NVLink 로 옮긴다. Splitwise(MS) 와 DistServe(UCSD) 가 같은 결론에 도달했다는 사실, 그리고 옮기는 비용이 분리의 이득을 거의 잡아먹지 않는 이유 — 그 산수를 다시 깐 노트.
prefill / decode split
KV cache migration
Splitwise
DistServe
vLLM
SLO-aware scheduling
NVLink / PCIe
continuous batching
J
Speaker
Junda Chen
UCSD · DistServe 공저자 (확인 필요)
§ 01강의가 풀려는 문제· why disaggregate
같은 GPU 안에서 prefill 과 decode 가 서로의 latency 를 망가뜨린다
2024 년 LLM 서빙 시스템(vLLM, TensorRT-LLM, SGLang…)이 대부분 continuous batching 위에 서 있다. 한 GPU 가 prefill 토큰과 decode 토큰을 같은 forward 안에 섞는다. 이 강의는 그 “섞는다” 가 — 두 단계의 자원 형태가 다르기 때문에 — TTFT 와 TPOT 둘 다를 동시에 최적화하지 못한다고 진단하고, 두 단계를 다른 GPU 로 보내는 길을 깐다.
강의 자체의 transcript 가 비어 있으므로 이 노트는 두 편의 논문과 production 자료를 base 로 재구성한다. 두 논문이 핵심이다.
- Splitwise (Microsoft Research, 2024 ISCA) — Patel et al. “Splitwise: Efficient generative LLM inference using phase splitting.” Azure 환경에서의 prefill/decode 분리.
- DistServe (UCSD, 2024 OSDI) — Zhong et al. “DistServe: Disaggregating prefill and decoding for goodput-optimized LLM serving.” SLO 기반 스케줄링과 GPU pool 자동 분배.
발표자 Junda Chen 은 DistServe 공저자로 알려져 있다 (확인 필요 — 강의 transcript 없음). 두 시스템 모두 같은 결론에 도달한다 — 같은 GPU 안에서는 prefill 의 큰 batch 가 decode 의 latency 를 잡아먹는다. 강의의 인지적 frame 은 그 자리부터 시작한다.
핵심 frame
LLM inference 의 두 단계는 같은 모델을 돌린다는 점만 같다. compute / memory bandwidth / batch dynamics / latency target 이 전부 다르다. 같은 자원을 공유하면 두 단계의 SLO 가 서로를 깎아먹는 negative-sum 게임이 된다. 분리 = 두 단계가 각자의 최적점에서 도는 것을 허용한다.
“Prefill 은 GPU 의 compute 를 거의 다 쓰고, decode 는 HBM 대역폭을 거의 다 쓴다 — 이 둘을 같은 forward 에 섞는 순간 어느 쪽도 자기 peak 에 도달하지 못한다.”disaggregation 의 일반적 frame · 확인 필요
그래서 강의의 서사는 이 흐름이다 — (§02) 왜 두 단계의 자원 형태가 다른지 산수로 보고 → (§03) 같은 GPU 에 두면 어떤 interference 가 발생하는지 → (§04–05) 분리하면 KV cache 를 옮겨야 하는데 그 비용이 얼마인지 → (§07) 결과적으로 같은 SLO 아래에서 얼마나 더 많은 요청을 받을 수 있는지.
§ 02prefill vs decode· compute-bound vs memory-bound
같은 transformer 가 한쪽은 GEMM 머신이 되고 한쪽은 HBM 펌프가 된다
두 단계의 차이를 한 줄로 요약하면 — prefill 은 토큰을 한꺼번에 본다, decode 는 한 번에 한 토큰. 같은 attention/FFN 이 한쪽에서는 큰 GEMM 으로 돌고 한쪽에서는 GEMV 의 연속이 된다. 이 비대칭이 disaggregation 의 산수적 출발점이다.
전형적 LLM 의 한 layer 비용을 분해해보자. seq length 가 L, hidden 이 d, batch 가 B 일 때:
- Prefill — 모든 토큰을 동시에 처리. attention 의
Q·K^T 가 B · L · L · d, FFN 이 B · L · d². compute-bound. arithmetic intensity 가 충분히 커서 Tensor Core 가 saturate 된다.
- Decode — 한 번에 token 1개.
Q 는 B · 1 · d 짜리 vector. K, V 는 KV cache 에 누적된 모든 과거 토큰 → 매 step 마다 B · L_past · d 를 HBM 에서 읽어야 한다. memory-bound. arithmetic intensity 가 거의 1 토큰당 1 GEMV.
그러면 두 단계의 GPU 활용 패턴이 완전히 다르다 — prefill 은 SM 의 Tensor Core 가 100% 가까이 도는 동안 HBM 대역폭은 절반 정도. decode 는 정반대 — HBM 이 95%+ 도는 동안 Tensor Core 는 절반도 못 채운다.
FIG · 두 단계의 자원 사용 형태같은 H100 · 같은 70B 모델
두 막대 패턴이 완전히 반전. 같은 GPU 에 둘을 같이 두면 — compute 자원 절반과 HBM 자원 절반이 항상 어느 한 단계에서 idle 이다. 수치 예시는 일반적 70B Llama-style 모델 (확인 필요).
FIG · 한 step 안 두 단계의 GPU timelinecontinuous batching · co-located
Tensor Core compute lane
prefill GEMM (saturate)
decode GEMV
— idle (decode 가 HBM 에 막혀 있는 동안)
~55%
HBM bandwidth memory lane
— idle (prefill 은 BW 적게 씀)
decode KV-cache load (saturate)
~58%
같은 시점에 두 lane 이 모두 100% 에 도달하는 구간이 거의 없다. 자원이 연속해서 절반씩 놀고 있다는 게 핵심 관찰. 분리하면 두 GPU 모두 자기 lane 만 100% 로 끌어쓸 수 있다.
이 관찰은 latency 메트릭에도 그대로 박힌다 — TTFT (time to first token) 는 prefill 비용에 묶이고 (compute / FLOPS), TPOT (time per output token) 는 decode 비용에 묶인다 (HBM bandwidth). 한 GPU 안에서 둘을 같이 돌리는 한, batch 를 늘려서 하나를 살리면 다른 하나가 죽는다.
§ 03분리 동기· interference · SLO
continuous batching 이 prefill 토큰을 끼워넣는 순간 decode latency 가 튄다
vLLM 의 continuous batching 은 매 step 마다 새 요청의 prefill 을 진행 중인 decode batch 와 함께 돈다. 평균 throughput 은 좋아지지만 — 그 step 의 decode 토큰이 prefill 의 거대한 GEMM 끝나기를 기다린다. 한 step 의 latency 가 boundary 에서 spike. 이게 disaggregation 이 풀려는 첫 번째 구체적 문제다.
FIG · co-located continuous batching 의 latency spikestep 별 wall-clock
step 1 · decode onlybatch=64 decode
~30 ms
step 2 · prefill 끼어듦batch=64 + 1 long prefill
2K-token prefill GEMM
decode
~280 ms
step 3 · decode onlybatch=65 (새 요청 합류)
~32 ms
기존 64 개 활성 요청의 decode latency 가 step 2 에서 거의 10배 튄다. 평균은 OK 처럼 보이지만 p99 TPOT 가 처참하다. SLO-bound serving 에서는 곧 SLO 위반.
이 “끼어들기” 비용은 prefill 길이가 길수록 비례해서 커진다. context 가 긴 RAG / agent / 코딩 어시스턴트 워크로드에서는 한 prefill 이 4K~32K 토큰이라 — decode batch 가 한 step 에 수백 ms 멈춘다.
운영자가 이걸 막으려면 결국 두 가지 중 하나다.
- prefill 토큰을 따로 chunk 해서 잘게 자른다 — chunked prefill (vLLM v0.4+, SGLang). 끼어들기 비용을 분산시키지만 prefill 자체의 throughput 은 떨어진다.
- prefill 을 다른 GPU 에 보낸다 — disaggregation. 끼어들기를 원천적으로 없앤다.
SLO 두 개의 분리
p99 TTFT 는 prefill GPU 의 큐잉 / FLOPS 한계로 독립적으로 다듬을 수 있고, p99 TPOT 는 decode GPU 의 batch / HBM 한계로 독립적으로 다듬을 수 있다. 한 변수에 두 SLO 를 묶는 co-located 시스템보다 자유도가 곱으로 늘어난다.
DistServe 논문의 핵심 표현 — “decoupling these two phases lets us tune their parallelism / batch / placement independently for goodput, instead of throughput.” goodput = SLO 안에서 받은 요청 수. 평균 throughput 이 아니라 SLO 만족한 요청의 throughput 을 본다는 게 disaggregation 의 metric 정의 자체다.
§ 04KV cache migration· PCIe vs NVLink
분리하면 prefill 결과를 decode GPU 로 옮겨야 한다 — 그 비용 산수
prefill GPU 가 만든 결과는 KV cache다 — layer 별로 K, V 두 텐서. decode GPU 가 attention 을 돌리려면 이 KV 가 그 GPU 의 HBM 에 있어야 한다. 그래서 옮겨야 한다. 이 비용이 분리의 이득을 잡아먹지 않는지가 disaggregation 의 운명을 결정한다.
한 요청의 KV cache 크기 산수 (Llama-3 70B 기준, FP16):
- layers
L = 80, head dim × heads → GQA 로 KV head = 8, head_dim = 128 → 1024 bytes/token/layer × 2 (K,V) = 2048 bytes/token/layer.
- layer 80개 → ~160 KB/token. 한 요청 prompt 가
L_in = 2048 이면 KV cache ≈ 320 MB.
이 320 MB 를 prefill GPU → decode GPU 로 옮기는 시간:
- NVLink (H100, 900 GB/s): 320 MB / 900 GB/s ≈ 0.36 ms.
- PCIe Gen4 (32 GB/s): 320 MB / 32 GB/s ≈ 10 ms.
- PCIe Gen5 (64 GB/s): ≈ 5 ms.
비교 기준 — 같은 prompt 의 prefill 자체가 H100 70B 에서 ~150 ms 정도. 즉 NVLink 이면 KV migration 은 prefill 의 0.2%, PCIe Gen4 도 7%. 분리의 이득(>30%)이 이 비용보다 훨씬 크다.
FIG · KV migration 시간이 prefill 시간 안에서 차지하는 비중L_in = 2048 · 70B
NVLink 가 같은 노드에 있으면 migration 은 거의 공짜. cross-node 로 가면 InfiniBand (200~400 Gb/s) 로 떨어지고 PCIe 와 비슷한 비용. 그래서 production 에서는 prefill/decode pool 을 같은 노드 안에 두려는 압력이 생긴다.
중요한 산수
KV cache 크기 = L_in × layers × 2 × n_kv_heads × head_dim × dtype_size. GQA 가 KV head 수를 줄이면 migration 비용도 그 비율로 줄어든다. Llama-3 같이 GQA 8:1 인 모델은 같은 dense MHA 모델 대비 migration 이 8배 싸다. 이게 disaggregation 의 implicit 친화성.
긴 context 모델 — 32K, 128K — 에서는 KV cache 가 4 GB, 16 GB 까지 커진다. 그러면 PCIe 라도 100ms+ 의 migration 이 prefill 시간 (~수백 ms) 의 상당 부분이 된다. 이 영역은 chunked-migration / overlapping (§05) 으로만 풀린다.
§ 05통신 오버헤드· layer-by-layer · async
migration 을 prefill 의 마지막에 몰지 말고, layer 단위로 흘려보낸다
naive 한 구현은 prefill 을 끝까지 다 돌린 뒤 KV cache 80 layer 를 통째로 보낸다. Splitwise / DistServe 둘 다 같은 트릭을 쓴다 — layer i 의 KV 가 만들어지는 즉시 layer i 를 send 한다. prefill 의 layer i+1 GEMM 이 도는 동안 layer i 의 KV 가 PCIe / NVLink 위로 흐른다. compute 와 통신이 겹친다.
FIG · naive vs layer-pipelined migration80-layer prefill
naive — 통째로prefill 끝나고 send
prefill (80 layers)
KV migrate (320 MB)
160 ms
layer-pipelinedcompute · send overlap
prefill (80 layers)
KV migrate (layer-by-layer · 동시 진행)
tail
152 ms
migration 이 prefill 안에 거의 완전히 hide. 마지막 layer 한 개 분량만 critical path 에 남는다 — 320 MB → 4 MB 로 줄어든 효과. 이게 분리의 비용을 1% 이하로 누르는 메커니즘.
구현 디테일은 두 가지가 핵심이다.
- NCCL stream / CUDA stream 분리 — 통신을 default stream 이 아닌 별도 stream 에서 하면 compute 와 진짜로 겹친다.
torch.distributed.send/recv 위에서는 이게 자동이지 않으므로 직접 nccl group + side stream 을 띄운다.
- address handshake — decode GPU 가 prefill GPU 의 KV 를 받으려면 어디에 쓸지 알려야 한다. KV slot 매핑(=block table)을 사전에 교환. vLLM block manager 의 paging 기반 KV 가 이 합치에 친화적인 이유.
NIXL / KV transfer library
NVIDIA 가 2024 말 발표한 NIXL (NVIDIA Inference Transfer Library) 가 정확히 이 disaggregation 의 KV transfer 를 표준화한다. vLLM, TRT-LLM 모두 채택 중. 같은 노드 / cross-node 모두에서 RDMA + GPUDirect 로 zero-copy.
# 의사코드 — layer-pipelined KV send (prefill 측)
comm_stream = torch.cuda.Stream()
for i, layer in enumerate(model.layers):
h, kv_i = layer.forward(h) # default stream
with torch.cuda.stream(comm_stream):
comm_stream.wait_stream(
torch.cuda.current_stream())
kv_send_async(
kv_i, # {K_i, V_i}
dst=decode_rank,
tag=(req_id, i),
)
# 마지막 layer 만 sync 대기
torch.cuda.current_stream().wait_stream(comm_stream)
decode 측에서는 layer i 가 도착해야 layer i 의 attention 을 돌릴 수 있다 — 일반적으로 decode 는 모든 layer 가 이미 들어와 있을 때 시작되므로, prefill 마지막 layer 의 도착이 critical path.
§ 06분리 vs 통합· co-located baseline
같은 8-GPU 노드를 어떻게 쓸 것인가 — 모든 GPU 가 같은 모델 vs 4+4 분리
분리의 가치는 같은 자원 예산 안에서 비교해야 보인다. “8장 GPU 가 있으면 다 같이 prefill+decode 를 하는 게 좋은가, 아니면 4장은 prefill, 4장은 decode 로 묶는 게 좋은가?” 두 시스템 모두 같은 비교를 한다. 결과는 모델 / SLO / 워크로드 mix 에 따라 다르지만 — 긴 prompt + 짧은 output 일수록 분리가 이긴다.
Prefill pool
4× H100 · TP=4
큰 batch · short-burst · compute-bound 으로 도는 편 좋아함
batch policyprompt-pack
parallelTP4
SLOTTFT p99
목표FLOPS 99%
Decode pool
4× H100 · TP=4
큰 batch · sustained · memory-bound 으로 도는 편 좋아함
batch policycontinuous
parallelTP4
SLOTPOT p99
목표HBM BW 95%
메트릭
co-located 8 GPU
disagg 4+4 GPU
TTFT p99
~1.8 s
~0.6 s
TPOT p99
~95 ms
~38 ms
평균 throughput
100% (baseline)
+30~80% goodput
decode batch 안정성
spike 잦음
flat
KV migration 비용
0
~0.5 ms / req (NVLink)
위 수치는 일반적 70B/8GPU 비교를 재구성한 예시. DistServe 논문 Table 3 / Splitwise eval 의 트렌드를 기준으로 — 절대값은 모델·SLO·워크로드 mix 에 따라 크게 변함. 확인 필요.
“같은 8장으로 같은 SLO 를 만족시키면서 30~80% 더 많은 요청을 받았다 — 즉 같은 cluster 가 30~80% 더 큰 traffic 을 무료로 처리한 것과 같다.”DistServe / Splitwise 공통 결론 (확인 필요)
§ 07Splitwise · DistServe· SLO 안에서 throughput
두 논문의 같은 결론 · 다른 강조점
두 논문은 같은 시기 (2024) 에 같은 아이디어를 다른 각도로 구현했다. Splitwise 가 Azure 의 production 워크로드를 실제 분석해 분리의 정당성을 깔았고, DistServe 가 SLO 기반 자동 placement / parallel sweep 을 형식화했다. 같이 보면 — 한쪽은 시스템 설계의 outer envelope, 다른 쪽은 inner optimization.
Splitwise (MS · ISCA 2024)
- 관찰: Azure 의 LLM 서빙에서 prefill 시간이 token 수에 정확히 선형, decode 시간이 batch / KV 크기에 선형. 두 단계의 utilization 패턴이 정반대.
- 설계: prompt machine + token machine 으로 명시적 분리. 같은 H100 노드 안에서 NVLink 로 KV 전송. 다른 노드 간에는 InfiniBand.
- SKU 다양성: prompt machine 은 H100 으로, token machine 은 (싸면 OK) A100 으로. 모델별로 다른 GPU 세대를 섞어 cluster cost 를 최적화.
- 결과: 같은 cost 예산에서 ~1.4× throughput, p99 SLO 만족 trace 20% 증가 (논문 abstract — 확인 필요).
DistServe (UCSD · OSDI 2024)
- 관찰: prefill 과 decode 가 다른 parallel 전략을 좋아한다. prefill 은 TP, decode 는 (KV 가 클수록) PP / 더 큰 batch. 한 묶음이면 둘 다 최적이 안 됨.
- 설계: placement algorithm — 모델 / SLO / GPU 수가 주어지면 prefill pool / decode pool 의 GPU 수와 parallel 차원을 자동 선택. 시뮬레이터로 sweep.
- scheduler: prefill 큐와 decode 큐 분리. KV cache 의 layer-pipelined transfer.
- 결과: chat 워크로드에서 same-SLO 에서 ~7.4× 더 많은 rate, code completion 에서 ~12.6× rate (논문 Figure 1 — 확인 필요).
두 논문이 공통으로 강조하는 것
(1) workload 의 input/output 길이 분포가 분리 이득의 크기를 결정한다. prompt 가 길고 output 이 짧을수록 분리 효과가 크다 — 그런 워크로드에서 prefill 비중이 올라가서 interference 가 더 강해지기 때문. (2) 같은 노드 안 NVLink 면 KV migration 은 사실상 공짜. cross-node 로 갈 때 비용이 본격적으로 보인다. (3) SLO 안에서의 goodput 이 평균 throughput 보다 의미 있는 metric.
§ 08production trade-off· 실제 클러스터 구성
분리가 항상 이기지는 않는다 — 작은 모델 · 짧은 prompt · uneven traffic
disaggregation 을 production 에 도입하기 전에 짚을 trade-off. 그저 “분리하면 빨라진다” 가 아니라 — 어떤 워크로드 / 어떤 모델 / 어떤 토폴로지에서 이득이 있고 어디서 잃는가.
상황
분리 이득
왜
long prompt · short output
(RAG, code, agent)
크다 (3~10×)
prefill 이 dominant. interference 가 가장 큰 워크로드.
short prompt · long output
(creative writing, reasoning)
중간 (1.2~2×)
decode 가 dominant. prefill 이 작아서 분리해도 자유도가 적게 늘어남.
balanced (chat)
중상 (2~4×)
interference 가 평균적으로 발생. 분리가 큰 변동성을 잡아줌.
작은 모델 (<7B)
작거나 음
prefill 이 너무 빨라 interference 가 작음. 분리 오버헤드(KV migration·관리)가 더 큼.
cross-node (PCIe/IB)
중하
migration 비용이 prefill 의 5~15% 수준으로 올라감. layer-pipelined hide 가 필수.
매우 uneven traffic
작음
한쪽 pool 이 노는 시간이 잦아짐 → 자원 낭비. 자동 rebalancing 이 어려움.
실전 결정 기준
(1) 워크로드의 median prompt length 가 1K 이상 → 분리 후보. (2) 모델이 30B+ 이면서 GQA 사용 → KV migration 싸므로 분리 친화적. (3) 같은 노드 안에서 NVLink 8장 → 즉시 시도. cross-node 로 가야 하면 NIXL / GPUDirect 가 필요. (4) traffic 이 시간대별로 8× 변동 → 분리 + 자동 pool resize (또는 hybrid) 가 필요. 정적 4+4 배치는 비효율.
또 하나의 production 관찰 — prefill GPU 의 utilization 이 떨어질 때가 잦다. prefill 은 burst 형태 (요청이 들어올 때만 발생) 인데 decode 는 sustained (요청이 살아있는 한 계속). 같은 4+4 라도 prefill GPU 가 idle 인 시간이 길다면 — 그 GPU 를 일시적으로 decode 로 합류시키는 elastic reconfig 가 다음 단계. SGLang / vLLM v1 의 disagg 기능이 이 방향.
§ 09다음 발전· chunked prefill · attention disagg
분리의 다음 단계 — 더 잘게 자르고, attention 만 따로 분리한다
2024 후반부터 disaggregation 의 두 갈래가 진행 중이다. (a) chunked prefill + 분리 hybrid — 단순 분리의 자원 활용 단점을 chunked 로 보완. (b) attention 자체 분리 — 모델의 attention layer 를 KV-heavy machine 으로, FFN/MLP 를 compute-heavy machine 으로.
(a) chunked prefill 위에서의 분리
SGLang 이 채택한 패턴 — prefill 을 큰 GEMM 한 번이 아니라 고정 크기 chunk (예: 1024 토큰) 로 자른다. chunk 단위로 prefill GPU 가 도는 동안 decode 도 같이 끼어 들어가 일을 한다. 그러면서도 chunk 의 KV 가 만들어지는 즉시 decode pool 로 stream.
장점 — 긴 prompt 가 들어와도 decode latency spike 없이 SLO 안에서 처리. 단점 — chunk 마다 GEMM 이 작아져서 prefill throughput 자체가 좀 떨어진다 (5~10%).
(b) attention 자체 분리 (Mooncake 등)
Mooncake (Moonshot AI, 2024) 는 한 단계 더 — attention 만 KV-heavy GPU pool 에 두고 FFN 은 다른 pool 에 둔다. attention 은 KV cache 를 들고 있는 GPU 가 매번 도는 게 자연스럽다. layer 마다 hidden state 가 두 pool 사이를 왕복.
이건 KV cache reuse (prefix caching) 와 결합될 때 특히 강력하다 — 같은 prefix 의 KV 가 한 곳에 살아 있으면 여러 요청이 그 KV 를 “찾아가서” attention 만 돌리고 돌아온다.
FIG · disaggregation 의 진화 단계2023 → 2025
2023
co-located
vLLM v0 · continuous batching
2024 H1
prefill ↔ decode
Splitwise · DistServe
2024 H2
+ chunked hybrid
SGLang · vLLM v1
2025
+ attention disagg
Mooncake · prefix-aware
미래
layer-level disagg
layer-별 GPU pool · 확인 필요
분리의 단위가 점점 작아진다 — request → phase → chunk → operator → layer. 각 단계에서 KV / activation 의 transfer 비용을 줄이기 위한 새 hardware feature (NIXL, GPUDirect, NVLink Switch) 가 같이 진화한다.
“disaggregation 은 결국 같은 모델의 다른 부분을 다른 hardware 가 잘 돌릴 수 있다는 사실의 일반화다 — 그 부분이 phase 인지 operator 인지 layer 인지가 진화의 축.”학습 노트
§ 10기억할 메모와 코드· key takeaways · papers
다시 열었을 때 5분 안에 손으로 잡혀야 할 것
disaggregation 의 핵심 사실들과 직접 읽어야 할 자료들을 묶어둔다.
prefill = compute-bound
큰 GEMM 으로 도는 phase. Tensor Core saturate, HBM 절반. TTFT 가 SLO.
decode = memory-bound
GEMV 의 연속. HBM saturate, compute 절반. TPOT 가 SLO.
interference
co-located 시 prefill 이 decode 를 한 step 동안 멈춘다. p99 TPOT spike.
KV migration 비용
L_in × layers × 2 × n_kv_heads × head_dim × dtype. 70B/2K-prompt = 320 MB. NVLink 0.4 ms · PCIe 5~10 ms.
layer-pipelined transfer
layer i 의 KV 를 만들자마자 send. compute 와 통신 overlap. 마지막 layer 만 critical path.
goodput
SLO 만족한 요청 수 / 초. 평균 throughput 대신 봐야 할 metric.
GQA 친화성
KV head 가 적을수록 KV cache 작음 → migration 작음 → disagg 친화적.
workload 의존성
long prompt + short output 에서 분리 이득 가장 크다. 작은 모델 / 짧은 prompt 면 이득 작음.
손에 새기기 — 실습 시퀀스
- KV cache 크기 산수 — 가지고 있는 모델의 layer / n_kv_heads / head_dim 을 곱해 KV bytes/token 을 계산. prompt 평균 길이를 곱해 한 요청당 KV 크기, 평균 active req 수를 곱해 cluster KV footprint 를 추정.
- vLLM 으로 co-located baseline — 8-GPU 노드에서 70B 를 TP=8 로 띄우고 sweep.
--max-num-batched-tokens 와 --max-num-seqs 를 바꿔가며 TTFT/TPOT 분포 측정. p99 spike 가 어디서 생기는지 확인.
- vLLM disagg 옵션 켜기 — 같은 cluster 에서
--kv-transfer-config 으로 prefill/decode 분리. 4+4 배치. 같은 trace 로 비교.
- chunked prefill 와 비교 — SGLang 의 chunked prefill 모드와 disagg 의 4+4 모드를 같은 trace 로 돌리고 — 어떤 워크로드 mix 에서 어느 쪽이 이기는지 표.
- NCCL trace 로 transfer 시각화 —
NCCL_DEBUG=INFO 로 KV transfer 의 실제 시간을 timeline 위에 찍어 본다. layer-pipelined hide 가 잘 일어났는지 직접 확인.
- cross-node 시도 — 두 노드 사이에 InfiniBand 로 disagg. 같은 노드 NVLink 와 비교해 latency 추가분 측정. 200 Gb/s vs 400 Gb/s 의 영향.
§ 11다른 강의로 이어지는 길· connections
이 강의의 frame 이 다음에 어디에 다시 등장하는지
disaggregation 은 LLM serving 의 큰 frame 이라 GPU Mode 의 여러 강의와 직접 닿는다. 어떤 강의가 같은 trade-off 의 다른 면을 다루는지를 묶어둔다.
§ 12열린 질문· open questions
transcript 가 비어 있어 직접 검증해야 할 것들
이 강의는 video transcript 추출이 실패한 상태라 — 본문은 두 논문(Splitwise, DistServe)과 production 자료 위에서 재구성했다. 강의에서만 등장했을 가능성이 있는 사실들을 직접 영상에서 검증해야 한다.
- 발표자 Junda Chen 의 정확한 소속과 강의에서 다룬 자기 work — DistServe 공저자 또는 vLLM disagg 구현자 후보. transcript 없어 강의 내내 어떤 시스템을 중심으로 깐 건지 미확인.
- 강의에서 보여준 실제 benchmark 수치 — 본 노트의 30~80% 같은 수치는 두 논문 평균치를 재구성한 예시. 강의에서 더 구체적인 production trace (Azure / 확인 필요) 가 등장했을 가능성.
- chunked prefill vs full disagg 의 trade-off 비교 — 강의에서 두 접근의 어느 쪽을 더 강하게 옹호했는지 미확인. 이 노트는 두 접근이 hybrid 로 합쳐진다는 frame 으로 정리.
- cross-node / cross-cluster 동작 — InfiniBand / RDMA 위에서 KV transfer 의 실제 latency 분포는 강의에서 다뤘을 가능성이 높지만 직접 인용 없음.
- vLLM 의 disagg 구현 디테일 — vLLM 의 connector / KV transfer protocol 위치. 2024 후반부터 v1 에 들어가는 중. 강의 시점의 안정도가 미확인.
- 모델별 분리 이득의 차이 — Llama-3-70B / Mixtral 8x22B / DeepSeek-V3 처럼 architecture (GQA, MoE, MLA) 가 다르면 KV cache 형태도 다르다. 어느 모델에서 가장 큰 이득이 나는지 강의 안 정량화 미확인.
- elastic reconfiguration — 시간대별 traffic 변동에 따라 prefill/decode pool 크기를 동적으로 바꾸는 시스템 — 강의에서 어느 정도 깊이로 다뤘는지 미확인. SGLang / vLLM 모두 이 방향.
검증 메모
이 노트의 모든 수치 (KV migration 시간, throughput 배수, p99 latency) 는 두 논문의 그래프와 일반적 70B-class 산수에서 재구성한 예시값이다. 자기 클러스터 / 자기 모델에서 직접 측정하지 않은 절대값은 그대로 인용하지 말 것. 특히 cross-node 의 경우 InfiniBand 세대(NDR / HDR / EDR)에 따라 5×까지 차이.