コンテンツにスキップ
use-cases / run-a-local-llm-serve-it-to-your-fleet / hero
PIPE · LOCAL LLM · FAN-OUT

ローカル LLM を実行し、フリート全体に配信

1 台の GPU ボックスで 70B モデルを実行しています。フリート全体の 50 個のダウンストリームコンテナが、同じクエリに対する同じ答えを必要とします — 同じカタログをスコアリング、同じエンベディングを生成、同じ実験を評価しています。50 回の推論に支払わないでください。モデルを 1 回実行し、トークンをブロードキャストします。

Pipe API を読む
use-cases / run-a-local-llm-serve-it-to-your-fleet / mechanism

1 つの GPU、1 つのパイプ、50 人のコンシューマー

素朴な答えは、キュー、リクエストバッチング、ロック競合を伴う HTTP サーバーです。この形により安価な答えは: 各クエリが ?n=50 付きでパイプパスに送られます。モデルは 1 回実行されます。50 個のコンシューマーコンテナが同じパスを GET し、パイプによってファンアウトされた同じトークンを同時にストリーミングします。遅いワーカーは自分自身のコネクションにバックプレッシャーを適用 — 他はラインスピードを維持します。

fleet-broadcast.sh
# 1× GPU box — run the model once and pipe its tokens upward.
llama.cpp -m llama3-70b.gguf -p "$PROMPT" --stream \
  | curl -T - https://pipe.hoody.com/api/v1/pipe/llm?n=50

# 50 consumer containers — same path, ?n=50, fanned out by the pipe.
for i in $(seq 1 50); do
  curl https://pipe.hoody.com/api/v1/pipe/llm?n=50 \
    | jq -c .delta \
    | ./score.py --worker $i &
done

# Sender blocks until 50 readers have connected, then bytes flow.
# Slow workers backpressure their own connection — others stay at line speed.

PUT がバイトを上へ送ります。GET がバイトを下へ引き出します。?n=50 パラメータは何人の読者を待つかを指定します。パイプはその人数が接続するまでコネクションを保持し、その後ストリームを全員に同時にファンアウトします。キューも、バッチングレイヤーも、ロードバランサー付き推論サーバーもありません。

1 回の推論

モデルはクエリごとに正確に 1 回実行

50 個のダウンストリームコンテナが同じ答えを欲しがります。GPU でそれを 1 回生成します。パイプが配信を処理します。リクエストバッチングフレームワークも、トークンキャッシングレイヤーも、「もう一度実行しないでください」の調整もありません。

パイプファンアウト

?n=50 が同じバイトを 50 人の読者にファンアウト

パイプは 50 人の受信者が接続するまでブロックし、その後プロデューサーのバイトを各受信者に並列でストリーミングします。同一のコピー、ラインレート配信、サーバー側保存ゼロ。パスあたり最大 256 受信者。

受信者ごとのバックプレッシャー

遅いワーカーは自分自身だけを遅らせる

1 つのコンシューマーコンテナが GC 中またはディスクが忙しい場合、そのコネクションが遅れます。パイプはその受信者にバックプレッシャーを適用 — 他の 49 個はフルスピードでストリーミングを続けます。ヘッドオブラインブロッキングなし、キュー深度チューニングなし。

ファンアウト上限256パイプによって強制されるパスごとの受信者上限 — ?n を設定して、転送開始前にその数を待たせます。
クエリあたりの推論回数1モデルはクエリごとに 1 回実行され、コンシューマーごとには実行されません。コンピュートコストはフリートサイズから切り離されます。
SDK フットプリント0 kbプロデューサーは curl です。コンシューマーも curl です。HTTP を話すあらゆるものがサブスクライブできます — コンテナ、エージェント、ブラウザ、シェル。
use-cases / run-a-local-llm-serve-it-to-your-fleet / economics

支払いをやめるもの

50 個のコンテナが同じ答えを欲しがるとき、代替手段はコール単位、トークン単位、または推論サーバー単位で課金します。パイプは 1 つの HTTP 転送に対して課金します。すでにレンタルしているボックスでモデルを実行してください。

ビフォアホスト型 API · トークン単位の課金50× トークンBedrock や OpenAI は、50 個のコンテナが同じ質問をしたときに、50 回の同一の補完に対して課金します。同じプロンプト、同じ答え、50 回課金されます。
アフターローカルモデル · パイプブロードキャスト1× トークンすでにレンタルしている GPU ボックスが 1 回生成します。パイプがバイトを 50 個すべてに運びます。フリートは推論料金をスケールせずに水平にスケールします。

これはすべてのワークロードではありません — N 個のコンテナが同じ答えを欲しがる形です。それがあなたの形である場合、パイプは配線できる中で最も安価なファンアウトです。発散するプロンプトを持つワークロードは依然として実際の推論サーバーが必要です。このパターンは、質問が同一でフリートが広いときに輝きます。

use-cases / run-a-local-llm-serve-it-to-your-fleet / punchline

1 つの GPU、1 つのパイプ、50 個のコンテナが同じトークンを味わう。

0101 · 1 つの GPU がトークンを生成
0202 · 1 つのパイプが運ぶ
0303 · 50 個のコンテナが同時に味わう
推論ファンアウトサービスなしパスがブロードキャスト
use-cases / run-a-local-llm-serve-it-to-your-fleet / replaces

これが置き換えるもの

1 つのクエリが多数のコンシューマーに供給される必要があるときに手を伸ばす、すべての「フリートにモデルアクセスを与える」スタック。それぞれがコール単位で課金したり、ウェイトをホストしたり、vLLM の前にロードバランサーを実行するよう求めたりします。パイプは 1 回ブロードキャストします。

  • AWS Lambda + Bedrockトークン単位の課金 × フリートサイズ、所有していないウェイト
  • Modal Labsホスト型 GPU ランナー、ワーカーごとの秒単位課金
  • Replicateコール単位の価格設定、コンシューマーごとのネットワークラウンドトリップ
  • OpenAI API at scale同一のプロンプトがコンシューマーごとに 1 回課金
  • ロードバランサー背後の vLLM/TGIサーバー、キュー、バッチングチューニング、稼働させるオペレーション表面
  • セルフホストモデルゲートウェイルーティング、認証、レート制限 — 1 つのファンアウトのためにすべて DIY
use-cases / run-a-local-llm-serve-it-to-your-fleet / cta

1 つの答えに対して 50 件の推論料金を支払うのをやめましょう。すでにシリコンをレンタルしている場所でモデルを実行してください。パイプを開きます。フリートに読ませましょう。

Pipe API を読む
use-cases / run-a-local-llm-serve-it-to-your-fleet / related

他のユースケースを読む