vLLM Metal v0.30.0
v0.30.0 tracks the vLLM v0.30.0 core. The release contains 39 merged pull requests from 13 contributors since vLLM Metal v0.29.0.
Highlights
- vLLM 0.30.0 core: the plugin moves to vLLM 0.30.0 with no runtime changes needed on the Metal side (#806).
- Unified KV storage: vLLM now owns allocation and physical layout for every scheduler-managed KV and state cache. Metal consumes zero-copy MLX views over that storage, and hybrid models use the full cache budget instead of separate state pools (#776, #777, #778, #800, #746).
- Granite 4.0 hybrid: Granite 4.0 hybrid checkpoints (dense and MoE, RoPE and NoPE) serve on paged state (#759).
- Homebrew: stable releases can be installed with
brew install vllm-project/vllm-metal/vllm-metal(#760). - Sampling:
min_pruns natively in MLX, and batches mixing greedy and random requests or different top-k/top-p/min-p values stay on the MLX sampler (#728, #786). - Zero-copy MLX/PyTorch bridge: tensors move between MLX and PyTorch through DLPack without copying (#758).
Installation
Requirements:
- Apple Silicon with macOS 15 or newer.
- Native arm64 Python 3.12.
Stable channel:
curl -fsSL https://raw.githubusercontent.com/vllm-project/vllm-metal/main/install.sh | bash -s -- --stableHomebrew:
brew tap vllm-project/vllm-metal https://github.com/vllm-project/vllm-metal
brew install vllm-project/vllm-metal/vllm-metalThe installer downloads prebuilt vllm-metal and vLLM wheels. It does not invoke a C++ or Metal compiler.
Release Artifacts
The release attaches a native Python 3.12 wheel for macOS 15 arm64:
vllm_metal-0.30.0-cp312-cp312-macosx_15_0_arm64.whl
The compatible upstream core is the prebuilt vLLM v0.30.0 macOS arm64 wheel.
Engine, Cache, and Performance
- OLMo 3 uses vLLM's grouped KV cache for its mixed full and sliding-window layers (#790).
- The tiled prefill kernel skips KV tiles outside the sliding window, which speeds up prefill on sliding-window models such as Gemma 4 (#784).
- Native GDN writes are tracked through the MLX graph, the hybrid single-buffer cap is logged, and hybrid state geometry is checked against the loaded model at startup (#780).
- Per-layer sliding windows come from mlx-lm's cache factory (#799).
- The lazy GDN pipeline gate applies only to GDN models (#792).
- Speculative decoding catches up the draft KV lazily after zero-K steps instead of running draft ingest every step (#734).
- GGUF groundwork: Q4_K and Q5_K blocks can be repacked into MLX affine tensors. The loader does not route these types yet (#773, #801).
Models and Serving Features
- Full-projection Q/K norms are fixed for OLMo 2, OLMo 3, OLMoE, and MiniMax (#768, #692, #774, #788).
- Speech-to-text: Qwen3-ASR stops at the tokenizer EOS and keeps empty transcripts, Whisper picks a compatible fallback tokenizer, request sampling parameters are honored, and non-greedy transcription is rejected at admission (#745, #765, #748, #770, #769).
- Each Metal frame capture uses the requested file prefix (#763).
Compatibility and Operational Changes
- vllm-metal and vLLM core are both versioned 0.30.0 for this release.
- MLX stays pinned to exactly 0.32.1, matching the prebuilt native extension ABI.
- transformers requires 5.10.4 or newer and huggingface_hub 1.31.0 or newer, following vLLM 0.30.0 (#806).
VLLM_METAL_MEMORY_FRACTIONis removed. Size the Metal KV budget with--gpu-memory-utilization(orgpu_memory_utilization=forLLM()), as in upstream vLLM (#756, #793).- The legacy non-paged serving path and
VLLM_METAL_USE_PAGED_ATTENTIONare removed; serving always uses paged attention (#707). - Quantized
--kv-cache-dtypevalues such asfp8,int8_per_token_head, andnvfp4are rejected at startup, because Metal stores the paged KV cache in the model dtype. Useauto, or TurboQuant (#747). - The wheel is now built with setuptools; the unused Rust extension and unused Metal shader code are removed (#805, #804).
- The temporary
apache-tvm-fficap is removed now that the upstream ABI issue is fixed (#771). - Model golden tests and generators are retired in favor of the live MLX parity checker (#724).
install.shin source-checkout mode anchors to the repository root (#753).- Docs: min-p sampling support (#751).
Known Boundaries
- Hybrid GDN prefix caching remains experimental: cache-on versus cache-off parity still diverges on a subset of divergent-suffix prompts, unchanged from v0.29.0.
- Nemotron-H and Granite 4.0 hybrid keep one private recurrent-state slot per request, so prefix caching is off for them.
--watermark-config, new in vLLM 0.30.0, requires Model Runner V2 and is not supported on Metal.
Contributors
@1fanwang, @HanningLin, @Lavmee, @LxYuan0420, @POWEHI2023, @StevenWang-CY, @WindChimeRan, @abhijithneilabraham, @hyunnnchoi, @jhou1, @ricky-chaoju, @suntp, @trackerrr
Full changelog: v0.29.0...v0.30.0