個人用エージェント基盤のローカルLLMをllama.cppベースで動かすようにした
個人用エージェント基盤のローカルLLMを、llama.cppのllama-serverベースで動かすようにしました。この仕組みを「llamama」と呼んでいます。
モデルはQwen3.6-35B-A3Bです。MacBook Pro(M1 Max、メモリ64GB)を推論サーバー、MacBook Air(M3、メモリ24GB)を手元のフォールバックにして、2台で動かしています。
回している仕事
esa記事を毎日要約するパイプラインの推論このllamamaにしました。
一発質問・分類・要約のような、エージェントループを使わない単発のリクエストが、llamamaで安定して回っています。コードや記事の中身が手元のMacの中で完結する経路が1本できたことが、いちばんの価値です。
速度
llama-benchで以下の条件で測っています。
| MacBook Pro(M1 Max 64GB)電源モード「自動」 | MacBook Pro(M1 Max 64GB)電源モード「省電力」 | MacBook Air(M3 24GB) | |
|---|---|---|---|
| モデルの量子化 | Q4_K_XL(22.36GB) | Q4_K_XL(22.36GB) | IQ2_M(11.5GB) |
| コンテキスト長 | 64K | 64K | 32K |
| 生成速度(空コンテキスト) | 60.5 tok/s | 42.5 tok/s | 約30 tok/s |
| 生成速度(32K深さ) | 45.7 tok/s | 未計測 | 約11 tok/s |
| prefill速度(空コンテキスト) | 912.5 tok/s | 未計測 | 未計測 |
| prefill速度(32K深さ) | 441.3 tok/s | 未計測 | 未計測 |
コード生成のリードタイム
MacBook Airで、fib.rbを作ってテストして実行するタスクをOpenCodeに任せました。成功して、所要は約4分です。生成は約25 tok/sあるので、時間の大半はQwen3.6のthinkingでした。
推論サーバーの切り替え対応
作業ディレクトリでocと打つと、OpenCodeが起動します。推論サーバーは、起動のたびに自動で選ばれます。
oc MacBook Proが起きていればMacBook Pro、寝ていればMacBook Airのローカル
OC_MODE=local oc MacBook Airのローカル固定(出先)
OC_MODE=remote oc MacBook Pro固定
選択用のCLIが、各推論サーバーの/health(timeout 2秒)を見て決めます。推論サーバーは設定ファイルに優先順で書いていて、上から最初に応答したものが使われます。MacBook Airのローカルが選ばれたときに停止中であれば、起動してから接続します。
MacBook Airのローカルは、無操作が10分続くとモデルをメモリから外します(RSS 11GBから0.1GB)。次のリクエストで約2秒で戻ります。
メニューバーに常駐するmacOSアプリに、今どの推論サーバーが選ばれているかが出ます。メニューには「接続先: 自動(MBP優先)」「接続先: MBP固定(remote)」「接続先: このMac固定(local)」の3択があり、選んでいる項目にチェックが付きます。選択は~/.config/llm/pick_modeに保存されて、次のocから効きます。
優先順位は、次のとおりです。
OC_MODE環境変数、または--mode引数- メニューの接続先選択
- 自動(何も選んでいないときの既定)
MacBook Airのローカルの起動・停止も、このメニューから操作できます。