본문 바로가기
L2 중급

LLM 추론 시스템의 원리

prefill·decode에서 KV 캐시·batching·양자화·vLLM까지 잇는 추론 원리.

LLM 추론·AI 인프라 · 2/3 로드맵 1개 모듈에서 사용
16챕터
1부(部)
2시간총 분량
첫 챕터 시작 →

챕터

개요

학습된 모델 파일이 추론 서버가 되어 요청을 처리하기까지, 그 원리를 개념·구조·증거로 연결해 읽는 힘을 기르는 중급(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부 · 메모리와 KV04 · weight와 runtime memoryVRAM을 차지하는 것은 가중치뿐인가?
05 · KV 캐시KV는 왜 자라며, 하한과 실제 할당은 어떻게 다른가?
06 · MHA, MQA, GQA, MLAattention 표현이 KV 크기를 어떻게 바꾸는가?
3부 · 스케줄링과 배칭07 · batch 효율요청을 묶으면 왜 이득이고, 그 이득은 언제 새는가?
08 · continuous batching배치를 매 반복 재구성한다는 것은 무엇을 결정하는가?
09 · PagedAttentionKV를 블록으로 나누면 어떤 낭비가 사라지는가?
10 · prefix caching같은 앞부분을 재사용할 때, 정확히 어디까지 안전한가?
4부 · 최적화의 절충11 · 양자화의 절충양자화는 무엇을 어디서 줄이고, 무엇을 잃는가?
12 · speculative decoding과 MTP추측으로 속도를 얻으면서 결과는 어떻게 보존하는가?
5부 · 시스템과 증거13 · vLLM 아키텍처개념들이 실제 한 엔진에서 어떤 책임 경계로 나뉘는가?
14 · 추론 지표각 지표는 이벤트·집계·분모로 어떻게 정의되는가?
15 · 벤치마크 주장 비판하기불완전한 결과표의 순위를 언제 거부하는가?
부록정의표·워크시트·치트시트·용어집참조용 도구 모음

학습법

  1. 순서대로 읽으세요. 각 장은 앞 장의 여정 위에 한 구간을 얹습니다.
  2. 콜아웃을 놓치지 마세요. 📌 핵심 / ⚠️ 흔한 오해 / 🔬 증거 읽기 / ⚖️ 절충 박스가 각 장의 뼈대입니다.
  3. 처음 보는 약어·기호는 본문에서 처음 등장할 때 풀이됩니다. 또한 부록의 기초 시스템·수학 용어 사전(대역폭·지연·부동소수점 등 일반 용어)과 주제 고유 용어집(KV 캐시·prefill 등 이 분야 용어)에서 다시 찾을 수 있습니다. 둘은 역할이 다릅니다.
  4. "지지하지 않는 결론" 절을 특히 눈여겨보세요. 각 장이 말할 수 없는 것을 명시합니다.

선수지식

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 · 학습된 모델에서 추론 서버까지