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
23
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
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
160
20250913_JAWS_sysad_kobe
takuyay0ne
2
190
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
20
9.9k
Practical Agentic AI in Software Engineering
uzyn
0
110
DDD集約とサービスコンテキスト境界との関係性
pandayumi
3
280
【初心者向け】ローカルLLMの色々な動かし方まとめ
aratako
7
3.4k
MCPで変わる Amebaデザインシステム「Spindle」の開発
spindle
PRO
3
3.2k
RSCの時代にReactとフレームワークの境界を探る
uhyo
10
3.4k
Snowflakeの生成AI機能を活用したデータ分析アプリの作成 〜Cortex AnalystとCortex Searchの活用とStreamlitアプリでの利用〜
nayuts
1
480
データアナリストからアナリティクスエンジニアになった話
hiyokko_data
2
450
2つのフロントエンドと状態管理
mixi_engineers
PRO
3
100
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
830
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
840
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
520
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Faster Mobile Websites
deanohume
309
31k
The Invisible Side of Design
smashingmag
301
51k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Fireside Chat
paigeccino
39
3.6k
Side Projects
sachag
455
43k
What's in a price? How to price your products and services
michaelherold
246
12k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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.