Inside vLLM: Anatomy of a High-Throughput LLM Inference System (2025)

개요

vLLM은 고성능 LLM 추론 시스템으로, PagedAttention, Continuous Batching, Chunked Prefill, Prefix Caching, Guided Decoding, Speculative Decoding, Disaggregated P/D 등 핵심 시스템 컴포넌트와 고급 기능을 통합하여 높은 처리량과 낮은 지연 시간을 달성합니다.

주요 내용

* LLM Engine & Engine Core: vLLM의 기본 빌딩 블록으로, 스케줄링, PagedAttention, Continuous Batching 기능을 제공하며 오프라인 추론을 지원합니다.
* 엔진 구성 요소: vLLM config, processor, engine core client, output processor.
* Engine Core 구성 요소: Model Executor (UniProcExecutor, MultiProcExecutor), Structured Output Manager, Scheduler (FCFS, Priority), KV Cache Manager (PagedAttention의 핵심).
* 모델 실행기 초기화: CUDA 장치 할당, VRAM 확인, 분산 설정, 모델 로딩, KV 캐시 초기화, CUDA Graph 캡처.
* Generate 함수: 요청 유효성 검사 및 토큰화, EngineCoreRequest 생성, 스케줄러의 대기 큐 추가, step() 함수 반복 호출 (스케줄링, 순방향 전파, 후처리).
* 스케줄러: Prefill 요청과 Decode 요청을 혼합 처리하며, Decode 요청을 우선시하고 KV 캐시 할당 및 토큰 예산 업데이트.
* KV 캐시 관리: PagedAttention 메커니즘을 통해 KV 캐시 블록을 효율적으로 관리하며, allocate_slots 함수로 블록 할당.
* 순방향 전파: flattened된 시퀀스를 처리하고, Paged Attention 커널을 사용하여 각 시퀀스의 토큰만 주의를 기울이도록 함. CUDA Graph 캡처 모드 또는 Eager 모드로 실행.
* 고급 기능:
* Chunked Prefill: 긴 프롬프트를 여러 청크로 분할하여 처리함으로써 단일 청크가 엔진 단계를 독점하는 것을 방지하고 지연 시간을 줄임.
* Prefix Caching: 여러 프롬프트가 공유하는 초기 토큰의 KV 캐시를 재사용하여 Prefill 속도를 높임. Request 토큰의 해시를 생성하고 캐시된 해시와 비교하여 일치하는 블록 재사용.
* Guided Decoding (FSM): 문법 기반 유한 상태 기계(FSM)를 사용하여 각 디코딩 단계에서 허용되는 토큰만 샘플링하도록 로그릿을 제약.
* Speculative Decoding: 더 작은 드래프트 LM을 사용하여 후보 토큰을 미리 생성하고, 대형 LM으로 검증하여 토큰당 추론 비용을 줄임. vLLM V1에서는 n-gram, EAGLE, Medusa 등의 프로포저 구현.
* Disaggregated P/D (Prefill/Decoding): Prefill (계산 집약적)과 Decode (메모리 대역폭 집약적)의 성능 프로파일 차이를 활용하여 각기 다른 인스턴스에서 실행하고 KV 캐시를 공유.
* 확장 (Scaling up): 단일 GPU에서 멀티 GPU, 멀티 노드 실행 지원.
* 서빙 계층 (Serving Layer): 분산/동시 웹 스캐폴딩.
* 벤치마킹 및 자동 튜닝: 지연 시간 및 처리량 측정.

시사점

vLLM은 PagedAttention 및 Continuous Batching과 같은 혁신적인 기술을 통해 LLM 추론 성능을 획기적으로 향상시키며, 다양한 고급 기능을 통합하여 고효율 LLM 서빙 시스템 구축의 기반을 제공합니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions