Quand on cherche une API EmbeddingGemma 2, il faut d’abord clarifier un point essentiel : l’API d’embeddings hébergée par Google s’appelle Gemini Embedding 2, tandis qu’EmbeddingGemma 2 est un modèle ouvert conçu avant tout pour l’inférence locale et l’edge computing. Il est donc particulièrement intéressant pour mettre en place une recherche multimodale privée, mais c’est à vous de choisir et d’exploiter la couche de service.
EmbeddingGemma 2 est-il disponible via une API Google ?
EmbeddingGemma 2 est officiellement disponible, mais la documentation actuelle de l’API Gemini gérée par Google mentionne gemini-embedding-2, et non embeddinggemma-2. La fiche du modèle EmbeddingGemma 2 et le guide développeur de Google présentent un modèle téléchargeable, utilisable avec des bibliothèques locales comme Sentence Transformers.
| Besoin | Solution la plus adaptée | Mode d’accès |
|---|---|---|
| Endpoint Google géré | Gemini Embedding 2 | API Gemini hébergée par Google |
| Inférence locale et privée | EmbeddingGemma 2 | Hugging Face/Sentence Transformers ou autre runtime |
| Compatibilité REST locale | EmbeddingGemma 2 | Ollama, LiteRT-LM ou serveur tiers |
| Recherche sur téléphone ou appareil edge | EmbeddingGemma 2 | Google AI Edge / runtime embarqué |
Un endpoint local /v1/embeddings est fourni par le runtime que vous déployez, pas par Google Cloud. Si vous cherchez le service géré, la documentation de Gemini Embedding 2 détaille le SDK cloud et les formats de requête : utilisez gemini-embedding-2, et non embeddinggemma-2.
from google import genai
client = genai.Client()
result = client.models.embed_content(
model="gemini-embedding-2",
contents="A private semantic search service",
)
print(result.embeddings)
L’appel géré utilise l’API hébergée par Google. Avec le modèle local, les identifiants et les limites dépendent du runtime que vous avez choisi de déployer.
Ce que contient réellement le modèle local
EmbeddingGemma 2 est un modèle d’embeddings multimodal de 740 millions de paramètres. Son architecture sépare un cœur texte de 270M paramètres des encodeurs optionnels dédiés à la vision et à l’audio. Vous pouvez ainsi ne charger que les modalités nécessaires à votre déploiement. Google et DeepMind le destinent à la recherche dans du texte, du code, des images, des vidéos et de l’audio, et non à la génération de texte.
| Caractéristique | EmbeddingGemma 2 |
|---|---|
| Nombre total de paramètres | 740M |
| Cœur texte | 270M |
| Encodeur de vision | 170M |
| Encodeur audio | 300M |
| Taille native des vecteurs | 768 dimensions |
| Tailles MRL réduites | 512, 256 et 128 dimensions |
| Fenêtre de contexte | 8 192 tokens |
| Modalités | Texte, code, image, vidéo, audio |
| Licence | Apache 2.0 |
La fiche du modèle décrit un espace vectoriel partagé permettant de comparer différentes modalités. Les 740M paramètres correspondent au modèle complet. Le guide développeur de Google montre qu’il est possible d’utiliser sélectivement les encodeurs : la mémoire consommée et les calculs actifs peuvent donc être inférieurs sur un parcours limité au texte, qui n’active ni la vision ni l’audio.
Choisissez le mode de service selon votre cible de déploiement
Sentence Transformers pour une application Python
Pour un service Python, la méthode officiellement documentée consiste à utiliser le checkpoint google/embeddinggemma-2 avec Sentence Transformers. Vous gardez ainsi la main sur le traitement par lots, le placement sur les appareils, les prompts, la normalisation et la réduction des vecteurs.
Un pipeline de recherche doit utiliser des instructions distinctes pour les requêtes et les documents. Dans les exemples de Google, la requête reçoit un préfixe dédié à la recherche, tandis que les documents suivent un format comme title: none | text: .... Le plus sûr est d’appeler model.encode avec le nom de prompt approprié, plutôt que d’encoder les deux côtés avec un appel générique.
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
query_vector = model.encode(
"How do I rotate an API key?",
prompt_name="query",
normalize_embeddings=True,
)
document_vectors = model.encode(
[
"title: API keys | text: Rotate keys from the security settings page.",
"title: Billing | text: Download invoices from the billing page.",
],
prompt_name="document",
normalize_embeddings=True,
)
Choisissez cette solution si vous avez besoin d’un contrôle fin depuis Python. Si plusieurs services doivent partager un contrat stable, préférez un runtime exposé via HTTP.
Ollama pour exposer rapidement un endpoint REST local
La page EmbeddingGemma 2 d’Ollama fournit une API locale simple à l’adresse http://localhost:11434/api/embed :
ollama pull embeddinggemma-2
curl http://localhost:11434/api/embed \\
-d '{
"model": "embeddinggemma-2",
"input": "A private semantic search service"
}'
Ollama propose des tags comme 270m, 440m, 570m et 740m. Les tailles de paquet affichées vont d’environ 378 Mo à 1,3 Go. Considérez-les comme des variantes de modèles empaquetées séparément, et non comme des libellés interchangeables désignant tous le checkpoint complet de 740M paramètres. Avant de définir un contrat de production, vérifiez le tag installé et les modalités d’entrée prises en charge : la famille est présentée comme multimodale, mais les fiches des variantes visibles ne documentent pas toutes les modalités avec le même niveau de précision.
Vous devez également conserver des préfixes de tâche cohérents, utiliser le même modèle et les mêmes dimensions, et reconstruire l’index si vous changez de modèle.
Les runtimes edge pour un déploiement sur appareil
Google AI Edge documente EmbeddingGemma V2 dans son guide Universal Embedder, tandis que la documentation des modèles d’embeddings LiteRT-LM décrit un mode de service local compatible avec l’API OpenAI, via /v1/embeddings. Cette voie est à privilégier lorsque le fonctionnement hors ligne et la confidentialité sur l’appareil comptent davantage que la simplicité d’un déploiement cloud classique.
Pour un serveur installé sur du matériel courant, commencez par Sentence Transformers ou Ollama. Passez à un runtime conçu pour l’edge lorsque le fonctionnement hors ligne, la confidentialité, l’empreinte au démarrage ou l’intégration à l’appareil deviennent des contraintes prioritaires.
Les cas d’usage multimodaux qui justifient un modèle plus lourd
EmbeddingGemma 2 devient surtout intéressant lorsqu’un projet doit réunir plusieurs types de médias dans un même espace de recherche.
| Cas d’usage | Ce que les embeddings multimodaux apportent |
|---|---|
| Recherche cross-modale dans des médias | Mettre en correspondance des requêtes en langage naturel avec des photos de produits, des extraits vidéo, de l’audio et des légendes. |
| Recherche dans des documents visuels | Associer le texte issu de l’OCR à la mise en page et aux images intégrées pour rechercher dans des scans. |
| Routage d’intentions sur appareil | Router localement du texte ou des médias privés sans envoyer les données brutes à un service hébergé. |
Recherche de code et retrieval pour développeurs
Le tableau d’évaluation publié indique un score MTEB Code de 78.68 pour EmbeddingGemma 2, contre 68.76 pour EmbeddingGemma 1 sur le benchmark de code cité. C’est une bonne raison de le tester pour la recherche dans des dépôts, la recherche documentaire sur des API et les usages de RAG orientés code, mais cela ne garantit pas de meilleurs résultats avec votre combinaison de langages ou votre base de code.
Quand le modèle plus lourd ne mérite pas une migration
Dans un pipeline qui ne reçoit que du texte OCR classique, la prise en charge multimodale peut ajouter de la complexité sans améliorer la qualité de recherche. Un utilisateur de Paperless-ngx résume le compromis ainsi :
« Je ne suis pas certain qu’embeddinggemma-2 soit meilleur que regular embeddinggemma pour le simple OCR que paperless-ngx envoie au modèle. Ça semble demander beaucoup plus de travail pour obtenir les mêmes résultats. » — u/Great-Cow7256, Reddit
Ce n’est pas un résultat de benchmark, mais la remarque pose le bon test de migration : comparez la qualité de recherche sur votre corpus réel avant de reconstruire un index texte qui fonctionne déjà.
Choisir la dimension : 768d, 512d, 256d ou 128d
La documentation des embeddings de Google décrit une réduction de type Matryoshka pour EmbeddingGemma 2. Vous pouvez donc choisir une représentation plus compacte après l’encodage. Des vecteurs plus petits réduisent le stockage de l’index et le volume transféré, mais la qualité baisse avec le réglage le plus agressif.
| Sortie | Facteur de compression | MTEB multilingual v2 | MTEB code v1 | MSEB retrieval |
|---|---|---|---|---|
| 768d | 1× | 61.36 | 78.68 | 69.54 |
| 512d | 1.5× | 61.17 | 77.24 | 69.18 |
| 256d | 3× | 60.41 | 76.18 | 66.76 |
| 128d | 6× | 57.89 | 71.41 | 56.71 |
Ces chiffres sont repris du tableau d’évaluation publié sur la page du modèle dans Ollama. Pour un nouvel index multimodal, commencez en 768d. Passez à 512d ou 256d si le stockage est une contrainte, et ne retenez 128d qu’après avoir testé votre charge de travail, en particulier si elle repose surtout sur du texte.
Ne mélangez pas plusieurs dimensions dans un même index vectoriel. Si une base existante contient des vecteurs de 768 dimensions, passer à 256d implique de réencoder les documents indexés et de reconstruire l’index. Les vecteurs de requête doivent utiliser le même modèle, les mêmes prompts, la même normalisation et la même dimension que les vecteurs des documents.
Décidez selon le workflow, pas selon la taille du modèle
Utilisez Gemini Embedding 2 pour bénéficier d’un endpoint Google géré. Choisissez Sentence Transformers pour garder le contrôle depuis Python, Ollama pour exposer rapidement un service HTTP local et AI Edge/LiteRT-LM lorsqu’un déploiement hors ligne sur appareil est prioritaire.
Conservez un modèle texte plus compact si votre corpus se limite à de l’OCR et que l’index actuel atteint déjà le niveau de pertinence attendu. EmbeddingGemma 2 peut simplifier une architecture multimodale, mais il n’améliorera pas automatiquement une architecture limitée au texte.
FAQ sur l’API EmbeddingGemma 2
EmbeddingGemma 2 est-il disponible via l’API Gemini ?
La documentation de l’API Gemini gérée par Google identifie actuellement gemini-embedding-2. EmbeddingGemma 2 est principalement documenté comme un modèle ouvert destiné à l’inférence locale, même si des runtimes locaux peuvent exposer des endpoints compatibles avec une API.
EmbeddingGemma 2 peut-il fonctionner sur un CPU ?
L’inférence sur CPU est possible avec les runtimes locaux qui proposent explicitement un backend CPU ; la documentation AI Edge consacrée aux embeddings constitue la référence pertinente côté runtime. Les performances dépendent toutefois du matériel, de la quantification, de la taille des lots et de la modalité utilisée.
Faut-il reconstruire les vecteurs existants ?
En général, oui, si vous changez de modèle d’embeddings, de formatage des tâches, de politique de normalisation ou de dimension des vecteurs. Conservez l’identifiant du modèle, la dimension et les métadonnées de prétraitement avec l’index afin de pouvoir reproduire la migration.