github vllm-project/vllm-metal v0.30.0
vLLM Metal v0.30.0

latest release: v0.30.0.dev20260923050831
6 hours ago

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_p runs 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 -- --stable

Homebrew:

brew tap vllm-project/vllm-metal https://github.com/vllm-project/vllm-metal
brew install vllm-project/vllm-metal/vllm-metal

The 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_FRACTION is removed. Size the Metal KV budget with --gpu-memory-utilization (or gpu_memory_utilization= for LLM()), as in upstream vLLM (#756, #793).
  • The legacy non-paged serving path and VLLM_METAL_USE_PAGED_ATTENTION are removed; serving always uses paged attention (#707).
  • Quantized --kv-cache-dtype values such as fp8, int8_per_token_head, and nvfp4 are rejected at startup, because Metal stores the paged KV cache in the model dtype. Use auto, 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-ffi cap 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.sh in 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

Don't miss a new vllm-metal release

NewReleases is sending notifications on new releases.