モバイルおよびウェブで Google AI エッジを活用した Gemma 3

3月 12, 2025
Marissa Ikonomidis Staff Software Engineer
T.J. Alumbaugh Software Engineer
Mark Sherwood Senior Product Manager
Cormac Brick Principal Engineer

Gemma 3 1B は、オープン ウェイト モデルである Gemma ファミリーの新たなモデルサイズで、モバイルとウェブにアプリ内小型言語モデル(SLM)を配布する可能性を真に開くものです。本番環境に SLM をデプロイする場合、モデルは、迅速なダウンロードのために十分に小さく、、ユーザーの注意を引きつけ続けるために十分に速く動作するほか、幅広いエンドユーザー デバイスをサポートしている必要があります。

Gemma 3 1B は、わずか 529MB のサイズであるにもかかわらず、Google AI エッジの LLM 推論を通したプレフィルで 1 秒あたり最大 2585 トークンで動作し、1 ページのコンテンツを 1 秒以内に処理できます。アプリに Gemma 3 1B を組み込むと、自然言語でアプリケーションを操作したり、アプリのデータやコンテキストからコンテンツを生成したりできます。しかも、すべて完全にカスタマイズでき、ファインチューニングも可能です。

この投稿では、アプリケーションにおける Gemma 3 のユースケースの例、Android で Gemma を使う方法、いくつかのパフォーマンス指標、そしてこういったすべてをどのように実現したかについて説明します。

Gemma 3 1B で Android のアプリデータをパーソナライズされたコンテンツに変換する

アプリに Gemma 3 を組み込むと何ができるのか?

完全にオンデバイスで動作する Gemma 3 1B モデルを使うことで、AI エッジのメリットを活用できます。

  1. オフラインで利用可能: WiFi やモバイルデータが利用できなくても、アプリを完全に動作させることができます。

2. コスト: クラウド課金が不要なので、無料アプリやフリーミアム アプリを実現できます。

3. レイテンシ: サーバー呼び出しよりも高速であることが求められる機能もあります。

4. プライバシー: デバイスと切り離すことができないデータや、エンドツーエンドで暗号化されたデータにインテリジェンスをもたらします。


Gemma 1B は非常に汎用性が高く、独自のドメインやユースケースに合わせてファインチューニングすることもできます。ここでは、私たちが気に入っている Gemma 1B のユースケースをいくつか紹介します。

  1. データのキャプション生成: アプリデータを魅力的で共有可能な説明に変えます。例: 睡眠データ -> 「あなたは 7 時間よく眠りましたが、午前 2 時から午前 4 時の間に 5 回目を覚ましました」

2. ゲーム内ダイアログ: 現在のゲーム状態に基づいて NPC ダイアログを作成します。

3. スマート リプライ: メッセージのやりとりをしているときに、会話の内容を踏まえてインテリジェントな応答候補を提示します。

4. ドキュメント Q&A: Gemma 3 と新しい AI Edge RAG SDK を使い、長い文書を取り込んでユーザーの質問に回答します。


スタートガイド

ステップ 1: デモアプリを読み込む

Google AI エッジのビルド済みデモアプリを GitHub からダウンロードし、ローカルの Android デバイスにプッシュします。Gemma 3 1B で最高のパフォーマンスを得るために、4GB 以上のメモリを搭載したデバイスを推奨します。

$ wget https://github.com/google-ai-edge/mediapipe-samples/releases/download/v0.1.3/llm_inference_v0.1.3-debug.apk
$ adb install llm_inference_v0.1.3-debug.apk

または、手順に従ってソースからアプリをビルドすることもできます。


ステップ 2: CPU か GPU を選択する

Gemma 3 モデルファイルは、デプロイの柔軟性が高いので、デバイスの CPU でもモバイル GPU でもシームレスに動作します。最初にアプリを起動したときに、Gemma 3 を CPU と GPU のどちらで実行するかを選べます。モデル選択ダイアログに戻ると、モデルやバックエンドを切り替えることができます。


ステップ 3: Hugging Face からモデルをダウンロードする

デモアプリのモデル選択画面でモデルを選択すると、アプリが Hugging Face に移動します。ログインして Gemma の利用規約に同意してください。int4 で量子化された Gemma 3 1B が LiteRT HuggingFace コミュニティ組織から直接ダウンロードされ、デバイスで実行できるように最適化が一度だけ行われます(ただし、これには数秒しかかかりません)。


ステップ 4: モデルを実行する

いよいよ Gemma 3 を動かすときです。Gemma 3 には、オンデバイス処理を効率的に行えるように設計された Google AI エッジの LLM Inference API が搭載されています。

チャットによってモデルと対話できます。または、他のテキスト処理タスクを割り当てることもできます。たとえば、以下のようなことを試してみてください。

  • ブログ投稿(このブログのようなもの)や記事からいくつかの段落をコピーする。

  • LLM デモアプリに切り替える。

  • コピーしたテキストを入力ボックスに貼り付ける。

  • 「このコンテンツのソーシャル メディア投稿を作成してください。短く、わかりやすくしてください。50 語以内でお願いします」と入力し、Enter キーを押す。

ステップ 5: Gemma 3 をカスタマイズする(オプション)

オープン ウェイト モデルの Gemma ファミリーのすばらしい点の 1 つは、モデリング コミュニティが作成したファインチューニング済みバージョンがあることです。この Colab から、独自のデータを使って独自のバージョンの Gemma 3 1B を作り、それを量子化してモバイル デバイス(CPU と GPU)で独自のアプリケーションを実行する方法を確認しましょう。


パフォーマンス

ブラウザでローカルに Gemma 3 1B を使ってソーシャル メディアのコンテンツを作成する

ここで紹介するデモと計測結果は、量子化認識トレーニング(QAT)で量子化した int4 パラメータの Gemma 3 1B モデルのものです。これにより、記憶領域を大幅に節約でき、デコードのスループットも向上します。ベンチマーク対象の Gemma 3 モデルは、32、128、512、1024 の複数のプレフィル長をサポートし、コンテキスト長は 2048 です。

Measurements were taken on an Android Samsung Galaxy S24 Ultra with cpufreq governor set to performance.
この計測は、Android Samsung Galaxy S24 Ultra で、cpufreq ガバナーを performance に設定して行った。 パフォーマンスの計測結果は、スマートフォンのハードウェアや現在のアクティビティ レベルによって異なる場合がある。
Web performance measurements taken on MacBook Pro 2023 (Apple M3 Pro chip)
この計測は、MacBook Pro 2023(Apple M 3 Pro チップ)で行った。 パフォーマンスの計測結果は、コンピュータのハードウェアや現在のアクティビティ レベルによって異なる場合がある。

内部処理

上記のパフォーマンス結果は、広範囲に及ぶ最適化作業によって達成できたものです。こういった最適化は、Gemma を含むオープン ウェイト モデル全体でうまく動作するように設計されています。パフォーマンスを大幅に向上させ、再利用可能な新機能を実現するために、主に以下のような機能を利用しました。

量子化: 重みに 4 ビットの整数チャネルごとのスキームを使用した量子化認識トレーニングを Gemma に適用することで、最適な性能、モデルの品質、サイズを維持しました。重みの量子化に加えて、実行時に動的にアクティベーションを int8 に量子化することで、CPU 機能を最大限に活用できるようにしています。

KV キャッシュ レイアウトの更新: トランスフォーマー ベースのモデルで使われる KV キャッシュは、後続のトークンを生成するために、前のステップのキーと値のペアを保存します。KV キャッシュの読み取りと書き込みは頻繁に行われるため、効率的に操作できることが重要です。余分なトランスポーズやリシェイプを削減できる KV キャッシュ レイアウトを導入することで、この動作を最適化しました。この最適化により、Gemma モデルのレイテンシを CPU で約 25%、GPU で約 20% 短縮できました。GPU の KV キャッシュをパフォーマンスよくインプレースで更新するために、その他の操作も追加しています。

読み込み時間の短縮: CPU と GPU の処理を最大限に活用するため、特殊なテンソル レイアウトを使っています。この最適化された重みレイアウトを生成するには、時間と電力、そして大量のメモリが必要になる場合があります。最初にモデルを読み込むとき、最適化された形式で重みをディスクにキャッシュし、その後はキャッシュから読み取ります。テンソル レイアウトがさらに最適化されると、既存のキャッシュは自動的に無効になり、次にモデルを読み込むときに、新しいフォーマットがディスクに保存されます。

GPU の重み共有: LLM 推論プロセスには、プレフィルとデコードという 2 つのフェーズがあります。通常、この 2 つのフェーズでは、それぞれのモデルで個別のリソースが使われます。両方のフェーズで同じ重みを共有すると、LLM のメモリ フットプリントを劇的に削減できます。この手法はまったく新しいものではありませんが、LiteRT ランタイムと GPU デリゲートで簡単に再利用できる形で実現できたのは、今回が初めてです。この機能をサポートする操作では、重みがすでに GPU メモリに存在し、再利用できるかどうかを GPU デリゲートが確認します。将来的には、他のモデルもこの機能を簡単に活用できるようになるでしょう。


次のステップ

私たちが Gemma 3 の開発中に重視したのは、優れたパフォーマンスを提供しつつ、オープン ウェイト モデルが再利用できるインフラストラクチャを構築することでした。2025 年は、この取り組みを活用し、幅広いサードパーティ モデルをサポートする予定です。パフォーマンスをさらに最適化し、メモリ使用量をさらに削減することに重点を置いて、さらに多くのデバイスでモデルを利用できるようにしたいと考えています。最新の開発状況を知りたい方は、GitHub の ai_edge_torch で通知を設定してください。近日中に次のお知らせをお届けする予定です!


謝辞

Advait Jain、Akshat Sharma、Alan Kelly、Andrei Kulik、Byungchul Kim、Chunlei Niu、Chun-nien Chan、Chuo-Ling Chang、Claudio Basile、Cormac Brick、Ekaterina Ignasheva、Eric Yang、Fengwu Yao、Frank Ban、Gerardo Carranza、Grant Jensen、Haoliang Zhang、Henry Wang、Ho Ko、Jae Yoo、Jiuqiang Tang、Juhyun Lee、Jun Jiang、Khanh LeViet、Kris Tonthat、Lin Chen、Lu Wang、Malini P V、Marissa Ikonomidis、Mark Sherwood、Matthew Soulanille、Matthias Grundmann、Mogan Shieh、Mohammadreza Heydary、Na Li、Pauline Sho、Pedro Gonnet、Ping Yu、Pulkit Bhuwalka、Quentin Khan、Ram Iyengar、Raman Sarokin、Rishika Sinha、Rishubh Khurana、Ronghui Zhu、Sachin Kotwani、Sebastian Schmidt、Steven Toribio、Suleman Shahid、T.J. Alumbaugh、Tenghui Zhu、Terry(Woncheol)Heo、Tyler Mullen、Vamsi Manchala、Vitalii Dziuba、Wai Hon Law、Weiyi Wang、Xu Chen、Yishuang Pang、Youchuan Hu、Yu-hui Chen、Zichuan Wei