LLM WikiAccess-protected knowledge portal
← 스터디 홈
33편 · 약 16분

vLLM v0.25: MRv2 기본화·Rust 프론트엔드 성숙·PD 분리 2단계 — 운영자가 확인할 변화들

왜 지금 봐야 하나

vLLM v0.25.0은 2026년 7월 14일에 릴리스됐다. 숫자 자체보다 중요한 것은 이 릴리스가 세 가지 흐름이 동시에 수렴하는 지점이라는 점이다.

  1. Model Runner V2(MRv2)가 모든 밀집(dense) 모델에 기본값이 됐다. PagedAttention으로 대표되던 레거시 어텐션 구현체가 완전히 삭제됐다.
  2. Rust 프론트엔드가 mTLS·DP supervisor를 얹으면서 프로덕션 서버 역할을 할 수 있는 수준이 됐다. v0.24까지는 실험적이었던 Rust HTTP/gRPC 서버가 v0.25에서 정적 HTTPS와 mTLS를 지원한다.
  3. 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.pyexamples/ 디렉터리로 이동됐다. 외부에서 경로를 하드코딩한 스크립트가 있다면 수정이 필요하다.

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 파서가 이 인터페이스 위에서 동작한다.

vLLM v0.25 아키텍처: Rust 프론트엔드 + V1/MRv2 엔진 HTTP 클라이언트 OpenAI Compatible API gRPC 클라이언트 내부 서비스 Rust 프론트엔드 (v0.25 신규 기능) 정적 HTTPS / mTLS HTTP + gRPC 지원 DP Supervisor 다중 엔진 감독·재시작 프로파일러 제어 라우트 /profile/start·stop V1 엔진 / Model Runner V2 (MRv2) Scheduler (CPU) 배치 N+1 준비 (GPU 실행 중) KV 블록 할당·프리픽스 캐시 조회 Model Runner V2 (GPU) Triton 커널 → PTX 컴파일 CUDA Graph + Direct DMA KV Cache (Prefix Caching) Mamba 하이브리드 지원 (신규) 85-95% 캐시 히트 시 비용 절감 Universal Spec Decoding (신규) 이종 어휘(TLI) 지원 DSpark / DFlash 드래프터 PD 분리 (Disaggregation) v0.25 신규: Secondary tier Prefill Pool 컴퓨트 집약적 TTFT 최적화 Decode Pool 메모리 대역폭 집약적 처리량 최적화 Mooncake Connector MLA (DeepSeek-V4-Flash) GDN (Qwen3.5) 지원 NIXL: Mamba1 지원 추가 v0.25 성능 개선 시퀀스 병렬화 1.9~5% E2E 처리량 향상 · token-to-request 캐싱 5~6× 커널 가속 GLM-5.2/DeepSeek MoE reduce-scatter 3.1~3.2% · fused indexing 1.9~3.3%
vLLM v0.25 엔진 아키텍처: Rust 프론트엔드와 V1/MRv2

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 indexingGLM-5.2·DeepSeek MoE+1.9~3.3%
Reduce-scatter MoEAll-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