Slide 1

Slide 1 text

Google の LLM ライブラリ を Android アプリで 使うには? Tokyo Takahiro Menju Google Developers Expert for Android

Slide 2

Slide 2 text

Androidで使える GoogleのLLMの ライブラリ、 何個あるか知ってます か? Generated by Google’s Imagen 3 via Gemini

Slide 3

Slide 3 text

Androidで使えるGoogleのLLMライブラリ Google AI Client SDK MediaPipe Tasks Inference API Vertex AI in Firebase Gemini Nano with the Google AI Edge SDK LiteRT (元 TensorFlowLite)

Slide 4

Slide 4 text

とりあえず、どんな感じ かコードを見てみましょ う Generated by Google’s Imagen 3 via Gemini

Slide 5

Slide 5 text

コード例: MediaPipeでの例

Slide 6

Slide 6 text

コード例: MediaPipeでの例 TopKなどのオプション

Slide 7

Slide 7 text

コード例: MediaPipeでの例 TopKなどのオプション プロンプト

Slide 8

Slide 8 text

コード例: MediaPipeでの例 TopKなどのオプション プロンプト

Slide 9

Slide 9 text

コード例: Vertex AI in Firebaseでの例

Slide 10

Slide 10 text

コード例: Vertex AI in Firebaseでの例 TopKなどのオプション プロンプト

Slide 11

Slide 11 text

プロンプトを渡したり、 TemperatureやtopK、 topPなどは ほぼ一緒!? Generated by Google’s Imagen 3 via Gemini

Slide 12

Slide 12 text

LLMのライブラリでのよくある設定たち

Slide 13

Slide 13 text

Temperatureや topK、topPって なんだろう? Generated by Google’s Imagen 3 via Gemini

Slide 14

Slide 14 text

ライブラリを一つずつ見 ていく前に 知っておいても いいかも! Generated by Google’s Imagen 3 via Gemini

Slide 15

Slide 15 text

どうやって Temperatureや topK、topPが使われ るのか 調べてみよう Generated by Google’s Imagen 3 via Gemini

Slide 16

Slide 16 text

LLMの出力する部分をちょっと知っていこう 通常LLMでは各トークン(単語など)が生成されるたびに、そのトークン が入力に追加され、次のトークンの予測に使用されます。 例: 来年は → もっと 来年はもっと → 頑張る 来年はもっと頑張る → 。

Slide 17

Slide 17 text

LLMの出力する部分をちょっと知っていこう 実はモデルは”頑張る”を出力する前に各 単語のスコア(logits)を出力します。 来年はもっと →

Slide 18

Slide 18 text

LLMの出力する部分をちょっと知っていこう 実はモデルは”頑張る”を出力する前に各 単語のスコア(logits)を出力します。 ここでは”頑張る”が一番スコアが高く なっています。 来年はもっと →

Slide 19

Slide 19 text

LLMの出力する部分をちょっと知っていこう 実はモデルは”頑張る”を出力する前に各 単語のスコア(logits)を出力します。 ここでは”頑張る”が一番スコアが高く なっています。 ここから、どう”頑張る”や ”成長する”が選ばれるか 見ていきます。 ここにTemperatureやtopKなどが 関係してきます。 来年はもっと →

Slide 20

Slide 20 text

スコア(logits)から単語が出るまで スタート LLMモデル Temperature による割り算 TopK, TopPに よるフィルタリ ング ソフトマックス関数 による確率分布の 作成 確率で次のトー クンを 選ぶ 出力 トークンたちの スコア(logits) 割り算された スコア トークンたちの 確率分布 今のトークン 次の トークン フィルタリングされたス コア

Slide 21

Slide 21 text

スコア(logits)からどう次のトークンを選ぶか? スタート LLM モデル ? 今のトークン “来年は” “もっと” トークンたちの スコア(logits)

Slide 22

Slide 22 text

スコア(logits)からどう次のトークンを選ぶか? この表から次の単語を選ぶに は? それぞれのトークンごとに、 どのくらいの確率で出すかの表 (確率分布)がほしい。 スコア(logits)から確率分布に してみよう

Slide 23

Slide 23 text

スコア(logits)からどうやって確率分布にするか スタート LLM モデル ソフトマックス関数 による確率分布の 作成 ? トークンたちの スコア(logits) トークンたちの 確率分布 今のトークン “来年は” “もっと”

Slide 24

Slide 24 text

ソフトマックス関数とは 自分は数学そんなに得意ではないので 数字を当てはめて “頑張る”の確率 33.2% をソフトマッ クス関数で計算してみます

Slide 25

Slide 25 text

ソフトマックス関数とは   は例えば “頑張る” の スコア(logit) の 2.0 など

Slide 26

Slide 26 text

ソフトマックス関数とは eはだいたい 2.7   は例えば “頑張る” の スコア(logit) の 2.0 など

Slide 27

Slide 27 text

ソフトマックス関数とは eはだいたい 2.7   は例えば “頑張る” の スコア(logit) の 2.0 など 2.7 の 2.0 乗を 計算すると 7.4 ぐらい

Slide 28

Slide 28 text

ソフトマックス関数とは eはだいたい 2.7   は例えば “頑張る” の スコア(logit) の 2.0 など 2.7 の 2.0 乗を 計算すると 7.4 ぐらい “頑張る”や”成長する” などのスコア (logits)で 分子と同じ計算して それを合計 (Σ)した値 22.29 ぐらいになる

Slide 29

Slide 29 text

ソフトマックス関数とは eはだいたい 2.7   は例えば “頑張る” の スコア(logit) の 2.0 など 2.7 の 2.0 乗を 計算すると 7.4 ぐらい “頑張る”や”成長する” などのスコア(logits)で分 子と同じ計算して それを合計(Σ)した値 22.29 ぐらいになる 7.4 / 22.29 = 0.33 33% ぐらいの確率で ”頑張る” を出す

Slide 30

Slide 30 text

なんでソフトマックス関数なの? (1/2) ● スコア(logits) はマイナス になりえる。 ● eはだいたい2.7 ● がマイナスになったときでも   にするとプラスになるため、確 率を計算しやすい ● 乗数の計算の例 ○ 2^2 = 4 ○ 2^1 = 2 ○ 2^0 = 1 ○ 2^-1 = 1/2  -1でも 結果はプラスに!

Slide 31

Slide 31 text

なんでソフトマックス関数なの? (2/2) ● スコア(logits)の値に差があると きにスコア(logits)同士で 指数関数的に確率に 差をつけられる ○ 2^1 = 2 ○ 2^10 = 1024

Slide 32

Slide 32 text

なんでソフトマックス関数なの? (2/2) ● スコア(logits)の値に差があると きにスコア(logits)同士で 指数関数的に確率に 差をつけられる ○ 2^1 = 2 ○ 2^10 = 1024 → この性質たちがトークンごとの 確率(確率分布)を計算するのに適してい る

Slide 33

Slide 33 text

確率分布からトークンを選ぶ スタート ソフトマックス関数 による確率分布の 作成 確率で次の トークン を選ぶ 出力 トークンたちの スコア(logits) トークンたちの 確率分布 今のトークン 次の トークン “来年は” “もっと” “成長する” 27.1%で 選ばれた場合 LLM モデル

Slide 34

Slide 34 text

で、Temperatureって? (1/5) スタート Temperatureによ る割り算 ソフトマックス関数 による確率分布の 作成 確率で次の トークン を選ぶ 出力 トークンたちの スコア(logits) 割り算された スコア トークンたちの 確率分布 今のトークン 次の トークン “来年は” “もっと” LLM モデル

Slide 35

Slide 35 text

で、Temperatureって? (2/5) 温度。。っていっても気温?生き物。。?って感じ ですよね。 この   が Temperature です。 Temperatureでソフトマックス関数にかける前に 割り算します。 スコア(logits)

Slide 36

Slide 36 text

で、Temperatureって? (3/5) Temperature = 0.1で計算してみましょう。 ÷0.1 2.0 / 0.1 = 20.0

Slide 37

Slide 37 text

で、Temperatureって? (3/5) 2.0 / 0.1 = 20.0 になり、 20.0 - 5.0 で 15.0も差がつきま す。 ソフトマックス関数 は指数関数的に差を つけるので、 スコアが大きい”頑張 る”が87.6%にもな り、圧倒的に出やす くなります 。 Temperature = 0.1で計算してみましょう。 15.0 87.6% ÷0.1

Slide 38

Slide 38 text

で、Temperatureって? (4/5) 2.0 / 2.0 = 1.0 になり、 1.0 - 0.3 で 0.7 しか差がつきませ ん。 ソフトマックス関数 は指数関数的に確率 に差をつける ので、 差が小さい ことで、 確率が均等に なりま Temperature = 2.0で計算してみましょう。 0.7 14.0% ÷2.0

Slide 39

Slide 39 text

で、Temperatureって? (5/5) Temperatureの値が 高いほど、 logits(スコア)の差 が小さくなることで、 さまざまなものが出や すくなる代わりに、 変なものがでてしまう 確率が高まっていきま す。 “来年は” “もっと”→

Slide 40

Slide 40 text

TopK, TopPは? スタート LLM モデル Temperature による割り算 TopK, TopPに よるフィルタリ ング ソフトマックス関数 による確率分布の 作成 確率で次のトー クンを 選ぶ 出力 トークンたちの スコア(logits) 割り算された スコア トークンたちの 確率分布 今のトークン 次の トークン フィルタリングされ たスコア “来年は” “もっと”

Slide 41

Slide 41 text

TopK, TopPは? 多様なものを出したいけど、あまりにも例外的なものは出したくな いことがよくあります。 そういったときにTemperatureを計算した後にこのトークンを TopKやTopPなどをもちいてフィルタリングする 処理を行います。 実際の”来年は、”に続く 確率の低いトークンたちの例 (google/gemma-2-2b-jpn-it により生成) ID, トークン, スコア(logits), 確率

Slide 42

Slide 42 text

TopKは? TopK ではスコアの上位K個のトークンだけをフィルタリング します。 これにより極端に低い確率のトークンを排除し、生成されたテキストの品質 を保持します。 TopK = 3の場合 例えば スコア(logits)の上 位 3つのトークンだけを指 定してそれだけ残し、ソフ トマックス関数にかけるこ とができます。 上位3つ

Slide 43

Slide 43 text

TopPは? PはProbability(確率)です。 TopP では一度ソフトマックス関数にかけて、上から確率を足し合わせて いき、その TopPの値に達するまでのトークンを考慮 します。これにより重 要な選択肢を考慮しながら多様性を持たせます。 TopP = 50の場合 例えば50%を指定したら、 50%消費されるまでの上 位を選ぶ形になります。 合計60.3%

Slide 44

Slide 44 text

渡すパラメーターの、 Temperature などは分かった! Generated by Google’s Imagen 3 via Gemini

Slide 45

Slide 45 text

けど、同じパラメーターを 渡せるなら、 どのライブラリを使っても いいの? Generated by Google’s Imagen 3 via Gemini

Slide 46

Slide 46 text

Androidで使えるGoogleのLLMライブラリ Google AI Client SDK MediaPipe Tasks Inference API Vertex AI in Firebase Gemini Nano with the Google AI Edge SDK LiteRT (元 TensorFlowLite)

Slide 47

Slide 47 text

Androidで使えるGoogleのLLMライブラリ On device Cloud Google AI Client SDK MediaPipe Tasks Inference API Vertex AI in Firebase Gemini Nano with the Google AI Edge SDK LiteRT (元 TensorFlowLite)

Slide 48

Slide 48 text

On device と Cloud の違いは? On device ● サーバーにデータを送信しないた めプライバシーに配慮できる ● 即時に実行されて速くなりえる ● オフラインで動く ● API利用料など追加コストが発生し ない

Slide 49

Slide 49 text

On device と Cloud の違いは? On device Cloud ● サーバーにデータを送信しないた めプライバシーに配慮できる ● 即時に実行されて速くなりえる ● オフラインで動く ● API利用料など追加コストが発生し ない ● より進んだ大規模なLLMモデルが 利用できる ● ほぼすべての端末で利用できる ● Image to Textなど利用できる 機能が多い ● 比較的ライブラリが安定 している

Slide 50

Slide 50 text

On deviceとCloudは なんとなく わかったけど、 ライブラリごとに 違いはないの? Generated by Google’s Imagen 3 via Gemini

Slide 51

Slide 51 text

一つずつ見てみよう Generated by Google’s Imagen 3 via Gemini

Slide 52

Slide 52 text

Gemini Nano with the Google AI Edge SDK(1/2) https://developer.android.com/ai/gemini-nano より Google AI Edge SDKを アプリで使い Android OSにある AICoreにアクセスする。 AICoreがGemini Nanoや ハードウェアとの連携を行 う。 Gemini NanoはGoogle のLLMをOn deviceで実 現できる軽量モデル

Slide 53

Slide 53 text

Gemini Nano with the Google AI Edge SDK(2/2) Gemini Nano with the Google AI Edge SDK 強み 注意が必要な点 AI CoreというAndroid OSに 搭載された仕組みを使う。 ● モデルのダウンロードなどの 管理をOSに任せられる ● ライブラリステータスが実験的 ○ Pixel 9 シリーズでしか動かない (このために 買いました) ○ ユーザーの合意が必要 ● 現状、SDKのインターフェースとしては Text to Textのみ対応 On device

Slide 54

Slide 54 text

MediaPipe Tasks Inference API 強み 注意が必要な点 一般的な機械学習のユースケースに 対応するライブラリ Gemma※ などのオープンモデルな どを指定する MediaPipe Tasks Inference API ● 現状のGemini Nanoと比べると、端末の制限 が明示的には設定されていない (minSdkVersion 24(Android 7.0以上) ● LoRA modelを使ったカスタマイズが可能 ● ステータスが実験的 On device ※ GemmaはGoogleの軽量・高性能なオープンソースLLMモデル

Slide 55

Slide 55 text

LiteRT (元TensorFlowLite) On device 強み 注意が必要な点 最近TensorFlow Liteから名前が変わった。 tflite形式と言われる形式のモデルを使う ● おそらく低レベルAPIによる 柔軟性がありそう。 ● LLMでの利用方法があまり言及されていない ● 現状はAPIのレベルが低い ● おそらくGemmaのtfliteモデルは未公開 ○ オープンモデルGemmaをtfliteの形式に変換しようとしたが、メモ リが最低100GB必要なようで動作を確認することを断念しました 󰢛 ※ LiteRT (元 TensorFlowLite) ※ https://medium.com/@kennethan/running-gemma2-2b-instruct-model-with-mediapipe-on-litert-tflite-ec0d088 9dd89

Slide 56

Slide 56 text

Google AI Client SDK 強み 注意が必要な点 GeminiのAPIを直接呼び出す ● シンプルにGeminiのAPIを呼び出せる ● マルチモーダルインプットや JsonSchemaへの対応、 FunctionCallingなど進んだ機能が利用 できる ● APIキーの盗難のリスク ● プロトタイプのみにおすすめ Google AI Client SDK Cloud

Slide 57

Slide 57 text

Vertex AI in Firebase 強み 注意が必要な 点 Firebaseを使ってGoogleのGemini APIへのアクセスができる ● 安定している。 GA (Generally Available) ● マルチモーダルインプットやJsonSchemaへの 対応、FunctionCallingなど進んだ機能が利用 できる ● 直接GeminiのAPIキーなどを持つ形ではない ため、比較的セキュリティリスクが低い ● セキュリティの面からFirebase App Checkと一緒に使うことが 推奨 Cloud Vertex AI in Firebase

Slide 58

Slide 58 text

さまざまなライブラリたち があるけど、 まとめると? Generated by Google’s Imagen 3 via Gemini

Slide 59

Slide 59 text

ライブラリたちをまとめると 項目 Gemini Nano with Google AI Edge SDK MediaPipe Tasks Inference API LiteRT (旧TensorFlow Lite) Google AI Client SDK Vertex AI in Firebase AIタイプ オンデバイス オンデバイス オンデバイス クラウド クラウド ステータス Experimental(実験的)、 ユーザーの合意が必要。 Experimental(実験的)、開 発中 最近名前が変わったが昔から ある。LLM対応の事例少。 プロトタイプのみ利用可 能 Generally Available(利用 可能) モデル Gemini Nano オープンモデル(Gemma, Llamaなど) オープンモデル Geminiモデル Geminiモデル モーダリティ Text to Text Text to Text、Text to Image など Text to Textなど Text to Text、Image & Text to Text Text to Text、Image & Text to Text その他の機能 OS管理でモデルのダウン ロード/管理が簡単 LoRAサポート、モデルパス設 定可能、(顔認識などその他の 機械学習機能) モデルの最適化・変換対応、 (顔認識などその他の機械学習 機能) JSON出力サポート、API キー必要 JSON出力サポート 対応デバイス Pixel 9シリーズのみ対応 minSdkVersion 24(Android 7.0以上)、8GB 以上のRAM推奨 不明 ほぼ全デバイス ほぼ全デバイス プライバシーと セキュリティ オンデバイス処理によるプラ イバシー保護 オンデバイス処理によるプライ バシー保護 オンデバイス処理によるプライ バシー保護 APIキー盗難、悪用リス クあり Firebase利用でセキュア (Firebase App Checkとの 併用が推奨されている ) API利用料 なし なし なし あり あり

Slide 60

Slide 60 text

つまり、 どうしていくべき なんだろう? Generated by Google’s Imagen 3 via Gemini

Slide 61

Slide 61 text

考えること ● 現状はOn device AIは実験的なものが多い。 ○ ただ、プライバシーが尊重できるなどは魅力的。 ● 現状はAndroidのGoogleのライブラリでは Cloudでは Vertex AI in Firebase一択になりそう。 ● ただ、GCP, AWSとかクラウドサーバーとかからアクセ スしても良い かも?

Slide 62

Slide 62 text

考えること ● 現状はOn device AIは実験的なものが多い。 ○ ただ、プライバシーが尊重できるなどは魅力的。 ● 現状はAndroidのGoogleのライブラリでは Cloudでは Vertex AI in Firebase一択になりそう。 ● ただ、GCP, AWSとかクラウドサーバーとかからアクセ スしても良い かも? → これをふまえてどうしていく?

Slide 63

Slide 63 text

どうしていくべきか? ( 1 ) Cloud AIの選択から始める ( 2 ) On deviceに置き換え可能にする

Slide 64

Slide 64 text

(1)Cloud AIの選択から始める 他のクラウドサーバー ● 自由度が高い ○ OpenAIなどの別の LLMを呼び出したり、 RAGを使うなど高度 なカスタマイズが可 能。 Vertex AI in Firebase ● 初期のセットアップ、継 続的なメンテナンスが比 較的少ない。 ● 自動でスケールしてくれ る。 OR

Slide 65

Slide 65 text

(1)Cloud AIの選択から始める 他のクラウドサーバー ● 自由度が高い ○ OpenAIなどの別の LLMを呼び出したり、 RAGを使うなど高度 なカスタマイズが可 能。 Vertex AI in Firebase ● 初期のセットアップ、継 続的なメンテナンスが比 較的少ない。 ● 自動でスケールしてくれ る。 OR →どっちが合っているかは場合による

Slide 66

Slide 66 text

例えばFirebaseであれば、直接FirebaseのAPIをアプリ内の さまざまな場所で触らず、 DataSourceなどのクラスにまとめ、分離しておく。 アプリの実装 (2)On deviceに置き換え可能にする Cloud AIを使う DataSourceクラス FirebaseなどのCloud AI On device AI 処理をまとめることで、 後からオンデバイスに 切り替えできるようにしておく。 On device AIが安定

Slide 67

Slide 67 text

どうしていくべきか? まとめ Vertex AI in Firebaseか クラウドサーバーかを選 ぶ Vertex AI in Firebase を導入する クラウドサーバーで 実装 On deviceに置き換え可 能なようにアプリを実装す る 置き換え可能なものは On deviceに置き換え On device AIが安定 ○ 初期のセットアップ楽、 継続的なメンテナンス少 ○ 自動スケール ○ 自由度が高い

Slide 68

Slide 68 text

参考情報 1. Temperature, TopKなどの変更などを試せるコード a. Python計算コード i. https://gist.github.com/takahirom/448d2c1e3abb0f76a9bbe4b2983052e7 b. Kotlinでの計算コード i. https://gist.github.com/takahirom/6ec47fb00ab3fcc8289f281a3fc912cc c. こちらのリンクでは Web上で、これから説明する Temperatureなどを変更したり、数式の コードなどを確認することができます。 i. https://pl.kotl.in/KBMhIIdWR 2. 各種ライブラリへのリンク a. Qiita: Androidで利用できるGoogleのLLMライブラリを比較する i. https://qiita.com/takahirom/items/c3a57b386de3900f5a51

Slide 69

Slide 69 text

まとめ 1. LLMを使いこなすための 3つの重要パラメーター ○ Temperature: 確率分布を調整 ○ TopK: 上位K個のトークンを選択 ○ TopP: 確率の合計が一定値以下のトークンを選択 2. GoogleのLLMライブラリを比較 ○ オンデバイス AI: 高速、プライバシー保護、オフライン対応 ○ クラウドAI: 高性能なモデル、多機能、広範な端末対応 3. アプリ実装のポイント ○ クラウド: Vertex AI in Firebase(簡単で安全)or 自社サーバー(自由度が高い) ○ オンデバイス : プライバシー保護や低遅延が求められる場合に適しているが、現 状は実験的な段階であるため選択には留意が必要 ○ 将来を見据えた設計 : オンデバイスへの切り替えを考慮したアーキテクチャ