Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Android端末で実現するオンデバイスLLM 2025
Search
LINE Digital Frontier - TECH
September 11, 2025
Technology
0
27
Android端末で実現するオンデバイスLLM 2025
「DroidKaigi2025」の登壇資料です。
https://2025.droidkaigi.jp/
LINE Digital Frontier - TECH
September 11, 2025
Tweet
Share
More Decks by LINE Digital Frontier - TECH
See All by LINE Digital Frontier - TECH
How LINE MANGA Uses ClickHouse for Real-Time AnalysisSolving Data Integration Challenges with ClickHouse
ldf_tech
0
290
会社紹介資料
ldf_tech
1
3.3k
SwiftSyntaxでUIKitとSwiftUIの使用率を完璧に計測できちゃう件について
ldf_tech
0
310
Kotlin 2.0が与えるAndroid開発の進化
ldf_tech
0
260
Road to Kotlin 〜10年続くPerl運用からの脱却〜
ldf_tech
0
70
Kotlin Collection関数をマスター
ldf_tech
0
470
Kotlin sealed classを用いた、 ユーザーターゲティングDSL(専用言語)と 実環境で秒間1,000万評価を行う処理系の事例紹介
ldf_tech
0
270
マンガアプリのメモリ改善と解析方法
ldf_tech
0
62
Other Decks in Technology
See All in Technology
【NoMapsTECH 2025】AI Edge Computing Workshop
akit37
0
210
実践!カスタムインストラクション&スラッシュコマンド
puku0x
0
460
共有と分離 - Compose Multiplatform "本番導入" の設計指針
error96num
2
730
Practical Agentic AI in Software Engineering
uzyn
0
110
プラットフォーム転換期におけるGitHub Copilot活用〜Coding agentがそれを加速するか〜 / Leveraging GitHub Copilot During Platform Transition Periods
aeonpeople
1
160
Generative AI Japan 第一回生成AI実践研究会「AI駆動開発の現在地──ブレイクスルーの鍵を握るのはデータ領域」
shisyu_gaku
0
300
株式会社ログラス - 会社説明資料【エンジニア】/ Loglass Engineer
loglass2019
4
64k
2025年になってもまだMySQLが好き
yoku0825
8
4.8k
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
970
新規プロダクトでプロトタイプから正式リリースまでNext.jsで開発したリアル
kawanoriku0
1
140
2つのフロントエンドと状態管理
mixi_engineers
PRO
3
110
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
570
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
56
13k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Large-scale JavaScript Application Architecture
addyosmani
513
110k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
4 Signs Your Business is Dying
shpigford
184
22k
The Language of Interfaces
destraynor
161
25k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
113
20k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
What's in a price? How to price your products and services
michaelherold
246
12k
Scaling GitHub
holman
463
140k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
Transcript
AndroidͰ࣮ݱ͢ΔΦϯσόΠεLLM 2025 2024.09.12 Masayuki Suda © LINE Digital Frontier Corporation
࣍ 01. ΠϯτϩμΫγϣϯ 04. ࣮༻ੑൺֱɾ·ͱΊ 02. ࣮ํ๏ɾϝϦοτσϝϦοτ 03. Benchmark ɾࣗݾհ
ɾηογϣϯ֓ཁ ɾ༻ޠղઆ ɾ࣮༻ੑൺֱ ɾ·ͱΊ ɾOn Device LLMಋೖྫ ɾGemini Nano ɾLlama.cpp ɾMediaPipe LLM Inference API ɾձ ɾཁ ɾߍਖ਼
ΠϯτϩμΫγϣϯ 01.
1.1 ࣗݾհ LINE Digital Frontierגࣜձࣾ ɹɹMasayukiSuda ɹɹdaasuu
1.1 ࣗݾհ LINE Digital Frontier גࣜձࣾͱ
ࠓ͢͜ͱ ςΩετॲཧ
ࠓ͢͜ͱ ࢲ;ͭ͏ͷAndroidΤϯδχΞͰ͢
αϯϓϧίʔυ https://github.com/MasayukiSuda/DroidKaigiLocalLLMSample
ͳͥΦϯσόΠεLLMͳͷ͔ʁ ɾϓϥΠόγʔอޢ ɾΦϑϥΠϯಈ࡞ ɾAPIίετݮ
ͲͷΞϓϩʔνΛબͿ͖͔ʁ ɾ࣮ͷෳࡶ͞ ɾύϑΥʔϚϯε ɾϝϞϦ༻ྔ ɾόοςϦʔফඅ ɾϥΠηϯεɾӡ༻໘ ɾରԠͷ੍
ຊηογϣϯͰѻ͏3ͭͷΞϓϩʔν 1. Gemini Nano with the Google AI Edge SDK
- GoogleͷΦϯσόΠεAI 2. Llama.cpp - ྔࢠԽLLMͷωΠςΟϒ࣮ߦ 3. MediaPipe LLM Inference API (.task) - LiteRTϕʔεͷߴϨϕϧLLM API
ൺֱ͢Δ6ͭͷ࣠ 1. Ԡ࣭ 2. ಋೖͱϏϧυखॱ 3. ϝϞϦ༻ྔ 4. ਪϨΠςϯγ 5.
όοςϦʔফඅ 6. ϥΠηϯεͱӡ༻
σϞΞϓϦͷػೳ ɾAIνϟοτ ɾϦΞϧλΠϜจষཁ ɾϦΞϧλΠϜจষߍਖ਼ ɾύϑΥʔϚϯεܭଌػೳ
AIɾػցֶशͷجຊ༻ޠ **LLMʢLarge Language Modelʣ** େنݴޠϞσϧ - େྔͷςΩετͰֶशͨ͠AI **ਪʢInferenceʣ** AI͕ೖྗΛड͚ͯ͑Λग़͢͜ͱ= ΞϓϦͰ͍͏ʮॲཧʯʮܭࢉʯ
**τʔΫϯʢTokenʣ** AI͕ཧղ͢ΔςΩετͷ࠷খ୯Ґ ྫ: ʮ͜Μʹͪʯˠ ʮ͜Μʯʮʹͪʯʮʯ **ϨΠςϯγʢLatencyʣ** Ԡ࣌ؒ = ωοτϫʔΫ௨৴ͷԆͱಉ֓͡೦
Ϟσϧ࠷దԽʹؔ͢Δ༻ޠ **ྔࢠԽʢQuantizationʣ** ϞσϧαΠζΛখ͘͢͞Δٕज़ = ը૾ѹॖʢJPEGʣͷAI൛ **ετϦʔϛϯάੜ** จষΛগͣͭ͠ϦΞϧλΠϜग़ྗ = ProgressBar Ͱͷਐḿදࣔͱྨࣅ
**ίϯςΩεταΠζ** ҰʹॲཧͰ͖ΔςΩετྔͷ্ݶ = BundleʹೖΕΒΕΔσʔλαΠζͷ੍ݶͱྨࣅ
ηογϣϯͰ͍ͬͯΔ Google Pixel 9ɿ • RAM 12G • ετϨʔδ 128G
• CPU Google Tensor G4
࣮ํ๏ɾϝϦοτσϝϦοτ 02.
Gemini Nano Gemini Nano
Gemini Nano֓ཁ • GoogleͷΦϯσόΠεੜAI • aicore-experimental Google άϧʔϓʹࢀՃ͠ɺAndroid AICore ςετ
ϓ ϩάϥϜʹΦϓτΠϯ͢Δ • AICore αʔϏεܦ༝ͰΞΫηε • ରԠɿPixel 9γϦʔζ
Gemini Nano֓ཁ https://developer.android.com/ai/gemini-nano/experimental
Gemini Nano ࣮खॱᶃ: ґଘੑ
Gemini Nano ࣮खॱᶄ: minSDK
Gemini Nano ࣮खॱᶄ: minSDK
Gemini Nano ࣮खॱᶅ: ModelΛ࡞ Temperature: ϥϯμϜੑΛ੍ޚɺ͕େ͖͍΄Ͳଟ༷ੑ্͕ঢ
Gemini Nano ࣮खॱᶅ: ModelΛ࡞ TopK: ϥϯΩϯά্ҐͷτʔΫϯ͔Βߟྀ͢ΔτʔΫϯͷ
Gemini Nano ࣮खॱᶅ: ModelΛ࡞
Gemini Nano ࣮खॱᶆ: ੜΛ։࢝
Gemini Nano ࣮ߦαϯϓϧ
Gemini Nano ϝϦοτɾσϝϦοτ ϝϦοτɿ • ߴ͍ਪ࣭ʢ࠷৽ͷGeminiٕज़ʣ • ετϦʔϛϯάੜαϙʔτ • OSϨϕϧͰͷ࠷దԽ
• GoogleΤίγεςϜ౷߹ σϝϦοτɿ • ରԠ͕ݶఆత • ΧελϚΠζੑ੍͕ݶత • ࣮ݧతػೳͰ·ͩҰൠར༻͕Ͱ͖ͳ͍ɻ • ճ͕҆ఆͤͣɺ͢Δ͜ͱ͕͋Δ
Llama.cpp Llama.cpp
Llama.cpp֓ཁ • C++ϕʔεͷLLMਪΤϯδϯ • GGUFܗࣜͷྔࢠԽϞσϧΛ༻ • JNIܦ༝ͰAndroid͔Βݺͼग़͠ • ๛ͳϞσϧબࢶ •
ΫϩεϓϥοτϑΥʔϜରԠ
Llama.cpp ࣮खॱᶃ: llama.cppΛclone Llama.cppΛclone
Llama.cpp ࣮खॱᶄ: androidͷexampleΛ։͘ examples/androidΛAndroid StudioͰ։͘
Llama.cpp ࣮खॱᶅ: minSDKΛ߹ΘͤΔ
Llama.cpp ࣮खॱᶆ: ndkͷFIlterΛઃఆ͢Δ
Llama.cpp ࣮खॱᶇ:aarΛ࡞Δ
Llama.cpp ࣮खॱᶈ:aarΛϓϩδΣΫτʹಋೖ
Llama.cpp ࣮खॱᶈ:aarΛґଘੑʹՃ͑Δ
Llama.cpp ࣮खॱᶉ: Instance ॳظԽ
Llama.cpp ࣮खॱᶊ:ਪ࣮ߦ
Llama.cpp Ϟσϧͷબࢶ ར༻ՄೳϞσϧྫɿ • TinyLlama 1.1B Q4: 640MBʢܰྔςετ༻ʣ • Llama
3.2 3B Q4_K_M: 2.3GBʢਪʣ • Qwen2.5 3B: 2GBʢଟݴޠରԠʣ • Phi-3.5 Mini: 2.2GBʢվྑ൛ʣ • Llama 3.2 1B Instruct Q4_K_M: 891MBʢߴԠʣ
Llama.cpp Ϟσϧͷબࢶ ຊޠઐ༻Ϟσϧྫɿ • Suzume-llama-3-8B-japanese-Q4_K_M • ELYZA Japanese LLaMA-2-7B Fast
Q4_K_M • LLaMA-3-8B Cosmopedia Japanese Q4_K_M
Llama.cpp demo ར༻Ϟσϧ • Llama 3.2 1B Instruct Q4_K_M: 891MB
Llama.cpp ϝϦοτɹσϝϦοτ ϝϦοτɿ • ๛ͳϞσϧબࢶ • ߴͳΧελϚΠζੑ • ΫϩεϓϥοτϑΥʔϜ •
ΞΫςΟϒͳίϛϡχςΟ • Φʔϓϯιʔε σϝϦοτɿ ɾϞσϧຖʹLicense͕ҟͳΔ ɾCPUґଘ
MediaPipe LLM Inference API MediaPipe LLM Inference API
MediaPipe Tasks Inference APIɹ֓ཁ • LiteRT (چTensorFlow Lite) ্Ͱಈ࡞ •
GemmaϑΝϛϦʔ (.taskܗࣜ) ਪ • LLMಛԽͷߴϨϕϧAPI • NNAPI / GPUਪରԠ • ϞόΠϧ͚࠷దԽ
MediaPipe Tasks Inference APIɹ࣮खॱᶃ: ґଘੑ
MediaPipe Tasks Inference APIɹ࣮खॱᶄ: .taskϑΝΠϧஔ • μϯϩʔυΛ४උ • Google Play
Asset Delivery • αϯϓϧͰassetʹஔ
MediaPipe Tasks Inference APIɹ࣮खॱᶅ: ϦϑϨΫγϣϯॳظԽ
MediaPipe Tasks Inference APIɹ࣮खॱᶆ: ςΩετੜ࣮ߦ
MediaPipe Tasks Inference APIɹϞσϧͷબࢶ ϞόΠϧσόΠε͚Ϟσϧɿ • Falcon 1B • Gemma3
• Phi2 • Stable LM
MediaPipe Tasks Inference APIɹϞσϧͷબࢶ • Gemma3 270M: 304MBʢ࠷ܰྔʣ • Gemma3
1B: 554MBʢߴੑೳɾਪʣ • Gemma3 NANO 2B: 3GBʢ࠷ߴੑೳʣ
MediaPipe Tasks Inference APIɹཁͷdemo
MediaPipe Tasks Inference API ϝϦοτɹσϝϦοτ ϝϦοτɿ • ߴϨϕϧAPIʹΑΔ؆୯ͳ࣮ • LiteRTϕʔεͷߴੑೳ
• GPU/NNAPI׆༻ • GoogleΤίγεςϜ • ܧଓతαϙʔτ σϝϦοτɿ • ΧελϚΠζͷ෯͕ڱ͍
Benchmark 03.
Benchmark Google Pixel 9ɿ • RAM 12G • ετϨʔδ 128G
• CPU Google Tensor G4
Benchmark ଌఆ߲ɿ • ࣭ɾλεΫୡ • ਪϨΠςϯγʢॳճτʔΫϯ࣌ؒɺ૯ॲཧ࣌ؒʣ • ϝϞϦ༻ྔ • όοςϦʔফඅ
Benchmark ΧςΰϦผςετέʔεɿ 1. ձʢ؆୯ͳѫࡰɺٕज़࣭ɺ࡞ʣ 2. ཁʢจɺٕज़จॻɺจهࣄʣ 3. ߍਖ਼ʢޡࣈࣈɺจ๏ɺܟޠɺϏδωεจॻʣ https://github.com/MasayukiSuda/DroidKaigiLocalLLMSample/blob/ main/TEST_PROMPT.md
Benchmark ༻ͨ͠Modelɿ Llama.cpp ɾLlama 3.2 1B Instruct Q4_K_Mʢձʣ ɾSuzume-llama-3-8B-japanese-Q4_K_Mʢཁɾߍਖ਼ʣ MediaPipe
LLM Inference API ɾgemma3-1b-it-int4.task
ձdemo Llama.cpp Gemini Nano MediaPipe LLM
ൺֱ߲ Gemini Nano Llama.cpp ʢLlama 3.2 1B Instruct Q4ʣ MediaPipe
LLM ࣭ɾλεΫୡ ˕ ⚪︎ ▲ ฏۉϝϞϦ༻ྔ 148MB 1,072MB 826MB ॳճτʔΫϯੜ࣌ؒ 298ms 798ms 560ms ૯τʔΫϯੜ࣌ؒ 64,963ms 91,054ms 20,357ms όοςϦʔফඅ 0.51% 1% 0.5% Benchmark ձͷ݁Ռ
Gemini ձɾճྫʢྑ͍ͱ͖ʣ MVVMύλʔϯͱ MVVMʢModel-View-ViewModelʣύλʔϯɺΞϓϦ։ൃͷΞʔΩςΫνϟύλʔϯͷҰͭͰ͢ɻΞϓϦΛେ͖͚ͯ͘ModelɺViewɺViewModelͷ3ͭͷίϯ ϙʔωϯτʹ͚Δ͜ͱͰɺ։ൃͷޮԽɺϞδϡʔϧԽɺςεςΟϯά͢͠͞Λ࣮͠·͢ɻ **Model:** σʔλͷιʔεͱঢ়ଶΛද͢ΫϥεͰ͢ɻσʔλϕʔεɺAPIɺ·ͨ֎෦Ϧιʔε͔ΒσʔλΛϩʔυ͠ɺϞσϧͷঢ়ଶΛߋ৽͠·͢ɻ **View:** ΞϓϦͷϢʔβʔΠϯλʔϑΣʔεɺϢʔβʔ͔ΒͷೖྗΛॲཧ͢ΔΫϥεͰ͢ɻϞσϧͷঢ়ଶʹج͍ͮͯϢʔβʔΠϯλʔϑΣʔεΛϨϯμϦϯά͠ɺ Ϣʔβʔ͔ΒͷೖྗΛॲཧ͠·͢ɻ
**ViewModel:** ViewͱModelͷհऀΫϥεͰ͢ɻViewModelɺViewͷૢ࡞ʹΑͬͯModelͷঢ়ଶ͕มԽ͢ΔΠϕϯτΛड͚औΓɺ͜ΕΒͷΠϕϯτʹΑͬͯ Modelͷঢ়ଶΛߋ৽͠·͢ɻ·ͨɺViewModelɺϢʔβʔͷೖྗΛجʹView͕ϨϯμϦϯά͢Δඞཁ͕͋ΔใΛఏڙ͠·͢ɻ ## MVVMύλʔϯΛ͏ར **1. ϞδϡʔϧԽͱςεςΟϯάͷ͢͠͞:** MVVMύλʔϯͰɺModelɺViewɺViewModelΛͦΕͧΕಠཱͨ͠ίϯϙʔωϯτͱͯ͠ѻ͏͜ͱ͕Ͱ͖·͢ɻ͜ΕɺϞδϡʔϧԽΛଅਐ͠ɺ։ൃͷޮΛߴ Ί·͢ɻ·ͨɺViewͱModelΛΞΫηεͤͣʹViewModelΛ௨ͯ͠ૢ࡞͢Δ͜ͱͰɺςεςΟϯάͷ্͢͠͞͠·͢ɻViewͱModelΛΞΫηε͢Δ ͱɺςεςΟϯά͕ෳࡶʹͳΓɺόάͷमਖ਼͘͠ͳΓ·͢ɻViewModelΛ௨ͯ͠ૢ࡞͢Δ͜ͱͰɺViewͱModelͷ૬ޓ࡞༻Λςετ͍͢͠Α͏ʹ͠·͢ɻ AndroidΞϓϦ։ൃͰMVVMύλʔϯΛ͏རʹ͍ͭͯৄ͘͠આ໌͍ͯͩ͘͠͞ɻ
Llama ձɾճྫ ### MVVMύλʔϯ MVVMύλʔϯɺModel-View-ViewModelͷόʔδϣϯͰ͢ɻ - Model:σʔλΛཧ͢ΔΫϥε - View:UIΛදࣔ͢ΔΫϥε -
ViewModel:σʔλΛཧ͠ɺUIʹม͢ΔΫϥε ### AndroidΞϓϦͰMVVMύλʔϯΛ༻͢Δར 1. **σʔλཧͷ؆ૉԽ**: MVVMύλʔϯͰɺσʔλΛཧ͢ΔΫϥεͱσʔλΛཧ͢ΔΫϥεΛ͢Δ͜ͱͰɺσʔλཧ͕؆ૉԽ͞Ε·͢ɻ 2. **UIͷ੍ޚ**: ViewModelΫϥεɺUIʹม͢Δ͜ͱͰɺUIͷ੍ޚ͕؆ૉԽ͞Ε·͢ɻ 3. **σʔλͷ҆શੑ**: ViewModelΫϥεɺσʔλͷ҆શੑΛ֬อ͢Δ͜ͱͰɺσʔλͷ҆શੑ͕ߴ·Γ·͢ɻ 4. **ϩδοΫͷࢄ**: ViewModelΫϥεɺϩδοΫͷࢄΛՄೳʹ͠ɺίʔυΛ؆ૉԽ͠·͢ɻ 5. **ςετͷ༰қੑ**: ViewModelΫϥεɺςετ͕༰қʹͳΓɺίʔυͷςετ͕؆ૉԽ͞Ε·͢ɻ 6. **σόΠεͷޓੑ**: MVVMύλʔϯͰɺσʔλΛཧ͢ΔΫϥεͱσʔλΛཧ͢ΔΫϥεΛ͢Δ͜ͱͰɺσόΠεͷޓੑ͕ߴ·Γ·͢ɻ ### AndroidΞϓϦͰMVVMύλʔϯΛ༻͢Δ߹ 1. **ModelΫϥεΛViewModelΫϥεʹม**: ModelΫϥεΛViewModelΫϥεʹม͢Δ͜ͱͰɺσʔλཧͷ؆ૉԽ͕ՄೳʹͳΓ·͢ɻ 2. **ViewModelΫϥεΛViewΫϥεʹม**: ViewModelΫϥεΛViewΫϥεʹม͢Δ͜ͱͰɺUIͷ੍ޚ͕؆ૉԽ͞Ε·͢ɻ 3. **ViewModelΫϥεΛRepositoryΫϥεʹม**: RepositoryΫϥεΛViewModelΫϥεʹม͢Δ͜ͱͰɺσʔλͷ҆શੑ͕ߴ·Γ·͢ɻ AndroidΞϓϦ։ൃͰMVVMύλʔϯΛ͏རʹ͍ͭͯৄ͘͠આ໌͍ͯͩ͘͠͞ɻ
MediaPipe LLM Inference APIɾճྫ AndroidΞϓϦ։ൃͰMVVMύλʔϯΛ͏্ͰͷརΛపఈతʹઆ໌͠·͢ʂ MVVMʢModel-View-ViewModelʣύλʔϯɺAndroidΞϓϦ։ൃʹ͓͍ͯɺUIཁૉͱͷؔੑΛؒతʹɺΑΓॊೈ͔ͭޮతʹཧ͢ΔͨΊͷΞʔΩ ςΫνϟύλʔϯͰ͢ɻ͔͠͠ɺMVVMΛ͏্ͰͷརଟذʹΓ·͢ɻ **MVVM Patternsͷར -
͜ͷ1͔ͭΒ10ͭ·Ͱઆ໌͠·͢ɿ** 1. **UI\/UX ͷ:** * MVVMύλʔϯʹΑͬͯɺUIʢϢʔβʔΠϯλʔϑΣʔεʣͰѻ͏͖ॲཧΛɺViewModelͰ͠·͢ɻ * ViewModelɺσʔλॲཧΛ͢Δ͚ͩͰɺUIཁૉʢView)ʹׯব͢ΔͷͰͳ͘ɺσʔλͰσʔλΛॲཧ͠·͢ * ͜ΕʹΑΓɺUI\/UXͷมߋʹΑͬͯɺViewModelΛมߋ͢Δ͚ͩͰɺUI͕ಈతʹߋ৽͞Ε·͢ * ͜ΕɺUI\/UXΛΑΓॊೈʹɺ؆୯ʹมߋͰ͖ΔϝϦοτ͕͋Γ·͢ 2. **σʔλۦಈ:** * ViewModelɺσʔλͷ४උɺॲཧɺͦͯ͠σʔλͷ߹ੑΛ୲͠·͢ * ViewModelͰॲཧΛཧͰ͖ΕɺUI\/UXͷมߋʹ2ճɺ2ഒɺ͞Βʹ2ഒͷॲཧΛߦ͏ඞཁ͕͋Γ·ͤΜ * ͞ΒʹɺViewModelͰσʔλΛॲཧ͢Δ͜ͱ͕Ͱ͖ΕɺUI\/UXΛ2ճɺ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒͷॲཧΛॲཧ͢Δඞཁ͕͋Γ·ͤΜ * ͜ΕɺίʔυͷมߋΛ2ճɺ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Β ʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ͞Βʹ2ഒɺ AndroidΞϓϦ։ൃͰMVVMύλʔϯΛ͏རʹ͍ͭͯৄ͘͠આ໌͍ͯͩ͘͠͞ɻ
Benchmarkɿཁprompt ҎԼͷจষΛ͘Θ͔Γ͘͢ཁ͍ͯͩ͘͠͞ɻ ॏཁͳ༰͚ͩΛ͠ɺෆཁͳࡉ෦ল͍͍ͯͩ͘͞ɻ ग़ྗຊޠͰ1ʙ3จʹ͍ͯͩ͘͠͞ɻ
Benchmarkɿཁdemo Llama.cpp Gemini Nano MediaPipe LLM
Benchmark ൺֱ߲ Gemini Nano Llama.cpp Suzume-llama-3-8B-japanese MediaPipe LLM ࣭ɾλεΫୡ ˕
˕ ˕ ฏۉϝϞϦ༻ྔ 149MB 4,558MB 832MB ॳճτʔΫϯੜ࣌ؒ 376ms 18,578ms 2,445ms ૯τʔΫϯੜ࣌ؒ 11,489ms 113,192ms 4,246ms όοςϦʔফඅ 0.11% 1% 0.01% ཁͷ݁Ռ
Gemini Nano ཁɾճྫ Android։ൃʹ͓͚ΔMVVMύλʔϯɺModel-View-ViewModelΞʔΩςΫνϟͷུͰɺ ΞϓϦέʔγϣϯͷߏΛཧ͠ɺอकੑΛ্ͤ͞ΔσβΠϯύλʔϯͰ͢ɻ ModelσʔλͱϏδωεϩδοΫΛ୲͠ɺσʔλϕʔεAPI͔ΒͷใΛཧ͠·͢ɻ ViewϢʔβʔΠϯλʔϑΣʔεΛ୲͠ɺը໘දࣔϢʔβʔͱͷ૬ޓ࡞༻Λॲཧ͠·͢ɻ ViewModelViewͱModelͷհͱͯ͠ػೳ͠ɺUIϩδοΫΛؚΈͳ͕Β View͔Βಠཱͯ͠ςετՄೳͳܗͰ࣮͞Ε·͢ɻ ͜ͷύλʔϯʹΑΓɺίʔυͷɺςελϏϦςΟͷ্ɺ
ͦͯ͠ઃఆมߋ࣌ͷσʔλอ͕࣮࣋ݱ͞Ε·͢ɻ ཁ: Android։ൃͰMVVMύλʔϯɺσʔλͱUIΛͨ͠ߏͰɺ ςετ͘͢͠ɺσʔλͷมߋΛεϜʔζʹߦ͑ΔઃܭͰ͢ɻ
Llama ཁɾճྫ Android։ൃʹ͓͚ΔMVVMύλʔϯɺModel-View-ViewModelΞʔΩςΫνϟͷུͰɺ ΞϓϦέʔγϣϯͷߏΛཧ͠ɺอकੑΛ্ͤ͞ΔσβΠϯύλʔϯͰ͢ɻ ModelσʔλͱϏδωεϩδοΫΛ୲͠ɺσʔλϕʔεAPI͔ΒͷใΛཧ͠·͢ɻ ViewϢʔβʔΠϯλʔϑΣʔεΛ୲͠ɺը໘දࣔϢʔβʔͱͷ૬ޓ࡞༻Λॲཧ͠·͢ɻ ViewModelViewͱModelͷհͱͯ͠ػೳ͠ɺUIϩδοΫΛؚΈͳ͕Β View͔Βಠཱͯ͠ςετՄೳͳܗͰ࣮͞Ε·͢ɻ ͜ͷύλʔϯʹΑΓɺίʔυͷɺςελϏϦςΟͷ্ɺ ͦͯ͠ઃఆมߋ࣌ͷσʔλอ͕࣮࣋ݱ͞Ε·͢ɻ
ग़ྗ: Android։ൃʹ͓͚ΔMVVMύλʔϯɺΞϓϦέʔγϣϯͷߏΛཧ͠ɺอकੑΛ্ͤ͞ΔσβΠϯύ λʔϯͰ͢ɻϞσϧσʔλͱϏδωεϩδοΫΛɺϏϡʔϢʔβʔΠϯλʔϑΣʔεΛɺϏϡʔϞσϧ ϏϡʔͱϞσϧΛհ͢ΔׂΛՌͨ͠·͢ɻ
MediaPipe LLM Inference APIɹཁɾճྫ Android։ൃʹ͓͚ΔMVVMύλʔϯɺσʔλΛૢ࡞͢ΔͨΊͷϞσϧΛཧ͠ɺϢʔβʔΠϯλʔϑΣʔ εΛཧ͢ΔߏΛɺModel-View-ViewModelΞʔΩςΫνϟͷུͰɺΞϓϦέʔγϣϯશମͷઃܭΛվળ ͠·͢ɻ Android։ൃʹ͓͚ΔMVVMύλʔϯɺModel-View-ViewModelΞʔΩςΫνϟͷུͰɺ ΞϓϦέʔγϣϯͷߏΛཧ͠ɺอकੑΛ্ͤ͞ΔσβΠϯύλʔϯͰ͢ɻ ModelσʔλͱϏδωεϩδοΫΛ୲͠ɺσʔλϕʔεAPI͔ΒͷใΛཧ͠·͢ɻ
ViewϢʔβʔΠϯλʔϑΣʔεΛ୲͠ɺը໘දࣔϢʔβʔͱͷ૬ޓ࡞༻Λॲཧ͠·͢ɻ ViewModelViewͱModelͷհͱͯ͠ػೳ͠ɺUIϩδοΫΛؚΈͳ͕Β View͔Βಠཱͯ͠ςετՄೳͳܗͰ࣮͞Ε·͢ɻ ͜ͷύλʔϯʹΑΓɺίʔυͷɺςελϏϦςΟͷ্ɺ ͦͯ͠ઃఆมߋ࣌ͷσʔλอ͕࣮࣋ݱ͞Ε·͢ɻ
Benchmarkɿߍਖ਼prompt ҎԼͷຊޠจΛਖ਼ࣗ͘͠વͳදݱʹߍਖ਼͍ͯͩ͘͠͞ɻ ग़ྗߍਖ਼ޙͷจষ͚ͩΛฦ͍ͯͩ͘͠͞ɻ
Benchmarkɿߍਖ਼demo Llama.cpp MediaPipe Tasks Gemini Nano
Benchmark ൺֱ߲ Gemini Nano Llama.cpp Suzume-llama-3-8B-japanese MediaPipe LLM ࣭ɾλεΫୡ ⚪︎
˕ ⚪︎ ฏۉϝϞϦ༻ྔ 168MB 4,261MB 846MB ॳճτʔΫϯੜ࣌ؒ 381ms 16,268ms 2,144ms ૯τʔΫϯੜ࣌ؒ 7,531ms 169,355ms 2,145ms όοςϦʔফඅ 0.05% 1% 0.01% ߍਖ਼ͷ݁Ռ
Gemini Nano ߍਖ਼ɾճྫʢྑ͍࣌ʣ ࢲΘࠓɺ͋ͨΒ͍͠ຊΛങ͍·ͨɻͱͯڵຯਂ͍༰ͰɺҰؾʹಡΜͰ͠·͍·ͨɻ ࢲࠓɺ৽͍͠ຊΛങ͍·ͨ͠ɻͱͯڵຯਂ͍༰ͰɺҰؾʹಡΜͰ͠·͍·ͨ͠ɻ
Llama ߍਖ਼ɾճྫ ग़ྗ: ࢲࠓɺ͋ͨΒ͍͠ຊΛങ͍·ͨ͠ɻͱͯڵຯਂ͍༰ͰɺҰؾʹಡΜͰ͠·͍·ͨ͠ɻ ղઆ: - ʮΘʯɺจ๏্ͷޡΓͰ͋Γɺলུܗͱͯ͠ʮʯʮΛʯͳͲ͕ΘΕΔ͕ɺʮΘʯਖ਼͠ ͍จ๏ͰΘΕͳ͍ͨΊɺਖ਼֬ͳදݱʹؚΊͳ͍ɻ - ʮ·ͨʯɺจ຺ʹΑͬͯʮ·ͨʯ͕ҙຯΛม͑Δ͜ͱ͕͋Δ͕ɺ͜͜Ͱʮ·ͨʯ͕ʮ͞Βʹʯ
ʮ·ͨͯ͠ʯͳͲͷҙຯΛࣔ͢͜ͱͳ͍ͨΊɺจ຺͔Βʮ·ͨʯ͕ʮ͞Βʹʯʮ·ͨͯ͠ʯ ͳͲͷҙຯΛࣔ͢߹ʹͷΈ༻͢Δͷ͕ҰൠతͰ͋Δɻ͜͜Ͱʮ·ͨʯ͕ʮ͞Βʹʯʮ·ͨ͠ ͯʯͳͲͷҙຯΛ͍ࣔͯ͠ͳ͍ͨΊɺਖ਼֬ͳදݱʹؚΊͳ͍ɻ ࢲΘࠓɺ͋ͨΒ͍͠ຊΛങ͍·ͨɻͱͯڵຯਂ͍༰ͰɺҰؾʹಡΜͰ͠·͍·ͨɻ
MediaPipe LLM Inference API ߍਖ਼ɾճྫ ࢲΘࠓɺ͋ͨΒ͍͠ຊΛങ͍·ͨɻͱͯڵຯਂ͍༰ͰɺҰؾʹಡΜͰ͠·͍·ͨɻ ࢲɺࠓ৽͍͠ຊΛങ͍ɺͱͯڵຯਂ͍༰ͰɺҰؾʹಡΈऴ͑·ͨ͠ɻ
࣮༻ੑൺֱɾ·ͱΊ 04.
࣮༻ੑൺֱ ൺֱ߲ Gemini Nano Llama.cpp MediaPipe LLM Ԡ࣭ ύʔϑΣΫτ ͨͩͨ͠·ʹ
Modelʹࠨӈ͞ΕΔ͕ ֓Ͷ ⚪︎ ཁɺߍਖ਼˕ ձݶఆత latency ˕ ⚪︎ ⚪︎ ରԠ ݶఆత ·࣮ͩݧతػೳ Android7 Ҏ߱ Android7 Ҏ߱ license Googleར༻نʹ४ڌ MIT License ※ModelͱผLicense Apache 2.0 Gemma license
͠ɺαʔϏεʹೖΕΔͳΒ
Llama.cpp, MediaPipe LLM Inference API Λ༻ͨ͠ػೳߏྫ • ϦΞϧλΠϜʹϢʔβʔʹө͢Δʹ·ͩlatencyͷෆ͕҆͋Δ • Ξτϓοτͦͷ··ϢʔβʔʹݟͤΔ͔அ͕͍͠
• ϝϞϦ༻ྔɺόοςϦʔফඅͳ͠
• ߘଈ࣌ެ։ʢUXҡ࣋ʣʗࢹͰਵ • ϩʔΧϧਪͰϓϥΠόγʔอޢˍԆ • ߘҧͷ࠷ऴஅਓ ߘࢹΛʮଈ࣌ɾʯͰ Llama.cpp, MediaPipe LLM
Inference API Λ༻ͨ͠ػೳߏྫ
ߘࢹΛʮଈ࣌ɾʯͰ
ߘࢹΛʮଈ࣌ɾʯͰ
ߘࢹΛʮଈ࣌ɾʯͰ
·ͱΊ • ςΩετॲཧͷΦϯσόΠε LLM༻్ΛߜΕ࣮༻Ͱ͖Δஈ֊ • ཁ݅ʹԠͨ͡దͳબ͕ޭͷ伴 • ٕज़ਐา͕͍Ͱͷܧଓతͳใऩू͕ඞཁ
ΞϑλʔΠϕϯτ ɾLlama.cppͷϞσϧపఈൺֱ ɾMediaPipe LLM Inference API ͷϞσϧൺֱ ɾGPUͷରԠ 10݄3 19:00ʙɹ౦ژϛουλϯຊ
11F
Special Thanks Gemini Nano Experimental https://developer.android.com/ai/gemini-nano/experimental?hl=ja Llama.cpp https://github.com/ggml-org/llama.cpp Gemma3 https://ai.google.dev/gemma/docs/core?hl=ja
MediaPipe LLM Inference API https://ai.google.dev/edge/mediapipe/solutions/genai/llm_inference/android?hl=ja
End Of doc.