広告

Samsung Galaxy Watch 4(380MB RAM)でSmolLM2‑360Mを動かす(llama.cppでRAM使用量を74%削減)

Reddit r/LocalLLaMA / 2026/4/2

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsIdeas & Deep AnalysisTools & Practical Usage

要点

  • 著者は、llama.cpp/ggmlのメモリ取り扱いを変更することで、使用可能なRAMが約380MBあるSamsung Galaxy Watch 4 Classic上でSmolLM2-360Mを正常に動作させたと報告している。
  • 主なボトルネックは、モデルが実質的に2回ロードされていること(1回はAPKのmmapページキャッシュ経由、もう1回はggmlのテンソル割り当て経由)であり、その結果、ピークRAMが約524MBまで増加している点を特定している。
  • llama_model_paramsにhost_ptrを渡すことで、CPUテンソルはmmap領域を直接参照し、コピーされるのはVulkanテンソルのみとなるため、冗長なRAM使用を回避できる。
  • 時計上では、この変更によりピークRAMが約524MBから約142MBへと減少(約74%削減)し、起動時間も改善した(19秒 → 11秒)。また、mmap/KVキャッシュがウォームアップされた後の2回目以降の起動では約2.5秒となる。
  • 著者はコードを共有し、埋め込みデプロイにおけるhost_ptr/mmapアプローチについてのフィードバックを求めつつ、ggml-org/llama.cppへのPRを提案している。

llama.cpp と基盤となる ggml のメモリモデルを調整することで、Samsung Galaxy Watch 4 Classic(空きRAM約380MB)上で SmolLM2‑360M を動かしています。デフォルトでは、モデルがRAMに2回ロードされていました。1つは APK の mmap ページキャッシュ経由、もう1つは ggml のテンソル割り当て経由で、270MBモデルの場合ピークが524MBでした。

解決策:host_ptrllama_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 のパターンについてのフィードバックを歓迎します。

submitted by /u/RecognitionFlat1470
[link] [comments]

広告