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
Flutterでllama.cppをつかってローカルLLMを試してみた
Search
sakuraidayo
April 26, 2025
Programming
590
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Flutterでllama.cppをつかってローカルLLMを試してみた
sakuraidayo
April 26, 2025
Other Decks in Programming
See All in Programming
JIS keyboard support in Omarchy
lef237
0
120
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
32k
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.2k
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
140
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
430
The Rails Doctrine Decade
koic
2
590
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
2
330
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.6k
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
150
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
170
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
Designing for Timeless Needs
cassininazir
1
530
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
Product Roadmaps are Hard
iamctodd
55
13k
Claude Code のすすめ
schroneko
67
230k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
630
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Transcript
Flutter でローカルLLM 1
自己紹介 名前:sakurai 株式会社SHIFT 所属 DAAE グループのエンジニア Flutter を使ったモバイルアプリ開発をしています Flutter でローカルLLM
2
前置き 2025 年初頭、DeepSeek 登場から、蒸留モデルが話題に これってモバイル端末でも動くのでは? Flutter でローカルLLM をやってみたい。 Flutter でローカルLLM
3
ローカルLLM の選択 まずローカルLLM ってどうやる? 「llama.cpp 」が最適な選択肢 GPU がない低スペック環境でも動作可能 クロスプラットフォーム対応 Android
やiOS での実装サンプルもあり動きそう Flutter でローカルLLM 4
Flutter との連携 pub.dev の既存パッケージを検証 llama_cpp_dart(https://pub.dev/packages/llama_cpp_dart) fllama(https://pub.dev/packages/fllama) 残念ながら思うように動作せず... Flutter でローカルLLM 5
開発アプローチ llama.cpp のソースコードとexample を参考に実装 今回はAndroid のみで検証 Flutter でローカルLLM 6
実装ステップ Flutter でローカルLLM 7
実装ステップ① - プロジェクト作成 % flutter create --org com.example.sakurai --platforms=android,ios -a
kotlin local_llm_sample . └── android └── app └── src └── main └── cpp ├── CMakeLists.txt ← 追加 └── llama_bridge.cpp ← 追加 Flutter でローカルLLM 8
実装ステップ② - CMakeLists.txt cmake_minimum_required(VERSION 3.22.1) project("llama-flutter") include(FetchContent) FetchContent_Declare( llama GIT_REPOSITORY
https://github.com/ggerganov/llama.cpp GIT_TAG master ) FetchContent_MakeAvailable(llama) add_library(llama_bridge SHARED llama_bridge.cpp) target_link_libraries(llama_bridge llama common android log) Flutter でローカルLLM 9
実装ステップ② - llama_bridge.cpp // llama.cppのラッパー関数 extern "C" { int64_t load_model(const
char* filename) { // モデルのロード処理 } int64_t new_context(int64_t model_ptr) { // コンテキスト作成 } // 推論関数(簡略化) const char* completion_loop(int64_t ctx_ptr, int64_t batch_ptr, int64_t sampler_ptr, int32_t len, int32_t cur) { // 推論処理 } } Flutter でローカルLLM 10
実装ステップ② - build.gradle の設定 android { defaultConfig { externalNativeBuild {
cmake { arguments.addAll(["-DLLAMA_BUILD_COMMON=ON", "-DGGML_LLAMAFILE=OFF", "-DCMAKE_BUILD_TYPE=Release"]) } } } externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" } } } Flutter でローカルLLM 11
実装ステップ③ - Flutter 側の実装 必要なパッケージを追加: dependencies: flutter_localizations: sdk: flutter ffi:
^2.1.3 Flutter でローカルLLM 12
実装ステップ③ - llama_bridge.dart import 'dart:ffi'; import "package:ffi/ffi.dart"; class LlamaFFI {
// ネイティブライブラリをロード static final DynamicLibrary _lib = DynamicLibrary.open("libllama_bridge.so"); // C++の関数とDartの関数をマッピング static final _loadModel = _lib.lookupFunction< Int64 Function(Pointer<Utf8>), int Function(Pointer<Utf8>) >('load_model'); // Dartから呼び出せるラッパーメソッド static int loadModel(String path) { final pathPtr = path.toNativeUtf8(); try { return _loadModel(pathPtr); } finally { calloc.free(pathPtr); } } } Flutter でローカルLLM 13
実装ステップ④ - アプリのUI 実装 - チャットインターフェースの実装 - モデルのダウンロード、ロードの機能 - Deepseekの蒸留モデルを検討していたが、
検証中に登場したTinySwallowに変更 Flutter でローカルLLM 14
デモ Flutter でローカルLLM 15
課題と成果 課題 高度なパラメータ調整にはllama.cpp の詳細理解が必要 成果 Flutter でローカルLLM (SLM? )を実行できた! dart:ffi
で既存のC++ の資産を利用できるようになった! Flutter でローカルLLM 16
技術ブログ https://note.shiftinc.jp/n/nd22d56bb52ec Flutter でローカルLLM 17
おわり 18