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
Flutterでllama.cppをつかってローカルLLMを試してみた
Search
sakuraidayo
April 26, 2025
Programming
540
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
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
340
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
130
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
170
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
780
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
160
OSもどきOS
arkw
0
560
Oxcを導入して開発体験が向上した話
yug1224
4
310
ふつうのFeature Flag実践入門
irof
7
3.9k
スマートグラスで並列バイブコーディング
hyshu
0
140
New "Type" system on PicoRuby
pocke
1
920
CSC307 Lecture 17
javiergs
PRO
0
320
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
130
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
How to Talk to Developers About Accessibility
jct
2
230
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
470
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Building Adaptive Systems
keathley
44
3.1k
Prompt Engineering for Job Search
mfonobong
0
340
From π to Pie charts
rasagy
0
210
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
460
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
200
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