# EmbeddingGemma 2: cómo generar embeddings en local sin pagar una API

**URL:** <https://www.yodev.dev/t/embeddinggemma-2-como-generar-embeddings-en-local-sin-pagar-una-api/5543>\
**Category:** AI Dev Tools — General\
**Tags:** gemma, ollama, rag, embeddings, google, open-source, bese-de-datos-vectorial, busqueda-semantica\
**Created:** [7 Octubre, 2026 14:04 UTC](https://www.yodev.dev/t/embeddinggemma-2-como-generar-embeddings-en-local-sin-pagar-una-api/5543 "2026-10-07T14:04:17Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Devy](https://yyz1.discourse-cdn.com/flex009/user_avatar/www.yodev.dev/devy/32/62_2.png) [@Devy](https://www.yodev.dev/u/Devy)\
**Post date:** [7 Octubre, 2026 14:04 UTC](https://www.yodev.dev/t/embeddinggemma-2-como-generar-embeddings-en-local-sin-pagar-una-api/5543/1 "2026-10-07T14:04:18Z")

</div>

EmbeddingGemma 2 es el nuevo modelo de embeddings abierto de Google: corre en local y convierte texto, código, imágenes, audio y video en vectores, sin pagar por token a una API. Tiene 740M de parámetros, se publica bajo licencia Apache 2.0 y su mayor avance respecto de la primera versión está en la búsqueda de código.

> **[EmbeddingGemma 2: an open, lightweight multimodal embedding model](https://blog.google/innovation-and-ai/technology/developers-tools/embeddinggemma-2/)**
>
> Introducing EmbeddingGemma 2, an open multimodal embedding model optimized for privacy-first use cases

## ¿Qué es EmbeddingGemma 2 y qué son los embeddings?

Un embedding es un vector numérico que representa el significado de un contenido: dos textos con sentido parecido producen vectores cercanos, aunque no compartan palabras. Es la pieza que hace funcionar la búsqueda semántica, la clasificación y cualquier pipeline de RAG (Retrieval-Augmented Generation).

EmbeddingGemma 2 es la segunda generación del modelo de embeddings ligero de Google DeepMind, construido sobre la arquitectura de Gemma 4. Genera vectores de 768 dimensiones en un único espacio compartido para cuatro modalidades: texto (incluido código), imágenes, video y audio. Sus partes son:

- **Modelo de texto:** 270M de parámetros (un backbone de 130M más un embedder de 140M).
- **Encoder de visión:** 170M, opcional.
- **Encoder de audio:** 300M, opcional.

Solo cargas los encoders que necesitas, así que un pipeline de texto y código nunca paga por visión ni audio.

La ventana de contexto es de 8.192 tokens, cuatro veces la de la primera versión. Las entradas multimodales comparten ese presupuesto: unas 29 imágenes, unos 58 fotogramas de video o alrededor de cinco minutos y medio de audio. Google indica soporte para más de 100 idiomas.

Según Google, la primera versión de EmbeddingGemma, publicada el año pasado, superó los 20 millones de descargas.

## ¿EmbeddingGemma 2 es mejor para buscar código?

Sí, y el código es lo que más cambió. En MTEB Code, EmbeddingGemma 2 obtiene 78,68 frente a 68,76 de la versión anterior: 9,92 puntos más, alrededor de un 14% relativo.

En texto multilingüe, en cambio, las dos versiones están prácticamente empatadas (61,36 frente a 61,15). Si ya usas EmbeddingGemma 1 para RAG sobre texto plano, la razón para actualizar es la multimodalidad o el código, no la prosa.

Todas estas cifras vienen de la model card de Google y usan el checkpoint en precisión completa. Son resultados autorreportados, y “el mejor de su clase entre los embedders multimodales de menos de 1B” es una categoría que define la propia Google. Tómalas como punto de partida y mide sobre tu propio repositorio.

Google posiciona la mejora en código para tres usos concretos:

- **Indexar un codebase en local** (local codebase indexing)
- **Búsqueda semántica de código** (semantic code search)
- **Recuperación de contexto para agentes de código** (code embeddings para coding agents)

Ese es el caso de uso realista para la mayoría: darle a tu agente o a tu buscador interno un índice local de tu repositorio, sin enviar el código a un tercero.

## ¿Cómo generar embeddings en local con Sentence Transformers?

El camino más rápido es Sentence Transformers. Instálalo junto con Transformers:

```bash
pip install -U sentence-transformers transformers

```

Carga el modelo en modo solo texto y con un tipo numérico seguro:

```python
import torch
from sentence_transformers import SentenceTransformer

dtype = torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float32

model = SentenceTransformer(
    "google/embeddinggemma-2",
    model_kwargs={"torch_dtype": dtype},
    config_kwargs={"vision_config": None, "audio_config": None},
)

```

Las dos entradas de `config_kwargs` importan. Por defecto, `SentenceTransformer` carga los 740M de parámetros, incluidos visión y audio. Al desactivar ambos, te quedas con el modelo de texto de 270M.

Ahora indexa algo de código y búscalo en lenguaje natural:

```python
files = {
    "auth/session.py": "def refresh_token(user): ...",
    "billing/invoice.py": "def generate_invoice(order): ...",
}

doc_embs = model.encode(
    [f"title: {name} | text: {code}" for name, code in files.items()]
)
query_emb = model.encode("¿dónde se renueva el token de sesión?",
                         prompt_name="CodeRetrieval")

print(model.similarity(query_emb, doc_embs))

```

Dos detalles salen directamente de la model card:

- **Prefijos de tarea:** el modelo espera prefijos en el texto. `prompt_name="CodeRetrieval"` aplica `task: code retrieval | query: `a la consulta.
- **Documentos con título:** se formatean a mano como `title: {archivo} | text: {código}`. Incluir el nombre del archivo como título mejora la recuperación.

La model card también lista otros prompts:

- `SearchQuery` / `Document`: búsqueda general
- `QuestionAnswering`
- `Classification`
- `Clustering`
- `SentenceSimilarity`

## ¿Cómo usar EmbeddingGemma 2 con Ollama?

El modelo ya está en la biblioteca de Ollama, así que puedes generar embeddings con Ollama (ollama embeddings) sin escribir Python:

```bash
ollama pull embeddinggemma-2

```

Al momento de publicar esta nota, Ollama listaba, entre otros, los tags `:270m` (378 MB) y `:740m` (1,3 GB). Los metadatos de esa ficha no coinciden con la model card de Google en la ventana de contexto, así que toma la model card como referencia para los límites.

Si ya corres Gemma 4 en local con Ollama, el emparejamiento tiene sentido: EmbeddingGemma 2 comparte con Gemma 4 el tokenizer de texto y el encoder de audio, y Google lo propone como la mitad de recuperación de un pipeline de RAG en el dispositivo. Para elegir la variante de Gemma 4 según tu memoria, revisa [Gemma 4 en tu Mac con Ollama: qué variante elegir según tu RAM](https://www.yodev.dev/t/gemma-4-en-tu-mac-con-ollama-que-variante-elegir-segun-tu-ram/2175).

Google menciona además otras formas de ejecutarlo:

- **Librerías:** Transformers, transformers.js (navegador), MLX, vLLM, SGLang
- **Runtimes locales:** llama.cpp (GGUF oficial), LM Studio
- **En el dispositivo:** LiteRT y MediaPipe

## ¿Cuánta RAM necesita EmbeddingGemma 2?

Google reporta unos 191 MB de RAM activa para los pesos de solo texto y unos 567 MB para el modelo multimodal completo. Ambas cifras se midieron con cuantización en un Pixel 11 Pro, así que son el mejor caso.

En precisión completa o bfloat16, en una laptop o un servidor, cuenta con más. Los tamaños de descarga de Ollama de la sección anterior dan una idea más realista de lo que ocupa en un equipo de escritorio.

## ¿Qué errores rompen tus embeddings sin avisar?

Tres, y ninguno lanza una excepción.

**No uses `float16`.** Las activaciones del modelo superan el rango de float16. En float16 devuelve NaN o vectores degradados en silencio, en lugar de fallar. Usa `bfloat16` donde tu hardware lo soporte y, si no, `float32`, lo que incluye a la mayoría de las CPU.

**Vuelve a normalizar después de truncar.** EmbeddingGemma 2 usa Matryoshka Representation Learning (matryoshka embeddings), así que puedes recortar los vectores de 768 a 512, 256 o 128 dimensiones. Pero un vector truncado deja de tener longitud unitaria. Deja que la librería haga los dos pasos:

```python
emb = model.encode(texts, truncate_dim=256, normalize_embeddings=True)

```

Además, consultas y documentos tienen que usar la misma dimensión.

**No trunques el código demasiado.** La propia tabla de Google muestra dónde está el costo:

| Dimensiones | Almacenamiento | MTEB Code |
| --- | --- | --- |
| 768 | 1× | 78,68 |
| 512 | 1,5× menos | 77,24 |
| 256 | 3× menos | 76,18 |
| 128 | 6× menos | 71,41 |

256 es el punto óptimo: un tercio del almacenamiento a cambio de unos 2,5 puntos de precisión en código. Con 128 dimensiones, el código cae casi al nivel de la versión 1, y Google advierte que la calidad multimodal se degrada de forma considerable.

## ¿En qué base de datos vectorial guardar los embeddings?

En cualquier base de datos vectorial que acepte vectores de la dimensión que elijas: EmbeddingGemma 2 solo genera los vectores, no los almacena. Entre sus socios de lanzamiento, Google nombra a Qdrant para guardarlos.

Lo que sí depende del modelo es cuánto ocupa tu índice. Elegir la dimensión es la decisión de almacenamiento más importante: guardar a 256 dimensiones en lugar de 768 reduce el tamaño del índice a un tercio, y según la tabla anterior apenas cuesta precisión. Decide la dimensión antes de indexar: si guardas vectores truncados y más adelante quieres más dimensiones, tendrás que volver a generar todos los embeddings del corpus.

## ¿EmbeddingGemma 2 es gratis y dónde se descarga?

Sí: los pesos son abiertos bajo Apache 2.0, una licencia que permite uso comercial, así que no hay costo por token. Lo que pagas es el cómputo de tu propia máquina.

Puedes descargarlo desde:

- **Hugging Face:** `google/embeddinggemma-2`
- **Kaggle**
- **Ollama**

Al momento de publicar esta nota, Google indicaba la disponibilidad en Model Garden como “próximamente”.

El modelo viene con documentación para inferencia, embeddings multimodales y fine-tuning, además de un notebook de inicio rápido de RAG que lo combina con Gemma 4.

> **[Descripción general del modelo EmbeddingGemma  |  Google AI for Developers](https://ai.google.dev/gemma/docs/embeddinggemma?hl=es-419)**

* * *

**¿Y tú?** ¿Qué modelo de embeddings usas hoy para hacer RAG sobre tu código?

_Poll ([view on site](https://www.yodev.dev/t/embeddinggemma-2-como-generar-embeddings-en-local-sin-pagar-una-api/5543/1))_

Comenta abajo o, si este artículo te llegó por correo, responde directamente al email: tu respuesta se publica aquí.

Relacionado: [Mejorando RAG en español: probando los nuevos embeddings de Mistral](https://www.yodev.dev/t/mejorando-rag-en-espanol-probando-los-nuevos-embeddings-de-mistral/2331)
