Instructions to use zeromodels/gemma-3-4b-it with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Keras
How to use zeromodels/gemma-3-4b-it with Keras:
# Available backend options are: "jax", "torch", "tensorflow". import os os.environ["KERAS_BACKEND"] = "jax" import keras model = keras.saving.load_model("hf://zeromodels/gemma-3-4b-it") - Notebooks
- Google Colab
- Kaggle
Migrate to zeromodels (rename kf_*.json -> zm_*.json, fix refs in config + README, ensure tag + badge)
5dac1dd verified metadata
pipeline_tag: image-text-to-text
license: gemma
base_model: google/gemma-3-4b-it
library_name: zeromodels
extra_gated_heading: Access Gemma on Hugging Face
language:
- en
tags:
- keras
- zeromodels
- gemma3
- gemma-3
- image-text-to-text
- arxiv:2503.19786
- pytorch
- jax
- tf
See our collection for all Gemma 3 sizes and variants.
Run Gemma 3 with Keras 3: JAX, PyTorch, or TensorFlow
zeromodels/gemma-3-4b-it
Pure-Keras 3 conversion of google/gemma-3-4b-it for
zeromodels. One implementation runs unmodified on
TensorFlow / Torch / JAX. This is the instruction-tuned checkpoint, served here as image + text -> text via Gemma3ConditionalGenerate; weights are
stored in bfloat16.
For model details, license, and usage terms, see Google's model card.
✨ Quick start
Text-only
import os
os.environ["KERAS_BACKEND"] = "torch" # or "jax" / "tensorflow"
from zeromodels.models.gemma3 import Gemma3TextGenerate, Gemma3Tokenizer
model = Gemma3TextGenerate.from_weights("zeromodels/gemma-3-4b-it")
tokenizer = Gemma3Tokenizer.from_weights("zeromodels/gemma-3-4b-it")
inputs = tokenizer([{"role": "user", "content": "Hello, who are you?"}])
outputs = model.generate(**inputs, max_new_tokens=64)
print(tokenizer.decode(outputs[0]))
Image + text
from zeromodels.models.gemma3 import Gemma3ConditionalGenerate, Gemma3Processor
model = Gemma3ConditionalGenerate.from_weights("zeromodels/gemma-3-4b-it")
processor = Gemma3Processor.from_weights("zeromodels/gemma-3-4b-it")
conversation = [
{"role": "user", "content": [
{"type": "image", "url": "https://.../image.jpg"},
{"type": "text", "text": "Describe this image."},
]},
]
inputs = processor(conversation)
outputs = model.generate(**inputs, max_new_tokens=64)
print(processor.decode(outputs[0]))
Load any Gemma 3 variant the same way with from_weights("zeromodels/<variant>"):
| Variant | Hub |
|---|---|
gemma-3-12b-it |
zeromodels/gemma-3-12b-it |
gemma-3-12b-pt |
zeromodels/gemma-3-12b-pt |
gemma-3-1b-it |
zeromodels/gemma-3-1b-it |
gemma-3-1b-pt |
zeromodels/gemma-3-1b-pt |
gemma-3-270m |
zeromodels/gemma-3-270m |
gemma-3-270m-it |
zeromodels/gemma-3-270m-it |
gemma-3-27b-it |
zeromodels/gemma-3-27b-it |
gemma-3-27b-pt |
zeromodels/gemma-3-27b-pt |
gemma-3-4b-it |
zeromodels/gemma-3-4b-it |
gemma-3-4b-pt |
zeromodels/gemma-3-4b-pt |
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 3 docs.
- Community / upstream weights still work via the
hf:prefix:Gemma3ConditionalGenerate.from_weights("hf:google/gemma-3-4b-it").
Special Thanks
A huge thank you to the Google Gemma authors for creating and releasing these models.
License: Gemma (gated). Accept the license on the upstream Hub card before downloading.