EmbeddingGemma 2 — Text Only — FP32 — MLX

A modular deployment export of Google DeepMind's EmbeddingGemma 2. Only the text backbone is retained; the audio encoder and audio projection are absent, as are the vision encoder and projection. No training, distillation, or quantization was applied.

FP32 weights are a lossless expansion of the upstream BF16 values. This does not recover precision absent from the original trained checkpoint.

Property Value
Runtime MLX
Stored floating-point tensors FP32 (all tensors checked)
Effective model parameters 271,002,624
Weight files 1084.06 MB, decimal
Inputs Text and code
Output 768 dimensions; MRL at 512, 256, 128
Context budget 8,192 tokens
License Apache 2.0

Weight size is not total runtime memory. 270M/440M in repository names are rounded deployment sizes.

Install

pip install "mlx>=0.32.3" "transformers>=5.19.0"
pip install "git+https://github.com/Blaizzy/mlx-vlm.git@3d87e88402f307efbf68e568971aa887ee7d9ed0"

EmbeddingGemma 2 currently requires the pinned MLX-VLM implementation revision above. The MLX package was tested with MLX 0.32.3 and Transformers 5.19.0.

Text and code

import mlx.core as mx
from transformers import AutoTokenizer
from mlx_vlm.embedding_loader import load_embedding_model
from mlx_vlm.utils import get_model_path

path = get_model_path("jayyun98/embeddinggemma-2-text-270m-mlx-fp32")
model = load_embedding_model(path)
tokenizer = AutoTokenizer.from_pretrained(path)
inputs = tokenizer([
    "task: search result | query: What causes the northern lights?",
    "title: none | text: Charged particles from the sun cause the northern lights.",
], padding=True, return_tensors="np")
vectors = model(**{key: mx.array(value) for key, value in inputs.items()}).text_embeds
mx.eval(vectors)
print(vectors[:1] @ vectors[1:].T)

# Optional MRL truncation. Normalize after slicing.
vectors = vectors[:, :256]
vectors /= mx.linalg.norm(vectors, axis=-1, keepdims=True)

Use SearchQuery for search queries, CodeRetrieval for code-search queries, and Document for corpus items. For the MLX API, prepend the corresponding literal prefix from config_sentence_transformers.json, as shown above. For titled documents, use title: {title} | text: {content} without another prefix. Use matching dimensions for queries and documents, and normalize after truncation. This FP32 package stores FP32 weights; loading it as BF16 changes runtime precision.

Verification

Strict native MLX loading and Apple Silicon GPU inference were tested. Cross-runtime arithmetic and BF16 rounding can produce small differences from PyTorch FP32. Checks cover English/Korean search and document text, code queries, and 128/256/512-dimensional normalized vectors.

Fixture Minimum cosine vs source FP32 Maximum absolute difference
search_english_korean 1.000000000 1.2293458e-07
documents 1.000000000 1.49011612e-07
code 1.000000000 1.53668225e-07

Measurements compare with the pinned full Google checkpoint. They are small numerical and loading checks, not MTEB results, a retrieval-quality evaluation, or a speed benchmark. The original prompts, pooling behavior, tokenizer and processor assets are retained. Processor metadata does not restore the removed encoder weights. Image, audio and video encoders are unavailable.

Attribution and license

Original weights and tokenizer/processor assets: Google DeepMind. MLX implementation: MLX-VLM contributors. This is an independent derivative deployment export, not an official Google release. The Apache 2.0 LICENSE and NOTICE are included. See the original model card for training, intended use and limitations.

Downloads last month
129
Safetensors
Model size
0.3B params
Tensor type
F32
·
MLX
Hardware compatibility
Log In to add your hardware

Quantized

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for jayyun98/embeddinggemma-2-text-270m-mlx-fp32

Finetuned
(50)
this model

Collection including jayyun98/embeddinggemma-2-text-270m-mlx-fp32