◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/API / SDK
◈ API / SDK/2026-05-10中級

Gemini Embedding の output_dimensionality を 768 から 256 に切り詰めたら、ベクトル DB のストレージが 3 分の 1 になりました

個人開発の壁紙アプリで gemini-embedding-001 の出力次元を 768 から 256 へ削った経験をもとに、Matryoshka 表現の切り詰めとストレージ・コスト・精度のトレードオフを、移行手順・int8 量子化のコード・本番ロールアウトのチェックリストまで実数で記録します。

gemini119embedding10vector-database4matryoshkacost-optimization22

✦ プレミアム記事

ある朝、Cloudflare のダッシュボードを開いたら、壁紙アプリ用に運用していたベクトルストレージの使用量が想定の 3 倍になっていました。「似てる壁紙」を順に並べる機能のためだけに、ベクトルが 2GB 近くを占めていたのです。gemini-embedding-001 を 768 次元のまま素直に使い続けていたのが理由でした。

私は 2014 年から個人で iPhone・Android アプリを開発していて、累計 5,000 万ダウンロードを超える壁紙・癒し系アプリを運営しています。アクティブなメタデータは 80,000 件ほどで、それを gemini-embedding-001 で全部ベクトル化していました。出力次元を 768 から 256 に切り詰めた経緯と、精度・ストレージ・コストの実数値、さらに本番に出すまでに踏んだ手順と落とし穴を、後追いできる形で書き残しておきます。

80,000 件のベクトルが 2GB を食い始めた朝

ベクトルそのものは 80,000 件 × 768 次元 × 4 バイト(float32)= 約 240MB です。それだけなら問題はないのですが、実際の SQLite + sqlite-vec の運用では、インデックス、メタデータの JSON、HNSW のグラフ構造を含めて 2GB 弱になっていました。Cloudflare D1 のストレージ料金は数十ドル単位ですが、月額がじわじわ上がっている事実は気持ち悪いものです。AdMob から入ってくる広告収益で運用しているアプリなので、固定費は素直に削っておきたい類のコストでした。

公式ドキュメントには output_dimensionality パラメータで 128 / 256 / 512 / 768 を指定できると書かれていますが、それぞれで精度がどれくらい落ちるかは書かれていません。「実際にどこで切り詰めるのが現実的か」は、自分のデータで測ってみないと分かりませんでした。

Matryoshka 表現の「先頭だけ切り取れる」性質

Gemini の embedding モデルは、Matryoshka representation という方式で訓練されています。やや乱暴に言えば「ベクトルの先頭 N 次元だけを切り出しても、意味の方向はおおむね保たれる」ように設計されているのです。output_dimensionality=256 を指定すると、モデル内部で 768 次元を計算したあと、先頭 256 次元を返してくれます。

宮大工だった祖父のことを時々思い出します。木材を一度大きく挽き出してから、用途に合わせて段階的に削って整えるという考え方は、Matryoshka の発想とよく似ています。1 回の埋め込み計算から 256 / 512 / 768 と段階的に取り出して使えるという設計思想は、丁寧に作られた仕組みだと感じます。

運用上の意味としては、用途ごとに別の埋め込みを生成する必要がないことです。例えば「高速な一次絞り込み」では先頭 128 次元、「メインの検索」では 256 次元、「厳密な再ランキング」では 768 次元、というふうに、同じ列のベクトルから読み出す長さだけを切り替えれば済みます。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦壁紙アプリ 80,000 件のベクトルでの 768 / 512 / 256 / 128 次元 recall@10 実測値と、私が「256 で止めた」判断基準
✦float32 → float16 → int8 と段階的に量子化していくときの動くコード、スケール係数の保存、ANN ライブラリの落とし穴
✦推奨次元の判断マトリクスと、本番に出す前に走らせている 60 秒のベンチマークゲート(動くコードつき)
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◈ API / SDK2026-09-06
Gemini Omni 1.1 で尺を伸ばす二つの道は、壊れ方が違います
Omni 1.1 のシーン延長は10秒刻みで累計40秒まで、キーフレーム補間は両端を固定して間を生成します。どちらで伸ばすかは最初の1本を作る前に決まってしまいます。尺の割り付けを先に計算する関数と、継ぎ目のずれを数値で追う検査を書き残します。
◈ API / SDK2026-09-05
Gemini 3.8 Flash は単価が据え置きでも、請求が増えることがあります
Gemini 3.8 Flash の単価は 3.7 Flash と同じですが、モデルが手数を増やす設計のため出力トークンが伸びて請求が増えることがあります。切り替え前に測る数字と、年末年始の二本立てで見積もる手順をまとめます。
◈ API / SDK2026-09-04
ループ音源のプチノイズは、Gemini に聴かせる前に波形の端で切り分けられます
環境音のループ再生で折り返しだけがプチッと鳴る。音声理解に丸ごと投げる前に、波形の端の段差を内部の変化量で正規化してふるい分ける手順と、配布形式への変換で継ぎ目が作り直される落とし穴をまとめました。