vLLM v0.25: MRv2 기본화·Rust 프론트엔드 성숙·PD 분리 2단계 — 운영자가 확인할 변화들
왜 지금 봐야 하나
vLLM v0.25.0은 2026년 7월 14일에 릴리스됐다. 숫자 자체보다 중요한 것은 이 릴리스가 세 가지 흐름이 동시에 수렴하는 지점이라는 점이다.
- Model Runner V2(MRv2)가 모든 밀집(dense) 모델에 기본값이 됐다. PagedAttention으로 대표되던 레거시 어텐션 구현체가 완전히 삭제됐다.
- Rust 프론트엔드가 mTLS·DP supervisor를 얹으면서 프로덕션 서버 역할을 할 수 있는 수준이 됐다. v0.24까지는 실험적이었던 Rust HTTP/gRPC 서버가 v0.25에서 정적 HTTPS와 mTLS를 지원한다.
- Disaggregated Prefill-Decode(PD 분리) 2단계가 올라왔다. Secondary tier 구현과 Mooncake 커넥터의 MLA(DeepSeek-V4-Flash) 지원으로 PD 분리가 프로덕션 배포 시나리오로 진입한다.
이 글은 각 변화의 배경과 구조, 그리고 기존 배포를 운영하는 사람이 확인해야 할 사항을 정리한다.
배경: V1 엔진이란 무엇인가
vLLM의 엔진은 크게 두 세대로 나뉜다.
V0 (레거시): PagedAttention 기반. CPU가 GPU 커널 디스패치를 직접 제어한다. 스케줄러와 실행기가 동기적으로 결합되어 있어, 배치 N의 GPU 실행 중에 CPU가 배치 N+1을 준비하기 어렵다.
V1 (현재 기본값): Model Runner V2가 핵심이다. Triton 커널을 PTX로 직접 컴파일하고, CPU 스케줄링과 GPU 실행을 디커플링한다. GPU가 배치 N을 실행하는 동안 CPU는 배치 N+1의 스케줄을 동시에 준비한다. 이 파이프라이닝이 V1 엔진의 핵심 성능 이점이다.
v0.25.0 이전까지는 특정 모델(멀티모달, 임베딩 등)에 레거시 V0 경로가 남아 있었고, --enforce-eager 플래그가 일부 모델에서는 여전히 필요했다. v0.25.0에서는 이 레거시 구현체 전체가 삭제됐다.
MRv2 기본화: 무엇이 바뀌나
PagedAttention 삭제
PagedAttention은 vLLM을 처음 알린 기술이다. GPU 메모리를 논리 블록으로 나눠 KV 캐시를 가상 메모리처럼 관리한다는 아이디어였다. MRv2에서는 이 추상화가 더 단순한 구조로 대체됐다.
MRv2는 호스트 메모리를 핀(pin)하고 직접 DMA 전송을 사용한다. 토큰 샘플링과 출력 처리 중 발생하던 불필요한 메모리 복사가 제거된다. 코드 경로도 단순해진다.
영향을 받는 운영 항목
--use-v2-block-manager플래그가 제거됐다. V2가 기본이므로 무의미해졌다.- Baichuan, Aquila, Grok, Tarsier, Mantis 모델이 공식적으로 제거됐다. 이 모델들을 운영하고 있다면 대안 모델을 찾아야 한다.
- 구
api_server.py가examples/디렉터리로 이동됐다. 외부에서 경로를 하드코딩한 스크립트가 있다면 수정이 필요하다.
MRv2 신규 지원 범위
임베딩(embedding) 서빙, Mamba 하이브리드 모델의 프리픽스 캐싱, 동적 스페큘레이티브 디코딩이 MRv2 위에서 동작한다. 이전에는 이 기능들에 레거시 V0 경로가 필요하거나 제한이 있었다.
Rust 프론트엔드: 무엇이 달라졌나
vLLM은 원래 Python으로 만든 AsyncLLMEngine이 HTTP 서버 역할을 했다. Rust 프론트엔드는 이 HTTP/gRPC 레이어를 Rust로 재작성해 C10k 문제를 해결하고 CPU 오버헤드를 낮추는 방향으로 개발됐다.
v0.25.0에서 Rust 프론트엔드에 추가된 주요 기능:
정적 HTTPS와 mTLS: HTTP와 gRPC 엔드포인트 모두에서 TLS 인증서를 정적으로 설정하고 상호 TLS(mTLS)를 적용할 수 있다. 이전에는 앞단에 리버스 프록시(nginx, envoy 등)를 두는 방식으로 우회했다.
DP Supervisor: 데이터 병렬(Data Parallel) 배포에서 여러 엔진 인스턴스를 단일 Rust 프론트엔드가 감독한다. 엔진이 죽었을 때 재시작 로직과 상태 추적을 Supervisor가 담당한다.
프로파일러 제어 라우트: /profile/start, /profile/stop 같은 HTTP 엔드포인트로 실행 중인 엔진의 프로파일링을 원격으로 켜고 끌 수 있다. 프로덕션 인스턴스에서 재배포 없이 성능 측정이 가능하다.
Unified/Combined Parser Interface: 도구 호출(tool call) 파싱과 추론 파싱이 같은 인터페이스로 통합됐다. Kimi 파서와 seed_oss, DeepSeek V4 파서가 이 인터페이스 위에서 동작한다.
Disaggregated Prefill-Decode(PD 분리) 2단계
PD 분리의 기본 아이디어
LLM 추론에는 두 단계가 있다. Prefill(프리필)은 프롬프트 토큰 전체를 한 번에 처리한다. 컴퓨트 집약적이다. Decode(디코드)는 토큰을 하나씩 생성한다. 메모리 대역폭 집약적이다.
단일 노드에서 두 단계를 섞으면 긴 프리필이 진행 중인 디코드 배치의 지연을 유발한다. PD 분리는 이 두 단계를 다른 GPU 풀에서 독립적으로 처리한다.
v0.25의 PD 분리 신규 사항
Secondary tier 구현: 이전에는 단일 프리필 풀과 단일 디코드 풀의 2티어 구조였다. Secondary tier가 추가되면서 프리필 결과(KV 블록)를 중간 계층 스토리지에 보관하고 디코드 풀이 이를 가져가는 구조가 가능해졌다.
Mooncake 커넥터 MLA 지원: DeepSeek-V4-Flash의 멀티헤드 레이턴트 어텐션(MLA) 구조에서 KV 블록을 Mooncake 커넥터를 통해 전송할 수 있다. MLA는 KV 캐시 크기를 줄이는 기법이지만 전송 포맷이 다르다. v0.25에서 이 포맷을 처리하는 로직이 추가됐다.
NIXL Mamba1 지원: NIXL은 GPU 간 고속 KV 블록 전송을 담당하는 라이브러리다. Mamba1 SSM(State Space Model) 아키텍처의 상태(state) 전송이 NIXL을 통해 지원된다.
운영자가 확인할 마이그레이션 포인트
1) 레거시 플래그 제거 확인
v0.25.0 이후 다음 플래그들은 효과가 없거나 오류를 유발할 수 있다.
--use-v2-block-manager # 제거됨 (V2가 기본값)
--enforce-eager # 일부 모델에서 여전히 유효하지만 기본 동작 변경실행 스크립트에 이 플래그들이 남아 있다면 제거하거나 최신 문서를 확인한다.
2) 제거된 모델 대응
아래 모델은 v0.25.0 모델 주에서 제거됐다.
- Baichuan, Aquila: 대안 모델로 교체 필요
- Grok: xAI 공식 배포 방식 확인
- Tarsier, Tarsier2, Mantis, AyaVision, MusicFlamingo
운영 중이라면 v0.24.x를 유지하면서 대안 모델을 평가한다.
3) api_server.py 경로 변경
# 이전
from vllm.entrypoints.api_server import ...
# v0.25 이후 이 경로는 examples/에 있음
from vllm.entrypoints.openai.api_server import ... # OpenAI 호환 서버 사용 권장4) Rust 프론트엔드 HTTPS 설정
Rust 프론트엔드를 사용하고 TLS를 적용하려면:
vllm serve <model> \
--uvicorn-log-level info \
--ssl-keyfile /path/to/key.pem \
--ssl-certfile /path/to/cert.pem \
--ssl-ca-certs /path/to/ca.pem \
--ssl-client-auth require # mTLS 활성화5) 보안 픽스 적용 여부 확인
v0.25.0에는 두 가지 보안 픽스가 포함됐다.
- 압축 폭탄(decompression-bomb) OOM 공격: 압축된 요청 본문이 메모리를 과도하게 소비하는 공격을 방어하는 로직이 추가됐다.
- 요청 수준 GPU 백엔드 선택 취약점: 특정 파라미터로 다른 GPU 백엔드를 강제 선택하는 취약점이 수정됐다.
인터넷에 직접 노출된 vLLM 서버라면 v0.25.0 이상으로 업그레이드가 권장된다.
성능 수치 정리
| 영역 | 개선 내용 | 측정값 |
|---|---|---|
| 시퀀스 병렬화 | DP 없이도 E2E 처리량 향상 | +1.9~5.0% |
| Fused indexing | GLM-5.2·DeepSeek MoE | +1.9~3.3% |
| Reduce-scatter MoE | All-reduce 최적화 | +3.1~3.2% |
| Token-to-request 캐싱 | 커널 속도 | 5~6× |
| Transformers 백엔드 | 네이티브 vLLM과 동등 속도 | FP8 MoE 지원 |
시퀀스 병렬화는 데이터 병렬(DP) 없이 단일 노드에서 시퀀스를 여러 rank에 분산 처리하는 방식이다. DP 설정이 없는 배포에서도 처리량 향상을 얻을 수 있다.
v0.25.0 도입 체크리스트
- [ ] 실행 스크립트에서 제거된 플래그(
--use-v2-block-manager등)를 제거한다. - [ ] 운영 중인 모델이 v0.25.0 제거 목록(Baichuan, Grok 등)에 포함되는지 확인한다.
- [ ]
vllm.entrypoints.api_server경로 의존성을openai.api_server로 마이그레이션한다. - [ ] Rust 프론트엔드를 사용한다면 정적 TLS/mTLS 설정으로 앞단 nginx/envoy를 대체할 수 있는지 평가한다.
- [ ] 인터넷 노출 서버라면 보안 픽스(압축 폭탄, GPU 백엔드 취약점)를 확인하고 업그레이드한다.
- [ ] PD 분리 배포를 운영한다면 Mooncake 커넥터의 MLA 지원을 확인하고 설정을 업데이트한다.
- [ ]
--enforce-eager없이 MRv2가 정상 동작하는지 스테이징에서 먼저 검증한다.
한 문장으로
vLLM v0.25.0은 레거시 PagedAttention 구현체를 완전 삭제하고 MRv2를 모든 밀집 모델의 기본 경로로 확립하면서, Rust 프론트엔드에 mTLS와 DP 감독 기능을 얹고 PD 분리 2단계(Secondary tier·MLA·Mamba1 NIXL)를 추가한 릴리스다.
References
- Release v0.25.0 · vllm-project/vllm (GitHub): https://github.com/vllm-project/vllm/releases/tag/v0.25.0
- vLLM Blog — Official Release Posts: https://blog.vllm.ai/
- vLLM Docs: Disaggregated Prefilling: https://docs.vllm.ai/en/latest/features/disagg_prefill/
- vLLM Production Deployment Guide 2026 (SitePoint): https://www.sitepoint.com/vllm-production-deployment-guide-2026/
- vLLM Model Runner V2 Deployment Guide (Spheron Blog): https://www.spheron.network/blog/vllm-model-runner-v2-mrv2-deployment-guide/
- vLLM July 2026 Release Notes (NVIDIA Docs PDF): https://docs.nvidia.com/deeplearning/frameworks/pdf/vLLM-Release-Notes.pdf