有料の埋め込みAPIにコストをかけ続ける必要はありません。Google DeepMindが公開したEmbeddingGemmaは、300Mパラメータながら500M未満のモデルの中で最高水準の性能を持つオープン埋め込みモデルです。llama.cppのGGUFバージョンを使えばCPUだけでローカル実行でき、エージェントのメモリ検索コストをゼロにできます。
この記事でわかること:
- EmbeddingGemmaがなぜサイズに対して高性能なのか
- MTEBベンチマークでの具体的なスコアと次元の選び方
- llama.cppでのローカル実行とOpenAI互換サーバーの立て方
- QAT量子化バージョンの使い分け
https://huggingface.co/google/embeddinggemma-300m
有料埋め込みAPIの課題
AIエージェントの「記憶」はベクトル検索で動いています。会話履歴、参照ドキュメント、タスクの文脈——これらをベクトルに変換して類似度検索をかけるのがRAGの基本構造です。
問題は、テキストをベクトルに変換する「埋め込みモデル」にOpenAIやGeminiなどのAPIを使うとリクエストごとに費用がかかる点です。エージェントが頻繁にメモリを参照する構成では、この費用が積み上がります。
ローカルで動く高性能な埋め込みモデルがあれば、コストをゼロにできます。EmbeddingGemmaはその選択肢として有力です。
EmbeddingGemmaとは
Google DeepMindが2025年9月に公開した、300Mパラメータのオープン埋め込みモデルです。Gemma 3ファミリーをベースに、T5Gemmaで初期化する独自の学習レシピが採用されており、Geminiモデルの開発技術が流用されています。
際立った点はサイズに対する性能の高さです。Massive Text Embedding Benchmark(MTEB)の英語評価では平均スコア69.67を記録し、パラメータ数が500M未満のモデルの中で最高水準に達しています。論文(参考)によると、パラメータ数が2倍の大型モデルと同等の性能を持つとされています。100以上の言語でトレーニングされており、日本語のテキストにも対応します。
主な仕様と性能
入力は最大2048トークンで、出力は768次元のベクトルです。Matryoshka Representation Learning(MRL)という技術によって、出力を512・256・128次元に圧縮することもできます。次元を落とすほど検索速度と保存コストが改善しますが、精度はわずかに下がります。
MTEB多言語ベンチマーク(v2)での結果は次のとおりです。
| 次元数 | タスク平均スコア |
|---|---|
| 768次元 | 61.15 |
| 512次元 | 60.71 |
| 256次元 | 59.68 |
| 128次元 | 58.23 |
128次元まで落としても精度の落ち幅は約3ポイントと小さく、ストレージやメモリが限られる環境でも実用的に使えます。
llama.cppでローカル実行する
llama.cppを使うと、EmbeddingGemmaをGPUなしのCPUだけで動かせます。GGUFフォーマットのモデルファイルはHugging Faceで公開されています。
# GGUFモデルをダウンロード(Q8_0版)
huggingface-cli download ggml-org/embeddinggemma-300M-GGUF \
embeddinggemma-300M-Q8_0.gguf --local-dir .
# テキストを埋め込みベクトルに変換
./llama-embedding -m ./embeddinggemma-300M-Q8_0.gguf \
--pooling mean \
--embd-output-format json \
-p "検索したいテキスト" 2>/dev/null
OpenAI互換のサーバーとして起動する方法もあります。
./llama-server -m ./embeddinggemma-300M-Q8_0.gguf --embedding --port 8080
起動後は /v1/embeddings エンドポイントにPOSTリクエストを送ると、OpenAIのembeddings APIと同じ形式でレスポンスが返ります。既存のRAGシステムのAPIベースURLを差し替えるだけで移行できます。複数のテキストをまとめて埋め込みに変換するバッチ処理もサポートしています。
QAT量子化バージョンの選び方
Googleは量子化対応学習(QAT: Quantization-Aware Training)を施したバージョンも公開しています。通常の量子化は学習済みの重みを事後的に圧縮しますが、QATは量子化を前提として学習するため精度の劣化が少なく、同じビット数でも通常の量子化より高い精度を維持します。
Hugging Faceで入手できる主なGGUF版は次のとおりです。
ggml-org/embeddinggemma-300M-GGUF(Q8_0)— 標準精度・汎用ggml-org/embeddinggemma-300m-qat-q8_0-GGUF— QAT版Q8、精度優先ggml-org/embeddinggemma-300m-qat-q4_0-GGUF— QAT版Q4、低メモリ向け
スペックに余裕がある環境ではQAT Q8、メモリが限られるデバイスや大量リクエストをさばく構成ではQAT Q4が選択肢になります。QAT版は通常の量子化と比べて同じサイズで精度が高いため、基本的にQAT版を選ぶのが無難です。
なぜ今ローカル埋め込みが現実的なのか
EmbeddingGemmaが登場する前、ローカルで動く埋め込みモデルは精度とサイズのトレードオフに悩まされていました。実用的な精度を得るには大きなモデルが必要で、CPUだけでは速度が出ないケースも多かった。
300Mパラメータで2倍サイズのモデルと同等の性能が出るということは、コンシューマー向けのラップトップやミニPCでも十分に動く性能水準に達したことを意味します。エージェントのメモリ検索という頻度の高いタスクをローカルにオフロードする選択が、より現実的になっています。