sgl-project/sglang
同じ前置きを何度も計算し直すのをやめて、LLMの応答が返るまでを縮める
どういうものか
大規模言語モデルを動かして配る側のためのサーバーです。担当するのは推論のほうで、GPU1枚の構成から大規模な分散クラスタまでを想定して作られています。ただし学習の外にいるわけではありません。README は「強化学習と事後学習の土台」という項目を立てて、多くの最前線モデルの学習で、文章を生成する担当(ロールアウト)として使われていると書いています。AReaL、slime、verl といった事後学習の枠組みから呼ばれる形です。非営利のオープンソース団体 LMSYS のもとで公開されているもので、README には40万を超える GPU で稼働していると書かれています。開発は特定の1社の持ち物ではなく、コミュニティで進んでいます(README に並んでいる企業名は、開発への参加ではなく導入の一覧です)。
速さの中心にあるのが RadixAttention です。README での説明は「前置きの使い回しのための仕組み」の一行だけですが(木構造の話は開発元 LMSYS の解説に出てきます)、要点は次のところにあります。実際のリクエストは、先頭が同じことが多くあります。同じシステムプロンプトが毎回付く、同じ会話の続きが何度も送られてくる、同じ文書について質問が並ぶ——このとき、共通している部分の計算は毎回まったく同じものになります。SGLang は計算済みの状態を木の形で持っておき、枝分かれした先だけを計算します。 前置きが長いほど、削れる量が増えます。
残りは、詰まりやすい場所を1つずつ潰す作りです。リクエストをまとめる処理から CPU 側の待ちを取り除く、入力を読む段階と、答えを1語ずつ生成する段階を、別々の計算機に分ける、次に来る語をまとめて先読みする、長い入力を分割して流す、といったものが並びます。動く先も広く、NVIDIA の GPU のほか、AMD の GPU(MI355/MI300)、Intel Xeon の CPU、Google の TPU、Ascend の NPU が挙がっています。
どんなときに使うか
長いシステムプロンプトを毎回付けているとき
社内ルールや口調の指定を毎回先頭に積んでいると、その部分の計算が呼び出しの回数だけ発生します。前置きが共通なら、そこが丸ごと使い回されます。プロンプトを短くする工夫をする前に、配る側で消せる無駄です。
同じ資料に何度も質問するとき
長い文書を読ませて質問を重ねる使い方では、文書の部分が毎回同じです。会話の続きも同様で、往復が増えるほど共通部分が伸びていきます。
注意点
自分でサーバーを用意して運用する人向けの道具です。 モデルの重みを持ち、サーバーを立て、面倒を見る立場になって初めて効きます。外部の API を呼ぶだけの使い方もできますが、そのときはここで書いた速さの話は効きません。
速さの数字は環境しだいです。 削れるのは前置きが共通している部分なので、毎回まったく違う短い入力ばかりが来る用途では、効きが小さくなります。自分のリクエストがどれくらい似ているかが、そのまま効果の上限になります。
対応ハードウェアの幅と、実際の熟れ具合は別です。 NVIDIA 以外の環境も並んでいますが、どこまで検証されているかは README の一覧だけでは分かりません。手元の構成で試すのが確実です。
ライセンスは Apache-2.0 で、商用利用の妨げになる条項はありません。特許条項が付いている点も、企業で使うときはむしろ安心材料になります。