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
0
440
Flutterでllama.cppをつかってローカルLLMを試してみた
sakuraidayo
April 26, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
770
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
710
SQL Server 2025 LT
odashinsuke
0
130
チームをチームにするEM
hitode909
0
440
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
210
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
270
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
970
ゆくKotlin くるRust
exoego
1
190
AIエージェントの設計で注意するべきポイント6選
har1101
6
3k
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
160
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
Implementation Patterns
denyspoltorak
0
140
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
0
2.9k
エンジニアに許された特別な時間の終わり
watany
106
220k
Building Adaptive Systems
keathley
44
2.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
A Modern Web Designer's Workflow
chriscoyier
698
190k
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Optimizing for Happiness
mojombo
379
70k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
370
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
2
280
Mobile First: as difficult as doing things right
swwweet
225
10k
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