Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Android端末で実現するオンデバイスLLM 2025
Search
LINE Digital Frontier - TECH
September 11, 2025
Technology
81
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Android端末で実現するオンデバイスLLM 2025
「DroidKaigi2025」の登壇資料です。
https://2025.droidkaigi.jp/
LINE Digital Frontier - TECH
September 11, 2025
More Decks by LINE Digital Frontier - TECH
See All by LINE Digital Frontier - TECH
是時候了!將RxSwift 程式碼全部改寫成 Swift Concurrency吧!/slides_iplayground_2026_20min_static
ldf_tech
0
99
Kotlin言語仕様書へ招待 〜コード「なぜ」を読み解く〜
ldf_tech
0
1.3k
累計5000万DLサービスの裏側 – LINEマンガのKotlinで挑む大規模 Server-side ETLの最適化
ldf_tech
2
550
5000万ダウンロードを超える漫画サービスを支えるログ基盤の設計開発の全て
ldf_tech
0
2.8k
How LINE MANGA Uses ClickHouse for Real-Time AnalysisSolving Data Integration Challenges with ClickHouse
ldf_tech
0
470
会社紹介資料
ldf_tech
1
6.2k
SwiftSyntaxでUIKitとSwiftUIの使用率を完璧に計測できちゃう件について
ldf_tech
0
420
Kotlin 2.0が与えるAndroid開発の進化
ldf_tech
0
340
Road to Kotlin 〜10年続くPerl運用からの脱却〜
ldf_tech
0
140
Other Decks in Technology
See All in Technology
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
130
あけおめLINE 傾向とその対策
nasa9084
0
180
What the customer really needed
kawaguti
PRO
3
210
AI de Idea
kawaguti
PRO
2
130
「どのログを見ればいい?」 から始めた サーバーレス障害解析
y_waka1
1
110
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
2
220
開発投資の期待値を上げるプロダクトロードマップづくり ~プロダクトエンジニアが越境して事業を伸ばす~
kekekenta
1
230
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
300
サーバーレスをどこまで使う? WebRTC対戦ゲームで選んだVPSとの共存設計
kaidouji85
0
190
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
0
260
LLMに渡さなかった仕事
nanaism
0
1.1k
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
870
Featured
See All Featured
How to make the Groovebox
asonas
2
2.4k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
280
Test your architecture with Archunit
thirion
2
2.4k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
A Soul's Torment
seathinner
8
3.6k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
530
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Optimising Largest Contentful Paint
csswizardry
37
4k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
400
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.