LLM WikiAccess-protected knowledge portal
← 스터디 홈
153편 · 약 15분

vLLM v0.28.0: 요청 우선순위·세션 ID·Rust gRPC 제어면으로 LLM 서빙 운영 경계를 다시 그은 방법

요약

vLLM v0.28.0이 2026년 8월 24일 출시됐다. 584개 커밋, 270명 기여자(76명 신규). 이번 릴리스의 핵심은 서빙 제어면의 확장이다.

세 가지 축으로 정리된다:

  1. 요청 우선순위와 세션 ID: HTTP 헤더에서 우선순위를 파싱하고, 세션 ID를 요청 전체에 관통시킨다.
  2. Rust 프론트엔드 성숙: 독립 렌더러, gRPC 멀티모달 이미지 추론, 명시적 데이터 병렬 랭크 라우팅, RL 라이프사이클 제어.
  3. 투기적 디코딩 고도화: DFlash2 로컬 컨볼루션·후보 선택기, DSpark 신뢰도 스케줄링 검증, 드래프트 모델 비동기 스케줄링 기본 활성화.

이전 릴리스(v0.27.0)가 Kimi K3 전 스택 착지와 FA4 FP8에 집중했다면, v0.28.0은 운영자가 요청 흐름을 더 세밀하게 제어할 수 있는 표면을 넓혔다.


요청 우선순위와 세션 ID

HTTP 헤더 기반 우선순위

v0.28.0 이전에는 vLLM에 도달한 요청의 우선순위를 서빙 레이어에서 구분하는 공식적인 방법이 없었다. 이번 릴리스는 HTTP 헤더에서 요청 우선순위를 읽는다:

X-Request-Priority: high

엔진 내부의 스케줄러는 이 값을 기준으로 대기열에서의 순서를 조정한다. 프리미엄 SLO가 있는 테넌트와 배치 추론 작업이 같은 엔드포인트를 공유할 때 유용하다.

세션 ID 관통

세션 ID가 요청 전체 생명주기를 관통한다. 로깅, 메트릭, 트레이스 모두 같은 session_id를 키로 쓰면 멀티턴 에이전트 대화를 한 스레드로 관찰할 수 있다.

X-Session-Id: sess-ae3f12b0

스트리밍 파서의 count_reasoning_tokens

스트리밍 응답에서 count_reasoning_tokens 필드가 추가됐다. 추론 토큰(thinking tokens)을 별도로 집계해야 하는 과금·모니터링 시스템에서 유용하다. claude-sonnet-4-6처럼 어댑티브 씽킹을 지원하는 모델에서는 reasoning 토큰 수가 출력 토큰과 별도로 계산된다.

{
  "id": "cmpl-abc",
  "choices": [...],
  "usage": {
    "prompt_tokens": 1024,
    "completion_tokens": 512,
    "reasoning_tokens": 388
  }
}

Rust 프론트엔드: 독립 렌더러와 gRPC 확장

클라이언트 계층
HTTP/1.1·HTTP/2 클라이언트
gRPC 클라이언트
Anthropic API 클라이언트
Rust 프론트엔드 (신규/성숙)
독립 렌더러
Jinja2 → MiniJinja 2.22
gRPC 멀티모달 이미지 추론
명시적 DP 랭크 라우팅
RL 라이프사이클 제어
동적 도구 (developer msg)
protobuf → Buf 공개
Python 엔진 계층
Scheduler
Model Runner V2
Attention Backend
KV Cache Manager
GPU 계층
H100/H200/B200
AMD MI300X
Apple Silicon (실험)
vLLM v0.28.0 아키텍처: Rust 프론트엔드와 Python 엔진 분리

독립 렌더러

Rust 프론트엔드가 Python 없이 독립적으로 프롬프트 템플릿을 렌더링한다. MiniJinja 2.22로 업그레이드하면서 {% for %} 루프, 필터 체이닝, 매크로 등 더 복잡한 채팅 템플릿을 처리할 수 있다. Jinja2와의 동작 차이를 확인하는 것이 v0.28.0 업그레이드 시 주의사항이다.

gRPC 멀티모달 이미지 추론

gRPC 경로로 이미지를 포함한 멀티모달 요청을 처리할 수 있다. 이미지 바이트를 HTTP multipart 대신 protobuf 메시지로 직렬화해 전송한다. protobuf 스키마가 Buf Registry에 공개됐기 때문에 타입 안전한 클라이언트 코드 생성이 가능하다.

명시적 데이터 병렬 랭크 라우팅

데이터 병렬(DP) 환경에서 특정 랭크로 요청을 명시적으로 라우팅하는 기능이 추가됐다. 실험 재현, 디버깅, 특정 랭크 부하 측정에 사용한다.

RL 라이프사이클 제어

강화학습 파이프라인에서 vLLM을 추론 서버로 사용할 때, 학습 중 rollout_start / rollout_end 이벤트를 통해 RL 에이전트와 서버의 라이프사이클을 조율할 수 있다. PPO/GRPO 루프에서 배치 경계를 명확히 하는 데 사용한다.


투기적 디코딩: DFlash2와 DSpark 내장

DFlash2 로컬 컨볼루션과 후보 선택기

DFlash2는 SSM(State Space Model) 계층의 투기적 디코딩을 위한 드래프터다. v0.28.0에서 로컬 컨볼루션후보 선택기가 추가됐다.

  • 로컬 컨볼루션: SSM 상태를 컨볼루션 커널로 압축해 드래프트 속도를 높인다.
  • 후보 선택기: 여러 드래프트 토큰 중 타깃 모델이 수락할 가능성이 높은 것을 선별해 검증 배치를 줄인다.
드래프트 N개 토큰 → 후보 선택기 → 상위 k개만 타깃에 제출
                                 → 수락된 토큰으로 시퀀스 확장

DSpark 신뢰도 스케줄링 검증

DSpark(confidence-scheduled speculative decoding)가 vLLM에 내장됐다. 드래프터가 생성한 각 토큰에 신뢰도 점수를 매기고, 신뢰도가 낮은 위치부터 가변 길이의 검증 배치를 구성한다. 고정 길이 배치 대비 검증 효율을 높인다.

드래프트 모델 비동기 스케줄링 기본 활성화

투기적 디코딩 구성에서 드래프트 모델과 타깃 모델의 실행이 기본적으로 비동기로 겹쳐 실행된다. 이전에는 명시적으로 활성화해야 했다.


새 모델 지원

모델주요 특징vLLM 지원 방식
Ling 3.0 FlashKDA+MLA 하이브리드, BF16/FP8/MXFP4BF16 + MTP 파서 + FP8 변종 + MXFP4 라우팅 전문가
Dots3 NOTE네이티브 멀티모달텍스트·이미지·오디오 통합 입력
Muse Glimmer기본 지원
Interns2mobius기본 지원
Qwen3.8AMD ROCm 지원 추가ROCm 경로 활성화

Transformers 모델링 백엔드 개선

HuggingFace Transformers 기반 모델 정의 경로가 강화됐다:

  • MLA 지원: DeepSeek 스타일 Multi-head Latent Attention을 Transformers 백엔드에서 처리
  • 하드웨어 무관 모델 정의: CUDA/ROCm/CPU 독립적인 모델 구현
  • 완전 일반화된 입력 임베딩: 텍스트·이미지·오디오를 동일한 임베딩 파이프라인으로 처리
  • logit softcapping: Gemma/Gemini 스타일 logit 클리핑 지원

Anthropic API 호환성 변화

Anthropic 호환 엔드포인트(/v1/messages)의 동작이 변경됐다.

상황이전v0.28.0
클라이언트 오류 (잘못된 파라미터 등)5xx 반환 가능4xx 반환 보장
disable_parallel_tool_use 설정일부 경로에서 무시항상 보존
stop sequence 처리무제한길이 제한 적용

4xx 변경은 클라이언트 재시도 로직에 영향을 줄 수 있다. 5xx를 재시도하는 클라이언트가 4xx를 만나면 재시도를 멈춰야 한다.


LoRA와 비전 인코더 개선

  • Gemma4: Vision tower에 LoRA 적용 가능
  • Keye, Ultravox: tower와 connector 모두 LoRA 지원
  • Kimi-K2.5, Ernie-4.5-VL: ViT 전체 CUDA graph 캡처 (예열 시간 감소)
  • Qwen3-VL 인코더: torch.compile 지원 추가

운영 체크리스트

v0.27.0 → v0.28.0 업그레이드 시 확인 사항

□ MiniJinja 2.22 채팅 템플릿 호환성 검증
  - custom_chat_template.jinja2가 있다면 MiniJinja 2.22에서 렌더링 테스트
  - Python Jinja2와 동작 차이 확인 (특히 undeclared 변수 처리)

□ Anthropic 호환 클라이언트 재시도 로직 검토
  - 4xx 응답을 재시도하지 않도록 확인

□ 요청 우선순위 도입 시
  - 게이트웨이에서 X-Request-Priority 헤더 주입
  - 우선순위별 SLO 기준 설정

□ 투기적 디코딩 사용자
  - 드래프트 모델 비동기 스케줄링 기본 활성화 확인
  - DFlash2 / DSpark 설정 검토

새 메트릭

vllm:request_priority_histogram       # 우선순위 분포
vllm:session_token_count             # 세션별 누적 토큰
vllm:reasoning_tokens_per_request    # 추론 토큰 분포
vllm:draft_acceptance_rate           # 투기적 디코딩 수락률

Open questions

  • 요청 우선순위가 PagedAttention KV 캐시 퇴출 순서에도 영향을 주는지 미확인
  • DSpark가 기존 EAGLE/Medusa 드래프터와 조합될 때의 수락률 비교 수치 미공개
  • vLLM Recipes의 config-based 배포가 어떤 형식의 YAML을 사용하는지 문서화 진행 중

References

  • https://github.com/vllm-project/vllm/releases/tag/v0.28.0 — vLLM v0.28.0 Release Notes (2026-08-24)
  • https://vllm.ai/blog — vLLM 공식 블로그
  • https://docs.vllm.ai/en/latest/features/spec_decode/ — vLLM Speculative Decoding 문서
  • https://github.com/vllm-project/vllm/pull/40848 — Rust 프론트엔드 통합 RFC PR
  • https://github.com/vllm-project/vllm/issues/40846 — Rust 프론트엔드 RFC 이슈
  • https://vllm-project.github.io/ — vLLM Blog