Signed-off-by: esmeetu <jasonailu87@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
603 lines
23 KiB
YAML
603 lines
23 KiB
YAML
meta:
|
|
title: "Gemma 4 26B-A4B IT"
|
|
slug: "gemma-4-26b-a4b-it"
|
|
provider: "Google"
|
|
description: "Google's Gemma 4 MoE multimodal model (26B total / 4B active) with 128 fine-grained experts, top-8 routing, thinking mode, and tool-use protocol."
|
|
date_added: 2026-04-02
|
|
date_updated: 2026-09-27
|
|
tasks:
|
|
- multimodal
|
|
- text
|
|
performance_headline: "MoE multimodal model — 26B total / 4B active, 128 experts with top-8 routing"
|
|
related_recipes:
|
|
- google/gemma-4-E2B-it
|
|
- google/gemma-4-E4B-it
|
|
- google/gemma-4-31B-it
|
|
platforms:
|
|
- id: modal
|
|
blurb: "Serverless deploy via the Gemma 4 Modal script bundled with this recipe."
|
|
script: https://github.com/vllm-project/recipes/blob/main/Google/gemma4-modal.py
|
|
install: |
|
|
curl -O https://raw.githubusercontent.com/vllm-project/recipes/main/Google/gemma4-modal.py
|
|
pip install modal
|
|
modal setup
|
|
modal deploy gemma4-modal.py
|
|
modal run gemma4-modal.py
|
|
hardware:
|
|
h100: verified
|
|
h200: verified
|
|
mi300x: verified
|
|
mi325x: verified
|
|
mi355x: verified
|
|
trillium: verified
|
|
ironwood: verified
|
|
xeon6: verified
|
|
dgx_spark_gb10: verified
|
|
dgx_station_gb300: verified
|
|
rtx_pro_6000: verified
|
|
rtx_5090: verified
|
|
arc_pro_b60: verified
|
|
arc_pro_b70: verified
|
|
|
|
model:
|
|
model_id: "google/gemma-4-26B-A4B-it"
|
|
min_vllm_version: "0.25.0"
|
|
architecture: moe
|
|
parameter_count: "26B"
|
|
active_parameters: "4B"
|
|
context_length: 131072
|
|
base_args: []
|
|
base_env: {}
|
|
|
|
dependencies: []
|
|
features:
|
|
tool_calling:
|
|
description: "Enable automatic tool choice with Gemma 4 parser and chat template"
|
|
args:
|
|
- "--enable-auto-tool-choice"
|
|
- "--tool-call-parser"
|
|
- "gemma4"
|
|
- "--chat-template"
|
|
- "examples/tool_chat_template_gemma4.jinja"
|
|
hardware_overrides:
|
|
dgx_spark_gb10:
|
|
args:
|
|
- "--enable-auto-tool-choice"
|
|
- "--tool-call-parser"
|
|
- "gemma4"
|
|
reasoning:
|
|
description: "Enable structured thinking/reasoning output"
|
|
args:
|
|
- "--reasoning-parser"
|
|
- "gemma4"
|
|
text_only:
|
|
description: "Skip loading the vision encoder for text-only workloads — frees VRAM for KV cache. Mutually exclusive with encoder_parallel."
|
|
args:
|
|
- "--language-model-only"
|
|
spec_decoding:
|
|
description: "MTP speculative decoding for accelerated inference"
|
|
default_mode: mtp
|
|
modes:
|
|
mtp:
|
|
label: "MTP"
|
|
description: "Built-in Multi-Token Prediction, 4 draft tokens."
|
|
args:
|
|
- "--speculative-config"
|
|
- '{"model":"google/gemma-4-26B-A4B-it-assistant","num_speculative_tokens":4}'
|
|
# The single-GPU Blackwell desktops run the draft MoE on the Triton
|
|
# backend — the fused CUTLASS path the drafter picks by default is not
|
|
# built for GB10/GB300/RTX PRO in the validated images.
|
|
hardware_overrides:
|
|
dgx_spark_gb10: &gemma4_mtp_triton
|
|
args:
|
|
- "--speculative-config"
|
|
- '{"method":"mtp","model":"google/gemma-4-26B-A4B-it-assistant","num_speculative_tokens":4,"moe_backend":"triton"}'
|
|
dgx_station_gb300: *gemma4_mtp_triton
|
|
rtx_pro_6000: *gemma4_mtp_triton
|
|
eagle3:
|
|
label: "Eagle3"
|
|
description: "Eagle3 speculative decoding with externally trained draft model; the served checkpoint is unchanged."
|
|
variants:
|
|
- default
|
|
args:
|
|
- "--speculative-config"
|
|
- '{"model": "RedHatAI/gemma-4-26B-A4B-it-speculator.eagle3", "num_speculative_tokens": 3, "method": "eagle3"}'
|
|
opt_in_features:
|
|
- text_only
|
|
- spec_decoding
|
|
|
|
variants:
|
|
default:
|
|
precision: bf16
|
|
vram_minimum_gb: 64
|
|
description: "Full BF16 — single 80 GB NVIDIA GPU or 1x MI300X/MI325X/MI350X/MI355X or 2x Xeon6/Xeon5 NUMA nodes"
|
|
supported_hardware: [h100, h200, mi300x, mi325x, mi355x, trillium, ironwood, xeon6, dgx_spark_gb10, dgx_station_gb300, rtx_pro_6000, rtx_5090]
|
|
hardware_overrides:
|
|
dgx_spark_gb10:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
dgx_station_gb300:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
rtx_pro_6000:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
extra_args:
|
|
- "--gpu-memory-utilization"
|
|
- "0.9"
|
|
fp8:
|
|
model_id: "RedHatAI/gemma-4-26B-A4B-it-FP8-dynamic"
|
|
precision: fp8
|
|
vram_minimum_gb: 32
|
|
description: "FP8 (E4M3) weights with dynamic per-token activation quantization — Hopper or Blackwell"
|
|
supported_hardware: [h100, h200, dgx_spark_gb10, dgx_station_gb300, rtx_pro_6000, rtx_5090]
|
|
extra_args:
|
|
- "--kv-cache-dtype"
|
|
- "fp8"
|
|
hardware_overrides:
|
|
dgx_spark_gb10:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
dgx_station_gb300:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
rtx_pro_6000:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
extra_args:
|
|
- "--gpu-memory-utilization"
|
|
- "0.9"
|
|
rtx_5090:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
extra_args:
|
|
- "--gpu-memory-utilization"
|
|
- "0.92"
|
|
- "--max-model-len"
|
|
- "131072"
|
|
- "--max-num-seqs"
|
|
- "1"
|
|
nvfp4:
|
|
model_id: "RedHatAI/gemma-4-26B-A4B-it-NVFP4"
|
|
precision: nvfp4
|
|
label: "NVFP4 - RedHatAI"
|
|
vram_minimum_gb: 16
|
|
description: "NVFP4 (4-bit) quantized weights — requires Blackwell (B200/B300)"
|
|
supported_hardware: [dgx_spark_gb10, dgx_station_gb300, rtx_pro_6000, rtx_5090]
|
|
extra_args:
|
|
- "--kv-cache-dtype"
|
|
- "fp8"
|
|
hardware_overrides:
|
|
dgx_spark_gb10:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
dgx_station_gb300:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
rtx_pro_6000:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
extra_args:
|
|
- "--gpu-memory-utilization"
|
|
- "0.9"
|
|
rtx_5090:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
extra_args:
|
|
- "--gpu-memory-utilization"
|
|
- "0.9"
|
|
- "--max-num-batched-tokens"
|
|
- "4096"
|
|
- "--max-num-seqs"
|
|
- "4"
|
|
nvidia_nvfp4:
|
|
model_id: "nvidia/Gemma-4-26B-A4B-NVFP4"
|
|
precision: nvfp4
|
|
label: "NVFP4 - NVIDIA"
|
|
vram_minimum_gb: 16
|
|
description: "NVIDIA ModelOpt NVFP4 (4-bit) quantized weights — validated on the single-GPU Blackwell desktops (DGX Spark GB10, DGX Station GB300, RTX PRO 6000)"
|
|
supported_hardware: [dgx_spark_gb10, dgx_station_gb300, rtx_pro_6000]
|
|
hardware_overrides:
|
|
dgx_spark_gb10:
|
|
# vLLM 0.24 and the generic nightly both fail on GB10 with this
|
|
# checkpoint; the dated ARM64 community build is the tested runtime, so
|
|
# the wheel tab is hidden here rather than offering a command that
|
|
# won't start.
|
|
docker_image: "eugr/spark-vllm:nightly-20260704"
|
|
# This image's entrypoint is nvidia_entrypoint.sh, not `vllm serve`.
|
|
docker_serve_command: "vllm serve"
|
|
install:
|
|
pip: false
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
extra_args:
|
|
# GB10 shares its 128 GB with the CPU, so leave headroom for the host.
|
|
- "--gpu-memory-utilization"
|
|
- "0.8"
|
|
- "--max-model-len"
|
|
- "262144"
|
|
- "--max-num-seqs"
|
|
- "8"
|
|
- "--max-num-batched-tokens"
|
|
- "8192"
|
|
- "--enable-prefix-caching"
|
|
- "--load-format"
|
|
- "fastsafetensors"
|
|
dgx_station_gb300:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
extra_args:
|
|
# 252 GB on one GB300 — full context at high utilization and a 64-way
|
|
# batch.
|
|
- "--gpu-memory-utilization"
|
|
- "0.92"
|
|
- "--max-model-len"
|
|
- "262144"
|
|
- "--max-num-seqs"
|
|
- "64"
|
|
- "--max-num-batched-tokens"
|
|
- "8192"
|
|
- "--enable-chunked-prefill"
|
|
- "--enable-prefix-caching"
|
|
- "--load-format"
|
|
- "fastsafetensors"
|
|
rtx_pro_6000:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
extra_args:
|
|
- "--gpu-memory-utilization"
|
|
- "0.92"
|
|
- "--max-model-len"
|
|
- "262144"
|
|
- "--max-num-seqs"
|
|
- "8"
|
|
- "--max-num-batched-tokens"
|
|
- "8192"
|
|
- "--enable-prefix-caching"
|
|
- "--load-format"
|
|
- "fastsafetensors"
|
|
rtx_5090:
|
|
extra_env:
|
|
VLLM_USE_V2_MODEL_RUNNER: "1"
|
|
extra_args:
|
|
- "--kv-cache-dtype"
|
|
- "fp8"
|
|
- "--gpu-memory-utilization"
|
|
- "0.9"
|
|
- "--max-num-batched-tokens"
|
|
- "4096"
|
|
- "--enable-prefix-caching"
|
|
- "--enable-chunked-prefill"
|
|
- "--async-scheduling"
|
|
- "--max-num-seqs"
|
|
- "4"
|
|
|
|
compatible_strategies:
|
|
- single_node_tp
|
|
- single_node_tep
|
|
- single_node_dep
|
|
- multi_node_tp
|
|
- multi_node_tep
|
|
- multi_node_dep
|
|
|
|
hardware_overrides:
|
|
xpu:
|
|
extra_args:
|
|
- "--enforce-eager"
|
|
- "--attention-backend"
|
|
- "flash_attn"
|
|
- "--trust-remote-code"
|
|
- "--gpu-memory-utilization"
|
|
- "0.9"
|
|
- "--no-enable-prefix-caching"
|
|
- "--max-num-batched-tokens"
|
|
- "8192"
|
|
- "--max-model-len"
|
|
- "5120"
|
|
- "--tensor-parallel-size"
|
|
- "4"
|
|
|
|
strategy_overrides:
|
|
single_node_tp:
|
|
tp: 1
|
|
|
|
guide: |
|
|
## Overview
|
|
|
|
[Gemma 4 26B-A4B](https://huggingface.co/google/gemma-4-26B-A4B-it) is the Mixture-of-Experts member of Google's Gemma 4 family — 26B total parameters with only 4B active per token via 128 fine-grained experts and top-8 routing. It supports text + images natively, structured thinking, function calling, and dynamic vision resolution.
|
|
|
|
Intel Xeon 6 CPU support remains verified. Benchmark-specific TP/DP, CPU binding,
|
|
sequence limits, and repro-only timeouts remain deployment choices.
|
|
|
|
### Key Features
|
|
- **MoE**: 128 fine-grained experts with top-8 routing and custom GELU-activated FFN.
|
|
- **Multimodal**: Text + images natively (video via custom frame-extraction pipeline). Audio is only supported on the smaller E2B/E4B variants.
|
|
- **Dual Attention**: Alternating sliding-window (local) and global attention with different head dimensions.
|
|
- **Thinking Mode**: Structured reasoning via `<|channel>thought\n...<channel|>` delimiters.
|
|
- **Function Calling**: Custom tool-call protocol with dedicated special tokens.
|
|
- **Dynamic Vision Resolution**: Per-request configurable vision token budget (70, 140, 280, 560, 1120 tokens).
|
|
|
|
TPU support is provided through [vLLM TPU](https://github.com/vllm-project/tpu-inference) with recipes for [Trillium](https://github.com/AI-Hypercomputer/tpu-recipes/tree/main/inference/trillium/vLLM/Gemma4) and [Ironwood](https://github.com/AI-Hypercomputer/tpu-recipes/blob/main/inference/ironwood/vLLM/Gemma4/).
|
|
|
|
## Prerequisites
|
|
|
|
- Hardware: Intel Xeon 6/Xeon 5 CPUs
|
|
- vLLM >= 0.25.0
|
|
|
|
### pip (NVIDIA CUDA)
|
|
```bash
|
|
uv venv
|
|
source .venv/bin/activate
|
|
uv pip install -U vllm --pre \
|
|
--extra-index-url https://wheels.vllm.ai/nightly/cu129 \
|
|
--extra-index-url https://download.pytorch.org/whl/cu129 \
|
|
--index-strategy unsafe-best-match
|
|
```
|
|
|
|
### pip (AMD ROCm: MI300X, MI325X, MI350X, MI355X)
|
|
Requires Python 3.12, ROCm 7.2.1, glibc >= 2.35 (Ubuntu 22.04+).
|
|
```bash
|
|
uv venv --python 3.12
|
|
source .venv/bin/activate
|
|
uv pip install vllm --pre \
|
|
--extra-index-url https://wheels.vllm.ai/rocm/nightly/rocm721 --upgrade
|
|
```
|
|
|
|
### pip (Intel Xeon 6 CPUs)
|
|
For Intel and AMD x86 CPUs, follow the [CPU pre-built wheels](https://docs.vllm.ai/en/latest/getting_started/installation/cpu/#pre-built-wheels) installation instructions.
|
|
|
|
### Docker
|
|
```bash
|
|
docker pull vllm/vllm-openai:gemma4-0505-cu129 # NVIDIA Hopper (H100/H200, CUDA 12.9)
|
|
docker pull vllm/vllm-openai:gemma4-0505-cu130 # NVIDIA Blackwell (B200/B300, CUDA 13.0)
|
|
docker pull vllm/vllm-openai-rocm:latest # AMD
|
|
docker pull vllm/vllm-openai-cpu:latest-x86_64 # For Intel Xeon 6
|
|
docker pull vllm/vllm-openai-xpu:latest # Intel XPU (B60 / B70)
|
|
```
|
|
TPU images are published separately by [vllm-project/tpu-inference](https://github.com/vllm-project/tpu-inference); see the Trillium / Ironwood tpu-recipes below for the pinned tag.
|
|
|
|
## Deployment Configurations
|
|
|
|
### 26B MoE on 1x A100/H100 (BF16)
|
|
```bash
|
|
vllm serve google/gemma-4-26B-A4B-it \
|
|
--max-model-len 32768 \
|
|
--gpu-memory-utilization 0.90
|
|
```
|
|
|
|
### Full-Featured Server Launch
|
|
Enables text, image, thinking, and tool calling:
|
|
```bash
|
|
vllm serve google/gemma-4-26B-A4B-it \
|
|
--max-model-len 16384 \
|
|
--gpu-memory-utilization 0.90 \
|
|
--enable-auto-tool-choice \
|
|
--reasoning-parser gemma4 \
|
|
--tool-call-parser gemma4 \
|
|
--chat-template examples/tool_chat_template_gemma4.jinja \
|
|
--limit-mm-per-prompt.image 4 \
|
|
--async-scheduling \
|
|
--host 0.0.0.0 \
|
|
--port 8000
|
|
```
|
|
|
|
### Docker (NVIDIA)
|
|
```bash
|
|
docker run -itd --name gemma4-moe \
|
|
--ipc=host --network host --shm-size 16G --gpus all \
|
|
-v ~/.cache/huggingface:/root/.cache/huggingface \
|
|
vllm/vllm-openai:gemma4-0505-cu129 \
|
|
--model google/gemma-4-26B-A4B-it \
|
|
--max-model-len 32768 \
|
|
--gpu-memory-utilization 0.90 \
|
|
--host 0.0.0.0 --port 8000
|
|
```
|
|
Swap `vllm/vllm-openai:gemma4-0505-cu129` for `vllm/vllm-openai:gemma4-0505-cu130` on Blackwell (B200/B300).
|
|
|
|
### Docker (AMD MI300X/MI325X/MI350X/MI355X)
|
|
```bash
|
|
docker run -itd --name gemma4-rocm \
|
|
--ipc=host --network=host --privileged \
|
|
--cap-add=CAP_SYS_ADMIN --device=/dev/kfd --device=/dev/dri \
|
|
--group-add=video --cap-add=SYS_PTRACE \
|
|
--security-opt=seccomp=unconfined --shm-size 16G \
|
|
-v ~/.cache/huggingface:/root/.cache/huggingface \
|
|
vllm/vllm-openai-rocm:latest \
|
|
--model google/gemma-4-26B-A4B-it \
|
|
--host 0.0.0.0 --port 8000
|
|
```
|
|
|
|
### Docker (Cloud TPU — Trillium / Ironwood)
|
|
TPU uses the separate `vllm/vllm-tpu` image (no pip wheel). Pull the tag specified by the upstream [Trillium](https://github.com/AI-Hypercomputer/tpu-recipes/tree/main/inference/trillium/vLLM/Gemma4) or [Ironwood](https://github.com/AI-Hypercomputer/tpu-recipes/blob/main/inference/ironwood/vLLM/Gemma4/) recipe, then run:
|
|
```bash
|
|
docker run -itd --name gemma4-tpu \
|
|
--privileged --network host --shm-size 16G \
|
|
-v /dev/shm:/dev/shm -e HF_TOKEN=$HF_TOKEN \
|
|
vllm/vllm-tpu:latest \
|
|
--model google/gemma-4-26B-A4B-it \
|
|
--tensor-parallel-size 8 \
|
|
--max-model-len 16384 \
|
|
--disable_chunked_mm_input \
|
|
--host 0.0.0.0 --port 8000
|
|
```
|
|
Trillium requires a 4-chip slice minimum; Ironwood runs on a single chip.
|
|
|
|
### Intel Xeon 6 Deployment via Docker
|
|
|
|
Launch the x86 CPU vLLM Docker container for `google/gemma-4-26B-A4B-it`:
|
|
|
|
```bash
|
|
docker run \
|
|
--privileged --ipc=host -p 8000:8000 \
|
|
-v ~/.cache/huggingface:/root/.cache/huggingface \
|
|
vllm/vllm-openai-cpu:latest-x86_64 google/gemma-4-26B-A4B-it \
|
|
--tensor-parallel-size 1 \
|
|
--enable-auto-tool-choice \
|
|
--tool-call-parser gemma4 \
|
|
--chat-template examples/tool_chat_template_gemma4.jinja \
|
|
--reasoning-parser gemma4
|
|
```
|
|
|
|
For additional Intel Xeon 6 deployment details, see the Intel Software Catalog entries for [Gemma 4 26B-A4B IT](https://aiswcatalog.intel.com/models/google-gemma-4-26b-a4b-it).
|
|
|
|
The following settings are intentionally not prescribed as portable CPU model
|
|
defaults because they depend on the workload, hardware, or runtime environment:
|
|
|
|
- `--max-num-batched-tokens`: scheduler/throughput tuning.
|
|
- `--max-num-seqs`: concurrency and scheduler-capacity tuning.
|
|
- `--gpu-memory-utilization`: platform memory-budget tuning.
|
|
- `--no-enable-prefix-caching`: workload/benchmark cache-policy tuning.
|
|
- `VLLM_ENGINE_ITERATION_TIMEOUT_S`: operational runtime timeout.
|
|
|
|
These settings may still appear in validated hardware-specific overrides. Tune
|
|
them at deployment time based on platform resources, workload shape, and
|
|
latency/throughput goals.
|
|
|
|
### Docker (Intel XPU B60 / B70, TP=4, Full-Featured)
|
|
|
|
Validated on 4x Intel Arc Pro B60 / B70 with the official vLLM XPU image.
|
|
|
|
```bash
|
|
docker run --device /dev/dri \
|
|
-v /dev/dri/by-path:/dev/dri/by-path --shm-size=16g \
|
|
--privileged --ipc=host -p 8000:8000 \
|
|
-v ~/.cache/huggingface:/root/.cache/huggingface \
|
|
vllm/vllm-openai-xpu:latest \
|
|
google/gemma-4-26B-A4B-it \
|
|
--enforce-eager \
|
|
--attention-backend flash_attn \
|
|
--host 0.0.0.0 \
|
|
--port 8000 \
|
|
--trust-remote-code \
|
|
--enable-auto-tool-choice \
|
|
--reasoning-parser gemma4 \
|
|
--tool-call-parser gemma4 \
|
|
--chat-template examples/tool_chat_template_gemma4.jinja \
|
|
--limit-mm-per-prompt.image 4 \
|
|
--async-scheduling \
|
|
--gpu-memory-utilization 0.9 \
|
|
--no-enable-prefix-caching \
|
|
--max-num-batched-tokens 8192 \
|
|
--max-model-len 5120 \
|
|
--tensor-parallel-size 4
|
|
```
|
|
|
|
## Client Usage
|
|
|
|
### Text Generation
|
|
```python
|
|
from openai import OpenAI
|
|
client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
|
|
response = client.chat.completions.create(
|
|
model="google/gemma-4-26B-A4B-it",
|
|
messages=[{"role": "user", "content": "Write a poem about the ocean."}],
|
|
max_tokens=512, temperature=0.7,
|
|
)
|
|
print(response.choices[0].message.content)
|
|
```
|
|
|
|
### Image Understanding
|
|
```python
|
|
response = client.chat.completions.create(
|
|
model="google/gemma-4-26B-A4B-it",
|
|
messages=[{"role": "user", "content": [
|
|
{"type": "image_url", "image_url": {"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/1200px-Cat03.jpg"}},
|
|
{"type": "text", "text": "Describe this image in detail."},
|
|
]}],
|
|
max_tokens=1024,
|
|
)
|
|
```
|
|
|
|
### Thinking Mode
|
|
```bash
|
|
vllm serve google/gemma-4-26B-A4B-it \
|
|
--max-model-len 16384 \
|
|
--reasoning-parser gemma4 \
|
|
--tool-call-parser gemma4 \
|
|
--enable-auto-tool-choice \
|
|
--chat-template examples/tool_chat_template_gemma4.jinja
|
|
```
|
|
Enable per-request via `extra_body={"chat_template_kwargs": {"enable_thinking": True}}`.
|
|
|
|
### Dynamic Vision Resolution
|
|
Supported values: 70, 140, 280 (default), 560, 1120 tokens/image.
|
|
```bash
|
|
vllm serve google/gemma-4-26B-A4B-it \
|
|
--mm-processor-kwargs '{"max_soft_tokens": 560}'
|
|
```
|
|
|
|
## Configuration Tips
|
|
|
|
- Set `--max-model-len` to match your workload.
|
|
- `--gpu-memory-utilization 0.90-0.95` maximizes KV cache.
|
|
- Text-only workloads: `--limit-mm-per-prompt '{"image": 0, "audio": 0}'`.
|
|
- `--async-scheduling` improves throughput.
|
|
- FP8 KV cache (`--kv-cache-dtype fp8`) saves ~50% KV memory.
|
|
- For MoE, TEP (tensor-expert parallelism) and DEP (data-expert parallelism) strategies scale better than pure TP at large node counts.
|
|
|
|
## Quantized Variants
|
|
|
|
Three pre-quantized checkpoints are available:
|
|
|
|
- [`RedHatAI/gemma-4-26B-A4B-it-FP8-dynamic`](https://huggingface.co/RedHatAI/gemma-4-26B-A4B-it-FP8-dynamic) — FP8 (E4M3) weights with dynamic per-token activation quantization; runs on Hopper and Blackwell.
|
|
- [`RedHatAI/gemma-4-26B-A4B-it-NVFP4`](https://huggingface.co/RedHatAI/gemma-4-26B-A4B-it-NVFP4) — NVFP4 (4-bit) weights; requires Blackwell (B200/B300).
|
|
- [`nvidia/Gemma-4-26B-A4B-NVFP4`](https://huggingface.co/nvidia/Gemma-4-26B-A4B-NVFP4) — NVIDIA ModelOpt NVFP4 (4-bit) weights; this is the checkpoint validated on the single-GPU Blackwell desktops below.
|
|
|
|
Pick them from the **Variant** dropdown above, or pass the repo id directly to `vllm serve`.
|
|
|
|
### NVFP4 on the Blackwell desktops
|
|
|
|
[`nvidia/Gemma-4-26B-A4B-NVFP4`](https://huggingface.co/nvidia/Gemma-4-26B-A4B-NVFP4)
|
|
has been run end to end on DGX Spark (GB10), DGX Station (GB300) and RTX PRO
|
|
6000, in each case on one GPU at TP1 with MTP drafting against
|
|
[`google/gemma-4-26B-A4B-it-assistant`](https://huggingface.co/google/gemma-4-26B-A4B-it-assistant).
|
|
|
|
Select the **NVIDIA NVFP4** variant, enable **Spec Decoding**, and switch the
|
|
hardware pill — memory utilization, batch size, prefill scheduling and the
|
|
drafter's MoE backend all differ per box and are encoded per hardware, so the
|
|
generated command is the tested one. Highlights:
|
|
|
|
- **DGX Spark (GB10)** — 128 GB shared with the CPU, so `--gpu-memory-utilization 0.8`
|
|
and an 8-way batch. Serve from `eugr/spark-vllm:nightly-20260704`: vLLM 0.24
|
|
and the generic nightly both fail on this checkpoint, so the pip tab is
|
|
hidden on this hardware.
|
|
- **DGX Station (GB300)** — 252 GB on one GPU, so `--gpu-memory-utilization 0.92`
|
|
with chunked prefill and a 64-way batch.
|
|
- **RTX PRO 6000** — 96 GB, `--gpu-memory-utilization 0.92` and an 8-way batch.
|
|
|
|
All three run the full 262,144-token context, above the 131,072 in
|
|
`config.json`, and pass `"moe_backend":"triton"` in `--speculative-config`
|
|
because the drafter's default fused MoE path is not built in these images.
|
|
|
|
The GB300 and RTX PRO 6000 runs used an internal NVIDIA nightly vLLM build.
|
|
As noted under Speculative Decoding below, Gemma 4 MTP has not landed in a
|
|
stable release, so the default `vllm/vllm-openai:latest` tag will not serve
|
|
these commands with Spec Decoding enabled — use a nightly wheel or a nightly
|
|
image on those two boxes.
|
|
|
|
## Throughput vs Latency
|
|
|
|
| Goal | TP | `--max-num-seqs` | Notes |
|
|
|------|----|------------------|-------|
|
|
| Max throughput | 1-2 | 256-512 | Best tok/s per GPU |
|
|
| Min latency | 4-8 | 8-16 | Best TTFT/TPOT |
|
|
| Balanced | 2 | 128 | Mixed workloads |
|
|
|
|
## Speculative Decoding (MTP)
|
|
|
|
Enable the **Spec Decoding** feature toggle (above) or add `--speculative-config` manually to use MTP drafting with the [assistant model](https://huggingface.co/google/gemma-4-26B-A4B-it-assistant). Recommended `num_speculative_tokens`: 4 for this model. See the [Gemma 4 usage guide](../../Google/Gemma4) for details and benchmarks.
|
|
|
|
> **Note:** MTP speculative decoding for Gemma 4 is only available on the vLLM nightly build — it has not yet landed in a stable release. Install via the nightly wheel (`uv pip install -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightly/cu129 …`) or use the `vllm/vllm-openai:gemma4-0505-cu129` / `vllm/vllm-openai:gemma4-0505-cu130` images above; the standard `:latest` stable tag does not include this feature.
|
|
|
|
## References
|
|
|
|
- [Model card](https://huggingface.co/google/gemma-4-26B-A4B-it)
|
|
- [FP8 variant](https://huggingface.co/RedHatAI/gemma-4-26B-A4B-it-FP8-dynamic)
|
|
- [NVFP4 variant](https://huggingface.co/RedHatAI/gemma-4-26B-A4B-it-NVFP4)
|
|
- [NVIDIA ModelOpt NVFP4 variant](https://huggingface.co/nvidia/Gemma-4-26B-A4B-NVFP4)
|
|
- [Gemma docs](https://ai.google.dev/gemma/docs)
|
|
- [vLLM Gemma 4 tool-call template](https://github.com/vllm-project/vllm/blob/main/examples/tool_chat_template_gemma4.jinja)
|
|
- [TPU recipes: Trillium](https://github.com/AI-Hypercomputer/tpu-recipes/tree/main/inference/trillium/vLLM/Gemma4)
|
|
- [TPU recipes: Ironwood](https://github.com/AI-Hypercomputer/tpu-recipes/blob/main/inference/ironwood/vLLM/Gemma4/)
|
|
- [Xeon 6 recipe: Gemma 4 26B-A4B IT](https://aiswcatalog.intel.com/models/google-gemma-4-26b-a4b-it)
|