vLLM 내부: 고처리량 LLM 추론 시스템의 해부

vLLM은 LLM을 위한 가장 널리 사용되는 오픈소스 추론 엔진 중 하나이며, Aleksa Gordić의 최근 게시물은 내부 구조에 대한 탄탄한 기술적 분석을 제공합니다. 이 글은 현대 LLM 엔진이 어떻게 구축되는지 궁금한 개발자나 vLLM, SGLang 및 유사 프로젝트에 기여하려는 개발자를 대상으로 합니다. 분석은 커밋 42172ad(2025년 8월 9일)에 고정되어 있으며 새로운 V1 엔진에 초점을 맞춥니다(V0는 더 이상 사용되지 않음).
핵심 엔진 구성 요소
기사는 간단한 LLM 객체를 사용하는 오프라인 동기 설정으로 시작합니다. 엔진 생성자는 몇 가지 주요 부분으로 나뉩니다:
- vLLM 구성 – 모델, 캐시, 병렬 처리 등에 대한 모든 설정.
- 프로세서 – 검증 및 토큰화를 통해 원시 입력을 엔진 코어 요청으로 변환합니다.
- 엔진 코어 클라이언트 – 예제에서는 프로세스 내에서 실행되는
InprocClient입니다. 프로덕션에서는DPLBAsyncMPClient와 같은 다중 프로세스 클라이언트로 이동해야 합니다. - 출력 프로세서 – 엔진 코어 출력을 사용자 대상 요청 출력으로 변환합니다.
엔진 코어 자체에는 모델 실행기(순방향 패스 구동), 구조화된 출력 관리자(가이드 디코딩용), 대기/실행 대기열이 있는 스케줄러가 포함됩니다. 스케줄러는 정책(FCFS 또는 우선순위)을 사용하며 KV 캐시 관리자를 포함합니다.
페이지드 어텐션 및 KV 캐시
KV 캐시 관리자는 페이지드 어텐션의 핵심입니다. 사용 가능한 블록의 free_block_queue를 유지하며, VRAM 및 블록 크기에 따라 수십만 개가 될 수 있습니다. 표준 트랜스포머(비-MLA)의 블록 크기는 다음과 같이 계산됩니다:
2 * 블록 크기 * num_kv_heads * head_size * dtype_num_bytes
기본 설정의 경우 실용적인 블록 크기가 생성됩니다. 이 페이징 메커니즘은 효율적인 메모리 관리와 높은 처리량을 가능하게 합니다.
고급 기능
게시물은 기본 사항에 그치지 않고 vLLM을 프로덕션에 적합하게 만드는 고급 기능을 설명합니다:
- 청크 프리필 – 긴 프롬프트를 청크로 분할하여 생성과 인터리브합니다.
- 프리픽스 캐싱 – 공유 프롬프트 접두사에 KV 캐시를 재사용합니다.
- 가이드 디코딩 – 출력을 스키마나 문법으로 제한합니다.
- 투기적 디코딩 – 드래프트 모델을 사용하여 생성을 가속화합니다.
- 분리형 P/D – 서로 다른 GPU에서 프리필과 디코드를 분리합니다.
또한 다중 GPU 및 다중 노드 설정으로의 확장과 동시 웹 트래픽 처리를 위한 서빙 계층도 다룹니다. 벤치마크 및 자동 튜닝은 대기 시간과 처리량 측정에 언급됩니다.
LLM 추론 시스템을 구축하거나 확장하는 개발자에게 이 글은 vLLM이 스케줄링, 메모리 및 실행을 어떻게 조정하는지에 대한 명확한 개념 모델을 제공합니다. 시리즈의 첫 번째이므로 나중에 개별 하위 시스템에 대한 더 깊은 분석이 기대됩니다.
📖 전체 소스 읽기: HN LLM Tools
👀 See Also

NVIDIA, 개인정보 보호 기능을 갖춘 NemoClaw 에이전트 플랫폼 발표
NVIDIA가 NemoClaw를 출시했습니다. 이 에이전트 플랫폼은 사용자가 단일 명령어로 Nimotron 모델과 Open Shell 런타임을 설치하면서 자율 에이전트에 대한 개인정보 보호 및 보안 제어 기능을 추가할 수 있도록 합니다.

벤치마크 결과: 코드 생성 시 Claude Opus with Codex vs. Pure Opus 사용 시기
통제된 벤치마크에서 세 가지 실제 코딩 작업에 대해 'Opus로 계획하고 Codex로 실행' 접근법을 테스트했습니다. 결과는 약 600줄의 코드에서 비용 교차점이 발생하며, 프로젝트 규모에 따른 구체적인 권장사항을 보여줍니다.

생체 모방 메모리 시스템을 로컬 LLM에 적용: LTP 및 선택적 망각 구현
개발자가 장기 강화, 선택적 망각 감쇠, 주간 통합 주기를 포함한 생체 모방 메모리 메커니즘을 구현한 로컬 MCP 서버를 구축했습니다. 이 시스템은 sqlite-vec와 텍스트 폴백을 사용한 하이브리드 검색, asyncio 실행기를 통한 논블로킹 아키텍처를 사용하며, 지속적인 'Soul' 파일을 통해 상태를 유지합니다.

MiniMax M2.7 API 테스트: 세 가지 실제 머신러닝 및 코딩 워크플로우에서
한 개발자가 MiniMax M2.7과 Claude Opus 4.7을 세 가지 실제 작업(PyTorch 프로젝트 리팩터링, Obsidian 노트 작성 등)에서 비교 평가했습니다. 주요 결과와 설정을 포함합니다.