Instructions to use zeromodels/gemma-4-e2b with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ZeroModels
How to use zeromodels/gemma-4-e2b with ZeroModels:
# pip install -U zeromodels # ZeroModels is pure Keras 3, so pick a backend: "jax", "torch" or "tensorflow". import os os.environ["KERAS_BACKEND"] = "jax" from zeromodels import AutoZModel # AutoZModel reads the repo's model_type and loads the matching class. # For a task head use the matching loader, e.g. AutoZMImageClassify / AutoZMDetect / # AutoZMSemanticSegment / AutoZMTextGenerate (see zeromodels.auto). model = AutoZModel.from_weights("zeromodels/gemma-4-e2b") - Keras
How to use zeromodels/gemma-4-e2b with Keras:
# !pip install -U keras tensorflow huggingface_hub # Keras needs TensorFlow installed to read "hf://" paths, so the tensorflow backend is selected here; # "jax" and "torch" also work for computation once TensorFlow is installed. import os os.environ["KERAS_BACKEND"] = "tensorflow" import keras model = keras.saving.load_model("hf://zeromodels/gemma-4-e2b") - Notebooks
- Google Colab
- Kaggle
Migrate to zeromodels (rename kf_*.json -> zm_*.json, fix refs in config + README, ensure tag + badge)
b51e234 verified |
Download README.md from zeromodels/gemma-4-e2b: direct link, hf CLI and curl.
- Browser
- Download file 4.75 kB
-
https://huggingface.co/zeromodels/gemma-4-e2b/resolve/main/README.md
- Command line
-
hf download hf://zeromodels/gemma-4-e2b/README.md
-
curl -L -o README.md https://huggingface.co/zeromodels/gemma-4-e2b/resolve/main/README.md
4.75 kB
metadata
pipeline_tag: any-to-any
license: apache-2.0
base_model: google/gemma-4-E2B
library_name: zeromodels
language:
- en
tags:
- keras
- zeromodels
- gemma4
- gemma-4
- any-to-any
- pytorch
- jax
- tf
See our collection for all Gemma 4 sizes and variants.
Run Gemma 4 with Keras 3: JAX, PyTorch, or TensorFlow
zeromodels/gemma-4-e2b
Pure-Keras 3 conversion of google/gemma-4-E2B for
zeromodels. One implementation runs unmodified on
TensorFlow / Torch / JAX. This is the 5B variant, served here as
image + audio + text -> text via Gemma4Processor; weights are stored in bfloat16.
For model details, license, and usage terms, see Google's model card.
Gemma 4 family
| Property | E2B | E4B | 12B Unified | 31B Dense |
|---|---|---|---|---|
| Total Parameters | 2.3B effective (5.1B with embeddings) | 4.5B effective (8B with embeddings) | 11.95B | 30.7B |
| Layers | 35 | 42 | 48 | 60 |
| Sliding Window | 512 tokens | 512 tokens | 1024 tokens | 1024 tokens |
| Context Length | 128K tokens | 128K tokens | 256K tokens | 256K tokens |
| Vocabulary Size | 262K | 262K | 262K | 262K |
| Supported Modalities | Text, Image, Audio | Text, Image, Audio | Text, Image, Audio | Text, Image |
| Vision Encoder Parameters | ~150M | ~150M | - | ~550M |
| Audio Encoder Parameters | ~300M | ~300M | - | No Audio |
✨ Quick start
Text-only
import os
os.environ["KERAS_BACKEND"] = "torch" # or "jax" / "tensorflow"
from zeromodels.models.gemma4 import Gemma4TextGenerate, Gemma4Tokenizer
model = Gemma4TextGenerate.from_weights("zeromodels/gemma-4-e2b")
tokenizer = Gemma4Tokenizer.from_weights("zeromodels/gemma-4-e2b")
inputs = tokenizer([{"role": "user", "content": "Hello, who are you?"}])
outputs = model.generate(**inputs, max_new_tokens=64)
print(tokenizer.decode(outputs[0]))
Image + audio + text
import os
os.environ["KERAS_BACKEND"] = "torch" # or "jax" / "tensorflow"
from PIL import Image
from zeromodels.models.gemma4 import Gemma4ConditionalGenerate, Gemma4Processor
model = Gemma4ConditionalGenerate.from_weights("zeromodels/gemma-4-e2b")
processor = Gemma4Processor.from_weights("zeromodels/gemma-4-e2b")
inputs = processor(conversation=[
{"role": "user", "content": [
{"type": "image", "image": Image.open("cat.jpg")},
{"type": "audio", "path": "clip.wav"},
{"type": "text", "text": "Describe the image and what you hear."},
]}
])
outputs = model.generate(**inputs, max_new_tokens=64)
print(processor.decode(outputs[0]))
Load any Gemma 4 variant the same way with from_weights("zeromodels/<variant>"):
| Variant | Hub |
|---|---|
gemma-4-12b |
zeromodels/gemma-4-12b |
gemma-4-12b-it |
zeromodels/gemma-4-12b-it |
gemma-4-26b-a4b |
zeromodels/gemma-4-26b-a4b |
gemma-4-26b-a4b-it |
zeromodels/gemma-4-26b-a4b-it |
gemma-4-31b |
zeromodels/gemma-4-31b |
gemma-4-31b-it |
zeromodels/gemma-4-31b-it |
gemma-4-e2b |
zeromodels/gemma-4-e2b |
gemma-4-e2b-it |
zeromodels/gemma-4-e2b-it |
gemma-4-e4b |
zeromodels/gemma-4-e4b |
gemma-4-e4b-it |
zeromodels/gemma-4-e4b-it |
Tips
- Set
KERAS_BACKENDbefore importing Keras / zeromodels. - Loads in bfloat16 by default. Pass
load_dtype="float32"for full precision, orquantization="int8"to shrink further. - See the Gemma 4 docs.
- Community / upstream weights still work via the
hf:prefix:Gemma4ConditionalGenerate.from_weights("hf:google/gemma-4-E2B").
Special Thanks
A huge thank you to the Google Gemma authors for creating and releasing these models.
License: Apache 2.0.