イン・フライトリング
決してドレインしないパイプライン:複数のリクエストが同時に別々のステージを占めるため、どのステージも前のリクエストの完了を待ちません。
Kvasir はモデルをステージのパイプラインとして提供します。各ステージはレイヤーの連続した一部を保持し、自分のレイヤーを実行して境界 — 重みではなく hidden state — を次へ渡します。どのステージもモデル全体を持たず、データ経路の中央には何も座っていません:bridge は先頭へ投入して末尾から読み、ステージどうしは自分のエージェントを介して結果を手渡します。
ドレインするパイプラインはマシンの大半を無駄にする
1 つのリクエストを終えてから次を受け入れるパイプラインでは、どの瞬間も 1 つを除くすべてのステージが遊んでいます — 4 ステージのリングはハードウェアの 4 分の 1 しか使いません。イン・フライト設計は複数のリクエストを同時に動かし続けます:ステージ 3 があるリクエストをデコードしている間に、ステージ 0 は別のリクエストのプリフィルをすでに始めています。各ステージはバッチを保持していた時間と、投入するものが何もなかった時間を報告するため、飢えているリングと飽和しているリングは見た目で区別できます。
4 ステージ、3 リクエスト、ある一瞬。
stage 0 stage 1 stage 2 stage 3
layers 0-11 12-22 23-33 34-44
request A decode
request B decode
request C prefill
boundaries pass → agent to agent, never through the callerバッチとは正確には何か
異なるリクエストの行がひとつの物理バッチに詰め込まれ、その正確なメンバーシップはホップごとに再決定されるのではなく、下流のすべてのステージへそのまま転送されます。これがプリフィル 1 件と複数のデコードが 1 パスを共有できる理由であり、バッチのサイズがロードの性質である理由でもあります:プランが行幅とマイクロバッチ幅を前もって宣言し、その幅がステージの返しうる最大結果を決めます。
パイプラインには最低 2 ステージ必要です。 1 ステージのパイプラインはきっぱり拒否されます — 先頭と末尾は別の役割であり、両方を 1 ノードに畳んだものは小さなリングではなく別のエンジンです。
リングはレイテンシの経路であり、その粒度はレイヤーです。エキスパートシャーディングはレイヤーの内側を切ることでその下限を取り払い、同じ提供ファブリックに接続します。