Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android端末で実現するオンデバイスLLM 2025

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Masayuki Suda Masayuki Suda
September 10, 2025

Android端末で実現するオンデバイスLLM 2025

DroidKaigi 2025で発表させていただいたSlideです。
サンプルコードはこちらです。
https://github.com/MasayukiSuda/DroidKaigiLocalLLMSample

Avatar for Masayuki Suda

Masayuki Suda

September 10, 2025
Tweet

More Decks by Masayuki Suda

Other Decks in Programming

Transcript

  1. ໨࣍ 01. ΠϯτϩμΫγϣϯ 04. ࣮༻ੑൺֱɾ·ͱΊ 02. ࣮૷ํ๏ɾϝϦοτσϝϦοτ 03. Benchmark ɾࣗݾ঺հ

    ɾηογϣϯ֓ཁ ɾ༻ޠղઆ ɾ࣮༻ੑൺֱ ɾ·ͱΊ ɾOn Device LLMಋೖྫ ɾGemini Nano ɾLlama.cpp ɾMediaPipe LLM Inference API ɾձ࿩ ɾཁ໿ ɾߍਖ਼
  2. ຊηογϣϯͰѻ͏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
  3. AIɾػցֶशͷجຊ༻ޠ **LLMʢLarge Language Modelʣ** େن໛ݴޠϞσϧ - େྔͷςΩετͰֶशͨ͠AI **ਪ࿦ʢInferenceʣ** AI͕ೖྗΛड͚ͯ౴͑Λग़͢͜ͱ= ΞϓϦͰ͍͏ʮॲཧʯ΍ʮܭࢉʯ

    **τʔΫϯʢTokenʣ** AI͕ཧղ͢ΔςΩετͷ࠷খ୯Ґ ྫ: ʮ͜Μʹͪ͸ʯˠ ʮ͜Μʯʮʹͪʯʮ͸ʯ **ϨΠςϯγʢLatencyʣ** Ԡ౴࣌ؒ = ωοτϫʔΫ௨৴ͷ஗Ԇͱಉ֓͡೦
  4. Gemini Nano֓ཁ • GoogleͷΦϯσόΠεੜ੒AI • aicore-experimental Google άϧʔϓʹࢀՃ͠ɺAndroid AICore ςετ

    ϓ ϩάϥϜʹΦϓτΠϯ͢Δ • AICore αʔϏεܦ༝ͰΞΫηε • ରԠ୺຤ɿPixel 9γϦʔζ
  5. Gemini Nano ϝϦοτɾσϝϦοτ ϝϦοτɿ • ߴ͍ਪ࿦඼࣭ʢ࠷৽ͷGeminiٕज़ʣ • ετϦʔϛϯάੜ੒αϙʔτ • OSϨϕϧͰͷ࠷దԽ

    • GoogleΤίγεςϜ౷߹ σϝϦοτɿ • ରԠ୺຤͕ݶఆత • ΧελϚΠζੑ੍͕ݶత • ࣮ݧతػೳͰ·ͩҰൠར༻͕Ͱ͖ͳ͍ɻ • ճ౴͕҆ఆͤͣɺ๫૸͢Δ͜ͱ͕͋Δ
  6. 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ʢߴ଎Ԡ౴ʣ
  7. Llama.cpp ϝϦοτɹσϝϦοτ ϝϦοτɿ • ๛෋ͳϞσϧબ୒ࢶ • ߴ౓ͳΧελϚΠζੑ • ΫϩεϓϥοτϑΥʔϜ •

    ΞΫςΟϒͳίϛϡχςΟ • Φʔϓϯιʔε σϝϦοτɿ ɾϞσϧຖʹLicense͕ҟͳΔ ɾCPUґଘ
  8. MediaPipe Tasks Inference APIɹ֓ཁ • LiteRT (چTensorFlow Lite) ্Ͱಈ࡞ •

    GemmaϑΝϛϦʔ (.taskܗࣜ) ਪ঑ • LLMಛԽͷߴϨϕϧAPI • NNAPI / GPUਪ࿦ରԠ • ϞόΠϧ୺຤޲͚࠷దԽ
  9. MediaPipe Tasks Inference APIɹϞσϧͷબ୒ࢶ • Gemma3 270M: 304MBʢ࠷ܰྔʣ • Gemma3

    1B: 554MBʢߴੑೳɾਪ঑ʣ • Gemma3 NANO 2B: 3GBʢ࠷ߴੑೳʣ
  10. MediaPipe Tasks Inference API ϝϦοτɹσϝϦοτ ϝϦοτɿ • ߴϨϕϧAPIʹΑΔ؆୯ͳ࣮૷ • LiteRTϕʔεͷߴੑೳ

    • GPU/NNAPI׆༻ • GoogleΤίγεςϜ • ܧଓతαϙʔτ σϝϦοτɿ • ΧελϚΠζͷ෯͕ڱ͍
  11. ൺֱ߲໨ 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 ձ࿩ͷ݁Ռ
  12. 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ύλʔϯΛ࢖͏ར఺ʹ͍ͭͯৄ͘͠આ໌͍ͯͩ͘͠͞ɻ
  13. 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ύλʔϯΛ࢖͏ར఺ʹ͍ͭͯৄ͘͠આ໌͍ͯͩ͘͠͞ɻ
  14. 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ύλʔϯΛ࢖͏ར఺ʹ͍ͭͯৄ͘͠આ໌͍ͯͩ͘͠͞ɻ
  15. 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% ཁ໿ͷ݁Ռ
  16. 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% ߍਖ਼ͷ݁Ռ
  17. Llama ߍਖ਼ɾճ౴ྫ ग़ྗ: ࢲ͸ࠓ೔ɺ͋ͨΒ͍͠ຊΛങ͍·ͨ͠ɻͱͯ΋ڵຯਂ͍಺༰ͰɺҰؾʹಡΜͰ͠·͍·ͨ͠ɻ ղઆ: - ʮΘʯ͸ɺจ๏্ͷޡΓͰ͋Γɺলུܗͱͯ͠͸ʮ͸ʯ΍ʮΛʯͳͲ͕࢖ΘΕΔ͕ɺʮΘʯ͸ਖ਼͠ ͍จ๏Ͱ͸࢖ΘΕͳ͍ͨΊɺਖ਼֬ͳදݱʹ͸ؚΊͳ͍ɻ - ʮ·ͨʯ͸ɺจ຺ʹΑͬͯ͸ʮ·ͨʯ͕ҙຯΛม͑Δ͜ͱ͕͋Δ͕ɺ͜͜Ͱ͸ʮ·ͨʯ͕ʮ͞Βʹʯ

    ΍ʮ·ͨͯ͠΋ʯͳͲͷҙຯΛࣔ͢͜ͱ͸ͳ͍ͨΊɺจ຺͔Βʮ·ͨʯ͕ʮ͞Βʹʯ΍ʮ·ͨͯ͠΋ʯ ͳͲͷҙຯΛࣔ͢৔߹ʹͷΈ࢖༻͢Δͷ͕ҰൠతͰ͋Δɻ͜͜Ͱ͸ʮ·ͨʯ͕ʮ͞Βʹʯ΍ʮ·ͨ͠ ͯ΋ʯͳͲͷҙຯΛ͍ࣔͯ͠ͳ͍ͨΊɺਖ਼֬ͳදݱʹ͸ؚΊͳ͍ɻ ࢲΘࠓ೔ɺ͋ͨΒ͍͠ຊΛങ͍·ͨɻͱͯ΋ڵຯਂ͍಺༰ͰɺҰؾʹಡΜͰ͠·͍·ͨɻ
  18. ࣮༻ੑൺֱ ൺֱ߲໨ Gemini Nano Llama.cpp MediaPipe LLM Ԡ౴඼࣭ ύʔϑΣΫτ ͨͩͨ͠·ʹ๫૸

    Modelʹࠨӈ͞ΕΔ͕ ֓Ͷ ⚪︎ ཁ໿ɺߍਖ਼͸˕ ձ࿩͸ݶఆత latency ˕ ⚪︎ ⚪︎ ରԠ୺຤ ݶఆత ·࣮ͩݧతػೳ Android7 Ҏ߱ Android7 Ҏ߱ license Googleར༻ن໿ʹ४ڌ MIT License ※Modelͱ͸ผLicense Apache 2.0 Gemma license