vLLM 프로젝트가 v0.32.0을 내놓으며 POST /v1/systemone 엔드포인트를 새로 넣었다. 구조화된 상태를 입력으로 받아 choice, noul, score 세 종류의 질문에 답하는 기능이며, 기본으로 제공된다. Cloudflare/clef-omni, LiquidAI/d1-3B, DiffusionGemma에서도 돌아간다.
이번 릴리스에는 363명의 기여자가 만든 814개 커밋이 담겼고, 이 가운데 121명은 처음 참여했다. 설치는 CUDA 13.0 기준 pip install vllm이고, Docker 이미지는 vllm/vllm-openai:v0.32.0이다. ROCm, CPU, XPU용 이미지와 휠도 따로 나왔다. 다만 Python 3.10 지원이 끊기고 CORS 기본값이 바뀌는 등 기존 환경에 영향을 주는 변경이 있어 업그레이드 전 확인이 필요하다.
systemone 엔드포인트와 범용 파서
새 hf 도구 파서와 추론 모델 파서는 --tool-call-parser hf, --reasoning-parser hf 옵션으로 켠다. 체크포인트에 들어 있는 response_template을 읽기 때문에, 이 템플릿을 제공하는 모델은 모델별 파서가 필요 없다. Python과 Rust 프런트엔드 모두에서 동작한다.
도구 호출과 구조화 출력 쪽에서는 parallel_tool_calls=false가 강제로 적용되고, tool_choice="required" 스트리밍이 지원된다. JSON 스키마가 64단계보다 깊게 중첩되면 400 오류를 돌려준다. Rust 프런트엔드에는 --grpc-port, --stream-interval 옵션과 qwen3_json 파서가 추가됐다.
성능과 모델 지원
KV 캐시의 저정밀도 지원이 넓어졌다. NVFP4 KV 캐시가 SM8x, SM12x, SM90에서 돌아가고, GLM-5.x는 SM100에서 FP8 KV 캐시가 기본값이 되어 처리량이 2.3~5.5% 늘었다. SM90의 fp8_ds_mla는 GLM-5.3-Flash 출력 처리량을 최대 31% 높였다. ROCm에는 FP8의 약 2배 밀도인 4비트 ultraquant_4bit KV 캐시가 들어갔다.
서버 기동과 요청 분배도 달라졌다. vllm download-kernels는 FlashInfer의 사전 컴파일 커널을 설치하고, vllm preload --preload-autotune은 자동 튜닝 결과를 재시작 뒤에도 유지한다. --api-server-count를 1보다 크게 잡으면 연결을 부하가 가장 적은 API 워커로 보내며, 짧은 요청에서 초당 요청 수가 43~85% 늘었다고 릴리스 노트는 적었다.
새로 지원하는 모델은 EmbeddingGemma 2(google/embeddinggemma-2), MiniCPM-V 4.7, Nemotron 3.5 ASR이다. EmbeddingGemma 2는 텍스트·이미지·오디오·비디오를 다루는 임베딩 모델이다. Transformers 모델링 백엔드는 비디오 입력을 받게 됐다. Model Runner V2에는 GPU n-gram 추측기와 Elastic EP 등이 추가됐고, ROCm에서는 모든 모델의 기본값이 됐다.
보안 수정과 호환성 변경
보안 패치는 세 건이다. GHSA-4hhp-h66f-j5j7은 채팅 템플릿 자원 고갈로, 템플릿을 정적으로 검증하고 제한 시간 안에서 렌더링한다. GHSA-q97c-p368-75c4는 토크나이저 max_token_id 오류이고, GHSA-frvg-qw88-hww9는 P2P ZMQ 소켓 고갈이다. 신뢰할 수 없는 이미지는 래스터 형식만 열리며 EPS/PostScript와 WMF는 막혔다. 공유 메모리 멀티모달 캐시 핸들에는 HMAC 서명이 붙는다.
기본 CORS 설정은 모든 출처 허용(*)에서 허용 없음으로 바뀌었다. 브라우저 클라이언트를 쓰려면 --allowed-origins를 지정해야 한다.
| 항목 | 변경 내용 |
|---|---|
| Python | 3.10 지원 중단, 최소 3.11 |
| 의존성 | transformers 5.16.1 이상, tokenizers 0.23.2 이상 필수 |
| max_tokens | 컨텍스트 창에서 미리 잡아 두지 않고 출력 상한으로만 취급 |
| Cascade attention | 제거. --disable-cascade-attn은 경고만 내고 v0.33.0에서 삭제 예정 |
| mamba_cache_mode | "all" 값 제거 |
| Responses API | 추론 스트림 이벤트가 response.content_part.added/done(part.type="reasoning_text")으로 변경 |
| torch.compile | 시퀀스 병렬화와 AsyncTP 패스 제거 |
max_tokens 변경으로 긴 프롬프트가 더 이상 거부되지 않는다. 엔진에 워터마킹이 설정돼 있으면 요청 필드를 생략했을 때 켜짐으로 처리되고 false일 때만 끌 수 있다. Rust 프런트엔드의 qwen3_xml은 이제 Qwen3-Coder XML을 파싱하므로 JSON 형식에는 새 qwen3_json을 써야 한다.
출처
이 기사는 아래 자료를 바탕으로 정리했습니다. 제목을 누르면 원문이 새 창으로 열립니다.
- vllm-project/vllm v0.32.0 github.com