L2 중급
첫 챕터 시작 →
LLM 추론 시스템의 원리
prefill·decode에서 KV 캐시·batching·양자화·vLLM까지 잇는 추론 원리.
LLM 추론·AI 인프라 · 2/3 로드맵 1개 모듈에서 사용16챕터
1부(部)
2시간총 분량
챕터
01학습된 모델에서 추론 서버까지
02tokenization, prefill, decode
03prefill과 decode의 서로 다른 병목
04weight와 runtime memory
05KV 캐시
06MHA, MQA, GQA, MLA
07batch 효율
08continuous batching
09PagedAttention
10prefix caching
11양자화의 절충
12speculative decoding과 MTP
13vLLM 아키텍처
14추론 지표
15벤치마크 주장 비판하기
·부록
개요
학습된 모델 파일이 추론 서버가 되어 요청을 처리하기까지, 그 원리를 개념·구조·증거로 연결해 읽는 힘을 기르는 중급(L2) 안내서입니다.
이 안내서는 무엇인가 (그리고 무엇이 아닌가)
이 안내서는 코드 실습서가 아닙니다. GPU 커널을 짜거나 프로덕션 서버를 튜닝하는 처방을 주지 않습니다. 대신 다음을 기릅니다.
- 개념을 서로 연결하는 힘: tokenization → prefill → decode → KV 캐시 → batching → 스케줄링 → 지표가 어떻게 한 요청 안에서 이어지는가.
- 조건과 경계를 읽는 힘: "decode는 memory-bound다" 같은 문장이 어떤 조건에서 참이고 어떤 조건에서 뒤집히는가.
- 증거를 등급으로 읽는 힘: 성능·품질 주장이 measured / vendor-reported / calculated / inferred 중 무엇인지 구분하는 습관.
범위 밖 (명시적으로 다루지 않음)
GPU 커널 실습, 프로덕션 튜닝 처방·운영 지침, 특정 엔진·가속기 구매 추천, 프로덕션 사이징, 성능 보장. 특정 프레임워크(vLLM 등)는 개념을 설명하기 위한 사례로만 등장하며, 추천·보증이 아닙니다.
전체 그림 — 하나의 추론 요청을 따라가기
이 안내서의 척추는 하나의 추론 요청이 시스템을 통과하는 여정입니다. 각 장은 이 여정의 한 구간을 확대합니다.
flowchart LR
U[사용자 요청]:::req --> API[API 서버]:::ctrl
API --> TOK[tokenization]:::comp
TOK --> SCHED[스케줄러<br/>admission·batching]:::ctrl
SCHED --> PRE[prefill phase]:::comp
PRE --> KV[(KV 캐시)]:::mem
PRE --> DEC[decode phase<br/>반복]:::comp
DEC --> KV
DEC --> OUT[detokenization<br/>streaming 출력]:::comp
OUT --> M[지표<br/>TTFT·TPOT·throughput]:::result
M -.측정·판정.-> U
classDef req fill:#fff3bf,stroke:#f59f00,color:#000;
classDef comp fill:#d0ebff,stroke:#1971c2,color:#000;
classDef mem fill:#e5dbff,stroke:#7048e8,color:#000;
classDef ctrl fill:#c3fae8,stroke:#0ca678,color:#000;
classDef result fill:#d3f9d8,stroke:#2f9e44,color:#000;
색상 규약: 요청/데이터=노랑, 연산 phase=파랑, 메모리/KV=보라, 스케줄러/제어=청록, 지표/결과=초록, 병목/함정=빨강. 모든 장의 다이어그램이 같은 팔레트를 씁니다.
목차
| 부 | 장 | 핵심 질문 |
|---|---|---|
| 1부 · 여정의 지도 | 01 · 학습된 모델에서 추론 서버까지 | 가중치 파일 하나가 어떻게 요청을 처리하는 서버가 되는가? |
| 02 · tokenization, prefill, decode | 요청은 어떤 계산 phase를 지나며, "첫 토큰"은 언제 나오는가? | |
| 03 · prefill과 decode의 서로 다른 병목 | "prefill은 compute-bound, decode는 memory-bound"는 언제 참인가? | |
| 2부 · 메모리와 KV | 04 · weight와 runtime memory | VRAM을 차지하는 것은 가중치뿐인가? |
| 05 · KV 캐시 | KV는 왜 자라며, 하한과 실제 할당은 어떻게 다른가? | |
| 06 · MHA, MQA, GQA, MLA | attention 표현이 KV 크기를 어떻게 바꾸는가? | |
| 3부 · 스케줄링과 배칭 | 07 · batch 효율 | 요청을 묶으면 왜 이득이고, 그 이득은 언제 새는가? |
| 08 · continuous batching | 배치를 매 반복 재구성한다는 것은 무엇을 결정하는가? | |
| 09 · PagedAttention | KV를 블록으로 나누면 어떤 낭비가 사라지는가? | |
| 10 · prefix caching | 같은 앞부분을 재사용할 때, 정확히 어디까지 안전한가? | |
| 4부 · 최적화의 절충 | 11 · 양자화의 절충 | 양자화는 무엇을 어디서 줄이고, 무엇을 잃는가? |
| 12 · speculative decoding과 MTP | 추측으로 속도를 얻으면서 결과는 어떻게 보존하는가? | |
| 5부 · 시스템과 증거 | 13 · vLLM 아키텍처 | 개념들이 실제 한 엔진에서 어떤 책임 경계로 나뉘는가? |
| 14 · 추론 지표 | 각 지표는 이벤트·집계·분모로 어떻게 정의되는가? | |
| 15 · 벤치마크 주장 비판하기 | 불완전한 결과표의 순위를 언제 거부하는가? | |
| 부록 | 정의표·워크시트·치트시트·용어집 | 참조용 도구 모음 |
학습법
- 순서대로 읽으세요. 각 장은 앞 장의 여정 위에 한 구간을 얹습니다.
- 콜아웃을 놓치지 마세요. 📌 핵심 / ⚠️ 흔한 오해 / 🔬 증거 읽기 / ⚖️ 절충 박스가 각 장의 뼈대입니다.
- 처음 보는 약어·기호는 본문에서 처음 등장할 때 풀이됩니다. 또한 부록의 기초 시스템·수학 용어 사전(대역폭·지연·부동소수점 등 일반 용어)과 주제 고유 용어집(KV 캐시·prefill 등 이 분야 용어)에서 다시 찾을 수 있습니다. 둘은 역할이 다릅니다.
- "지지하지 않는 결론" 절을 특히 눈여겨보세요. 각 장이 말할 수 없는 것을 명시합니다.
선수지식
Transformer의 기본 구조와 토큰 생성(autoregressive) 원리는 안다고 가정합니다. 시스템 기초(bit·정밀도, compute-bound/memory-bound, 메모리 계층 RAM/VRAM/대역폭, latency·throughput·concurrency)는 처음 쓸 때 짧게 상기시키되, 깊은 설명은 선수 과정에 맡깁니다.
⚠️ 확인일과 버전 고정 (Pinning)
- 원리(prefill/decode의 구분, KV 캐시가 존재하는 이유, batching의 개념)는 안정적입니다 — 정확히 설명합니다.
- 버전 의존적인 것(프레임워크 컴포넌트 명칭·API·기본값, 특정 모델의 KV 표현, 성능 수치)은 웹 검색으로 확인하고 확인일·버전을 명시합니다. 확인 못 한 항목은
unknown으로 남기고 단정하지 않습니다. - 이 안내서의 웹 확인일: 2026-07-20.
- 버전 고정 방침: 개념 설명을 우선하며, vLLM을 사례로 들 때는 V1 아키텍처(2025-01 재설계 이후) 기준임을 명시합니다. 세부 컴포넌트 명칭·API는 vLLM 버전마다 바뀌므로, 논문의 원 설계와 특정 버전의 현재 명칭을 구분합니다.
이 안내서를 마치면
- 하나의 추론 요청이 시스템을 지나는 전 경로를 컴포넌트 책임 경계와 함께 그릴 수 있습니다.
- KV 캐시·batching·양자화 같은 개념을 조건부 주장으로 다룰 수 있습니다.
- 벤치마크 순위표를 보고 "이 주장은 어떤 조건에서 성립하는가"를 물을 수 있습니다.
시작: 01 · 학습된 모델에서 추론 서버까지