llama.cpp と基盤となる ggml のメモリモデルを調整することで、Samsung Galaxy Watch 4 Classic(空きRAM約380MB)上で SmolLM2‑360M を動かしています。デフォルトでは、モデルがRAMに2回ロードされていました。1つは APK の mmap ページキャッシュ経由、もう1つは ggml のテンソル割り当て経由で、270MBモデルの場合ピークが524MBでした。
解決策:host_ptr を llama_model_params に渡します。これにより、CPU テンソルは mmap 領域を直接指すようになり、コピーされるのは Vulkan テンソルだけになります。実機では次のようになります:
- ピークRAM:524MB → 142MB(74%削減)
- 初回起動:19s → 11s
- 2回目の起動:約2.5s(mmap + KVキャッシュが温まった状態)
コード:
https://github.com/Perinban/llama.cpp/tree/axon‑dev
VmRSS のトレースと設計メモを含む長めの書き込み:
https://www.linkedin.com/posts/perinban-parameshwaran_machinelearning-llm-embeddedai-activity-7445374117987373056-xDj9?utm_source=share&utm_medium=member_desktop&rcm=ACoAAA1J2KoBHgKFnrEIUchmbOoZTpAqKKxKK7o
ggml‑org/llama.cpp に PR を出す予定です。host‑ptr / mmap のパターンについてのフィードバックを歓迎します。
[link] [comments]




