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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
LINE Digital Frontier - TECH
September 11, 2025
Technology
68
0
Share
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
Kotlin言語仕様書へ招待 〜コード「なぜ」を読み解く〜
ldf_tech
0
1.1k
累計5000万DLサービスの裏側 – LINEマンガのKotlinで挑む大規模 Server-side ETLの最適化
ldf_tech
2
410
5000万ダウンロードを超える漫画サービスを支えるログ基盤の設計開発の全て
ldf_tech
0
2.4k
How LINE MANGA Uses ClickHouse for Real-Time AnalysisSolving Data Integration Challenges with ClickHouse
ldf_tech
0
400
会社紹介資料
ldf_tech
1
5.3k
SwiftSyntaxでUIKitとSwiftUIの使用率を完璧に計測できちゃう件について
ldf_tech
0
370
Kotlin 2.0が与えるAndroid開発の進化
ldf_tech
0
310
Road to Kotlin 〜10年続くPerl運用からの脱却〜
ldf_tech
0
120
Kotlin Collection関数をマスター
ldf_tech
1
560
Other Decks in Technology
See All in Technology
最新の脅威動向から考える、コンテナサプライチェーンのリスクと対策
kyohmizu
1
670
実践ハーネスエンジニアリング:TAKTで実現するAIエージェント制御 / Practical Harness Engineering: AI Agent Control Enabled by TAKT
nrslib
9
4k
猫でもわかるKiro CLI(CDKコーディング編)
kentapapa
1
120
ネットワーク運用を楽にするAWS DevOps Agent活用法!! / 20260421 Masaki Okuda
shift_evolve
PRO
2
190
AWS Agent Registry の基礎・概要を理解する/aws-agent-registry-intro
ren8k
2
350
目的ファーストのハーネス設計 ~ハーネスの変更容易性を高めるための優先順位~
gotalab555
8
2k
AIエージェントの権限管理 1: MCPサーバー・ツールの Fine grained access control 編
ren8k
3
490
Choose your own adventure in agentic design patterns
glaforge
0
120
Azure PortalなどにみるWebアクセシビリティ
tomokusaba
0
390
No Types Needed, Just Callable Method Check
dak2
1
110
AIを共同作業者にして書籍を執筆する方法 / How to Write a Book with AI as a Co-Creator
ama_ch
2
130
Rapid Start: Faster Internet Connections, with Ruby's Help
kazuho
2
160
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
810
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
200
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
520
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
260
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
520
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
510
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
130
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
210
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.