サムネイル

mesh-llm入門: 遊休GPUをP2Pで束ねてOpenAI互換APIを作る

  • 0

こんにちは。

もるふぉです。

「家のRTX 4090と、実家の古いM1 Max、オフィスの余ってるA6000。全部束ねて235Bクラスのモデルが動いたら面白い」——そう思ったことがある人は、今週いちばんアツいニュースを見逃してます。

2026年7月11日、n0-computerがirohのP2Pネットワーク上に構築した分散推論ランタイム「Mesh LLM」を発表しました。

Rustバイナリを配って起動するだけで、手元の遊休GPUがひとつのOpenAI互換APIエンドポイントに化けます。

この記事では、Mesh LLMが何者でなぜirohと組んだのか、既存のexoやPetalsと何がどう違うのかを実務で選定する視点から整理します。

mesh-llmとは何か:irohが解決した分散推論の課題

Mesh LLMは、複数マシンに散らばったGPUをP2Pネットワークで束ね、単一のOpenAI互換APIとして公開する分散推論エンジンです。

実装はRust、配布形式は単一バイナリ(公式ブログ記載値で約18MB)、ライセンスはApache-2.0。

デフォルトで localhost:9337/v1 にエンドポイントが立つので、既存のOpenAI SDKやLangChainのbase_urlを差し替えるだけで接続できます。

これまでの分散推論の問題(NATの壁・設定の複雑さ)

exoやPetalsを一度でも試したことがある人なら、ここで折れた記憶が一度はあるはずです。

Petalsはpublicなswarmに参加する形式で自宅ホームラボへの応用がしにくく、exoはApple Silicon優遇の色が強い。

llama.cppのrpc-serverはプロトコルこそシンプルですが、複数拠点で使おうとするとポート開放とVPN設定が待ち構えます。

「GPUを持ち寄る」の前に「ネットワークをどう繋ぐか」で消耗するのが従来の実態でした。

Mesh LLMはそこを丸ごとひっくり返します。

irohがQUICとNAT越えで変えたこと

Mesh LLMがこの摩擦を消せているのは、下回りにirohを採用しているからです。

irohはIPアドレスではなく公開鍵でピアを識別するQUICベースのP2Pライブラリで、リレーサーバー経由のホールパンチングでNAT越えを自動化します。

QUIC + TLS 1.3による端点間暗号化、ストリーム多重化、そしてALPNで複数プロトコルを同一エンドポイントに同居させられる設計。

「鍵をダイヤルする」——この設計思想が、拠点をまたぐ分散推論と非常に相性がいい。

ポート開放やVPN構成なしで、遠隔地のマシンをその場でクラスタに合流させられます。

この「土台の選択」が、Mesh LLMの面白さの核心です。

Rust製18MBバイナリが意味すること

Rust製18MBバイナリの意味

「Rustで書かれた単一バイナリ」という一行に、実務上のメリットがかなり詰まっています。

依存ゼロ配布のメリット(Docker・Python環境不要)

Python製の分散推論ツールを新しいマシンにセットアップした経験がある人なら、CUDAのバージョン合わせとPyTorchのwheel探しで半日溶かした記憶があると思います。

Mesh LLMは単一バイナリなので、curlで落として実行するだけで動く。

Dockerイメージも、Python仮想環境も、pipの依存解決も要らない。

CI/CDに組み込むときも、Dockerfileが数行で書けます。

exoでセットアップを諦めた経験がある人なら、この差は体感で分かるはずです。

エンジニアの視点で見たバイナリ設計の正しさ

公式ブログ記載の約18MBというサイズは、Rustのstatic linkingとCUDAカーネルを外部に切り出す設計をきちんとやった結果です(現在のリリース版はさらに増えている)。

推論ランタイム本体をスリムに保ち、GPU依存の重い部分は実行時にロードする。

この分離ができているから、CPUのみのマシンをメッシュに混ぜたときにも「ルーティング専用ノード」として素直に振る舞います。

設計の判断が運用の柔軟性に直結している——「18MB」という数字の裏にある選択が、そのまま現場での自由度に繋がっています。

既存OpenAI SDK・LangChainとの接続方法

実務で一番効くポイントです。

Mesh LLMを立てても、既存アプリのコードはほぼ書き換え不要です。

エンドポイントをlocalhost:9337に切り替えるだけ

Mesh LLMは起動時に localhost:9337/v1 にOpenAI互換のエンドポイントを立てます。

既存コードでやることは、base_urlを差し替えるだけ。

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:9337/v1",
    api_key="mesh-llm",  # ダミーで可
)

response = client.chat.completions.create(
    model="qwen2.5-72b-instruct",
    messages=[{"role": "user", "content": "こんにちは"}],
)

裏側では、要求されたモデルを持つピアが自動で選ばれ、必要ならパイプライン分割されて応答が返ります。

呼び出し側のコードからは、OpenAI APIを叩いているのと区別がつきません。

エージェントフレームワークとの実用シナリオ

LangChain、LlamaIndex、DifyといったツールはOpenAI互換エンドポイントを前提にしているものが多く、そのまま差し込めます。

社内Botのバックエンドを手元のGPUクラスタに置き換える、エージェントのツール呼び出しを自宅の遊休GPUで捌く、みたいな構成が現実的なコストで組める。

従量課金APIを叩き続けていた部分を、電気代だけで動かせる形にリプレイスできます。

「base_urlの1行だけ変える」で、ここまで変わります。

mesh-llmの3つの動作モード(ローカル/ルーティング/分割実行)

mesh-llmの3つの動作モード

Mesh LLMは1つのバイナリで3つの動作モードを内包しています。

呼び出しが来たときに、そのノードが自分で処理するか、他ノードに転送するか、パイプラインで分割するかを自動判定します。

ローカル実行モード:シングルGPUでそのまま動く

対象モデルが自マシンのVRAMに収まるなら、ローカル実行です。

外部通信は発生しません。

動作確認や小規模モデルの日常運用はこのモードで完結します。

ルーティングモード:すでにモデルを持つピアに転送する

自分がモデルを持っていないケースでは、同じメッシュに参加している別ノードでそのモデルをロード済みのピアを探し、リクエストごと転送します。

呼び出し側から見ればエンドポイントは変わらず、内部で経路だけが変わる。

手元のノートPCから「あの重いモデルはリビングのワークステーションで動かす」といった振り分けが、明示的なプロキシ設定なしで成立します。

Skippyによるパイプライン分割:235Bを複数台で動かす仕組み

Mesh LLMの本命はここです。

内部名「Skippy」と呼ばれる分割モードでは、単一マシンのVRAMに収まらない巨大モデルをレイヤー範囲で切り、複数ノードにまたがせてパイプライン実行します。

アクティベーションがステージ間を流れていくイメージです。

公式では500M〜235Bまで40以上のモデルが動作対象として挙がっており、家庭用GPUを3〜4台束ねれば70B級までは現実的な射程に入ります。

モード設計が分かると、他ツールとの差も具体的に見えてくる。

exo・Petals・llama.cpp rpcと何が違うか(比較表)

ネットワーク
iroh (QUIC + NAT越え)
gRPC / UDP discovery
libp2p (public swarm)
独自TCP
NAT越え
自動(ホールパンチング)
同一LAN前提が強い
swarm経由
手動ポート開放
実装言語
Rust
Python
Python
C++
バイナリ
単一バイナリ(約18MB・発表時点)
Python環境要
Python環境要
自ビルド
OpenAI互換API
標準搭載
標準搭載
なし
サーバー別途
モデル対応
GGUF/safetensors 40+モデル
MLX優遇
BLOOM系中心
GGUF
プライバシー
私設メッシュ
ローカル完結
public swarm
ローカル完結

ネットワーク技術の違い(QUIC vs TCP/gRPC)

QUICはTCPと違ってストリームごとに独立したフロー制御を持つので、パイプライン推論のようにステージ間で複数の活性値が並行に流れるワークロードとは筋がいい。

Head of Line blockingが起きにくいという意味です。

exoやllama.cppのTCPベースだと、拠点間で少しでもロスがあると全ストリームが引きずられます。

対応モデル形式(GGUF・safetensors・vLLM)

Mesh LLMはGGUFとsafetensorsの両方に対応しており、Hugging Faceからダウンロードしたモデルをそのまま食わせられます。

exoはApple Silicon+MLX優遇、Petalsは公開swarmで扱えるモデルが限られる。

「持ってるモデルがそのまま使えるか」で選ぶなら、mesh-llmが素直です。

NAT・ファイアウォール越えの難易度

自宅と実家、あるいは自宅とオフィスをまたぐ構成を組もうとした瞬間、他ツールは急にハードルが上がります。

mesh-llmは公開鍵さえ交換すれば繋がる。

拠点をまたぐNAT越え構成なら、現状これが最も摩擦が少ない選択肢です。

パイプライン並列とMoEエキスパート並列の違い

Dense vs MoE の分割戦略

分割実行と一口に言っても、モデルアーキテクチャによって最適な分け方が変わります。

ここを押さえておくと、Mesh LLMの動作を裏で追いやすくなります。

Denseモデルはなぜレイヤー分割なのか

Llama系のようなDenseモデルは、全レイヤーが順番に処理される直列構造です。

だからレイヤー範囲でノードに割り振り、活性値を次段へ渡す「パイプライン並列」が素直な選択になります。

いわば、工場の流れ作業ラインをマシン間に分散させるイメージです。

Skippyがやっているのはまさにこれで、モデルグラフを見て各ノードのVRAM容量に合わせて分割点を決めます。

MoEモデルはなぜエキスパートシャーディングなのか

一方、MixtralやDeepSeek系のMoE(Mixture of Experts)モデルは、レイヤーごとに複数のエキスパートFFNが並列に配置されていて、入力トークンごとに使うエキスパートが選ばれます。

この形状なら「エキスパートを別ノードに分ける」エキスパート並列のほうが通信量を抑えやすい。

DenseモデルへのパイプラインはSkippyで実装済みで、MoEのエキスパートシャーディングはロードマップ上で開発が進行中です。

ユーザー側で分散戦略を書く必要はなく、完成すれば自動で切り替わる設計になっています。

mesh-llmを今すぐ使うべきか:限界と向いているユースケース

熱狂だけでは仕事にならないので、正直な線引きも書いておきます。

レイテンシとスループットの現実的なトレードオフ

拠点をまたぐ構成は、ネットワークのRTTがそのままレイテンシに乗ります。

同一LAN内なら数十ミリ秒で済むところが、家と実家をまたぐと数百ミリ秒。

パイプライン並列はステージ数だけ通信が発生するので、リアルタイム対話用途では体感差が出ます。

向いている用途(バッチ処理・ホームラボ実験・コスト削減)

バッチでの要約・分類・埋め込み生成、非同期のエージェント処理、モデル評価のスイート実行あたりは相性がいい。

夜間に大量トークンを流したい系のワークロードは、遊休GPUの活用先として理想的です。

ホームラボで巨大モデルを触ってみたいという目的なら、迷わず選んでいい選択肢です。

まだ向いていない用途(低レイテンシのリアルタイム推論)

音声対話やコード補完のような、100ms単位のレスポンスが要る用途は現時点では厳しい。

この領域は素直にvLLMやTGIをシングルノードで立てるか、専用のホスティング推論を使うほうが実務的です。

まとめ:irohが開いた「個人が持てる分散推論クラスタ」

Mesh LLMのおもしろさは、機能の派手さよりも「土台の選択が正しい」ことにあります。

irohというP2P基盤があったから、Rustの単一バイナリを配って起動するだけで、NATの向こう側にあるGPUまで束ねられるようになった。

しかもインターフェースはOpenAI互換で、既存のSDKやエージェントフレームワークがそのまま繋がる。

個人や小さなチームでも「自分たちのクラスタ」を持てる時代が、道具立ての面で本当に揃ってきました。

次の週末、机の下で埃をかぶってるマシンに curl でバイナリを落として、1ノードだけメッシュに参加させてみるところから始めてみてください。

会員登録して機能を使おう

この機能を利用するには、無料の会員登録が必要です。
お気に入りの記事を保存して、あとで読み返しましょう!