Aller au contenu
ModelPrésentéExterne
Télécharger

Gemma 4 12B It FP8 Dynamic

Self-quantized FP8 (dynamic) of google/gemma-4-12B-it — Google's encoder-free omni model (text + image + audio + video). Quantized and benchmarked on an NVIDIA DGX Spark (GB10, sm121a).

TypeText modelModèle de basegoogle/gemma-4-12B-itVersionmodelBClasse

Source du modèle

Type
Text model
Taille du fichier
12,1 GB
Modèle de base
google/gemma-4-12B-it
Version
vmodel
Mis à jour
15 sept. 2026
Téléchargements
12 k
Source
Hugging Face

Description de la source

Gemma 4 12B-it — FP8 dynamic

Buy Me a Coffee

Self-quantized FP8 (dynamic) of google/gemma-4-12B-it — Google's encoder-free omni model (text + image + audio + video). Quantized and benchmarked on an NVIDIA DGX Spark (GB10, sm_121a).

TL;DR: 13 GB on disk (from 23 GB BF16), 15.9 tok/s on a GB10 via vLLM, all four modalities intact. Data-free — no calibration needed.

Benchmark (GB10 / DGX Spark, vLLM 0.22.1 native, single-stream decode, warm)

FormatDisktok/s (EN/ZH)Omni
BF1623 GB7.7yes
FP8 dynamic (this)13 GB15.9yes
NVFP4 W4A167.7 GB24.9yes

If you want the smallest + fastest build, see the sibling NVFP4 weight-only repo. FP8 is the conservative choice (dynamic activations, no calibration, widest kernel support).

Accuracy (MMLU + TMMLU+) — near-lossless on both languages

I scored all three formats on MMLU (English, 57 subjects) and TMMLU+ (Traditional Chinese, 66 subjects) with lm-evaluation-harness, 5-shot, chat template applied, limit=30 (N ≈ 1,710 EN / 1,980 TC, ±~1.0 pt), through transformers:

FormatMMLU (EN)TMMLU+ (TC)EN dropTC drop
BF1678.30%47.21%——
FP8 dynamic (this)77.95%46.97%−0.35−0.24
NVFP4 W4A1675.56%41.24%−2.74−5.97

FP8 is the accuracy-preserving choice. Near-lossless on both languages (within ~0.4 pt) and symmetric — while weight-only NVFP4 drops Traditional Chinese by ~6 points. If you can spare the extra disk/bandwidth over NVFP4 and care about non-English quality, FP8 is the safer pick. limit=30, single model — indicative. Full writeup.

Quantization recipe

llmcompressor, scheme FP8_DYNAMIC, data-free (no calibration data). Ignore list keeps the head and the multimodal projectors in BF16:

QuantizationModifier(targets="Linear", scheme="FP8_DYNAMIC",
    ignore=["lm_head", "re:.*embed_vision.*", "re:.*embed_audio.*"])

Serving (vLLM)

Needs vLLM with native Gemma4UnifiedForConditionalGeneration (~0.22.x / main) and the TRITON_ATTN backend (Gemma 4 has heterogeneous head dims: head_dim 256 x 16 = 4096 != hidden 3840):

VLLM_ATTENTION_BACKEND=TRITON_ATTN \
vllm serve coolthor/gemma-4-12B-it-FP8-dynamic --max-model-len 4096

Environment (exact versions — this model is version-sensitive)

This is a brand-new arch on a brand-new GPU, so the toolchain matters more than usual. The versions I actually ran:

ComponentVersionWhy it matters
vLLM0.22.1rc1.dev124 (main, post-PR)Needs the native Gemma4UnifiedForConditionalGeneration class, which only landed around 0.22.x/main. On an older vLLM it falls back to the generic transformers backend, which mishandles Gemma 4's non-square attention and crashes on o_proj.
transformers5.10.1First release that knows model_type: gemma4_unified. Older transformers can't even load the config.
torch2.11.0+cu130The one that bit me. vLLM main pins torch==2.10, but its _C.abi3.so was compiled against 2.11+cu130 — installing the pinned 2.10 (and pip silently pulling the CPU wheel on arm64) gives an undefined symbol import error and a CPU-only build. Force-align: pip install --force-reinstall --no-deps torch==2.11.0 --index-url https://download.pytorch.org/whl/cu130.
compressed-tensorsbundled with llmcompressorReads the FP8 weight format.
GPU / archDGX Spark GB10, sm_121a, CUDA 13.xThe torch-ABI dance above is specific to building vLLM from source for sm_121.
Attention backendVLLM_ATTENTION_BACKEND=TRITON_ATTNRequired, not optional — see the head-dim note above.

On a normal CUDA GPU (Hopper/Ada/Blackwell desktop) you don't need the torch-ABI overlay — that pain is specific to building vLLM from source for sm_121. A recent pip install vllm (with the native Gemma4Unified class) plus VLLM_ATTENTION_BACKEND=TRITON_ATTN is enough. FP8 is data-free, so the quantization recipe above is the whole reproduce step — no calibration set needed.

Validation (GB10, transformers)

  • Text: coherent EN + ZH.
  • Image: accurately described a studio-podcast photo (cat + Shiba Inu, headphones, studio mics, latte-art mug).
  • Audio: understood a LibriSpeech clip (Mr. Quilter / apostle / middle classes).
  • Video: correctly described a night-street clip.

Credits

  • Base model: google/gemma-4-12B-it (Apache 2.0, Google DeepMind)
  • Quantization: llmcompressor + compressed-tensors
  • Quantized & benchmarked by coolthor on a DGX Spark (GB10)

Support

One-person effort on a single DGX Spark, no sponsor. If it saved you time, a coffee ☕ is appreciated.

Sources

1 source
Hugging FacePrincipalVersion 425ac4c8ed2f89ef603ba0818faf9fce0f5c2e1a
huggingface.co/coolthor/gemma-4-12B-it-FP8-dynamic/tree/425ac4c8ed2f89ef603ba0818faf9fce0f5c2e1a

Vérifié 31 août

Artefacts du modèle

1 artefact

model.safetensors

safetensors · 12,1 GB · SHA-256 0dde463f3142…83ed · Hugging Face

Download file

Extraits de sources

2 extraits

--- license: apache-2.0 base_model: google/gemma-4-12B-it base_model_relation: quantized library_name: transformers pipeline_tag: any-to-any tags: - fp8 - vllm - compressed-tensors - gemma4 - omni - dgx-spark - gb10 - quantization --- # Gemma 4 12B-it — FP8 dynamic [![Buy Me a Coffee](https://img.shields.io/badge/%E2%98%95%20Buy%20me%20a%20coffee-support%20this%20work-FFDD00?style=for-the-badge)](https://buymeacoffee.com/thorlin) Self-quantized **FP8 (dynamic)** of [`google/gemma-4-12B-it`](https://huggingface.co/google/gemma-4-12B-it) — Google's encoder-free **omni** model (text + image + audio + video). Quantized and benchmarked on an NVIDIA DGX Spark (GB10, sm_121a). **TL;DR:** 13 GB on disk (from 23 GB BF16), **15.9 tok/s** on a GB10 via vLLM, all four modalities intact. Data-free — no calibration needed. ## Benchmark (GB10 / DGX Spark, vLLM 0.22.1 native, single-stream decode, warm) | Format | Disk | tok/s (EN/ZH) | Omni | |---|---|---|---| | BF16 | 23 GB | 7.7 | yes | | **FP8 dynamic (this)** | **13 GB** | **15.9** | **yes** | | NVFP4 W4A16 | 7.7 GB | 24.9 | yes | If you want the smallest + fastest build, see the sibling [NVFP4 weight-only repo](https://huggingface.co/coolthor/gemma-4-12B-it-NVFP4A16). FP8 is the conservative choice (dynamic activations, no calibration, widest kernel support). ## Accuracy (MMLU + TMMLU+) — near-lossless on both languages I scored all three formats on **MMLU** (English, 57 subjects) and **TMMLU+** (Traditional Chinese, 66 subjects) with `lm-evaluation-harness`, 5-shot, chat template applied, `limit=30` (N ≈ 1,710 EN / 1,980 TC, ±~1.0 pt), through `transformers`: | Format | MMLU (EN) | TMMLU+ (TC) | EN drop | TC drop | |---|---|---|---|---| | BF16 | 78.30% | 47.21% | — | — | | **FP8 dynamic (this)** | **77.95%** | **46.97%** | **−0.35** | **−0.24** | | NVFP4 W4A16 | 75.56% | 41.24% | −2.74 | −5.97 | **FP8 is the accuracy-preserving choice.** Near-lossless on both languages (within ~0.4 pt) and symmetric — while weight-only NVFP4 drops Traditional Chinese by ~6 points. If you can spare the extra disk/bandwidth over NVFP4 and care about non-English quality, FP8 is the safer pick. limit=30, single model — indicative. [Full writeup](https://ai-muninn.com/en/blog/dgx-spark-nvfp4-quant-tax-chinese-vs-english). ## Quantization recipe `llmcompressor`, scheme `FP8_DYNAMIC`, data-free (no calibration data)....

Source context: 12046 downloads · 2 likes · Pipeline any-to-any · Library transformers · Repo coolthor/gemma-4-12B-it-FP8-dynamic