[論文レビュー] SGLang: Efficient Execution of Structured Language Model Programs
SGLang は Python に埋め込まれたドメイン固有言語(DSL)であり、制御フロー、並列処理、生成のための構造化プリミティブを用いて、大規模言語モデル(LLM)の効率的プログラミングを可能にする。コンパイラ、インタプリタ、および新しいランタイム最適化技術である RadixAttention を統合しており、RadixAttention はルートツリー構造を用いて複数の LLM 推論リクエスト間でキーバリュー(KV)状態をキャッシュおよび共有することで、実行速度を最大 5× に向上させつつ、コードの複雑さを軽減し、複雑なマルチコール LLM アプリケーションにおける制御を強化する。
Large language models (LLMs) are increasingly used for complex tasks that require multiple generation calls, advanced prompting techniques, control flow, and structured inputs/outputs. However, efficient systems are lacking for programming and executing these applications. We introduce SGLang, a system for efficient execution of complex language model programs. SGLang consists of a frontend language and a runtime. The frontend simplifies programming with primitives for generation and parallelism control. The runtime accelerates execution with novel optimizations like RadixAttention for KV cache reuse and compressed finite state machines for faster structured output decoding. Experiments show that SGLang achieves up to 6.4x higher throughput compared to state-of-the-art inference systems on various large language and multi-modal models on tasks including agent control, logical reasoning, few-shot learning benchmarks, JSON decoding, retrieval-augmented generation pipelines, and multi-turn chat. The code is publicly available at https://github.com/sgl-project/sglang
研究の動機と目的
- 制御フロー、並列処理、外部相互作用を必要とする複雑なマルチコール LLM アプリケーションにおける実行性能のギャップを解消すること。
- LLM 用に高水準プログラミング言語と高性能ランタイムを共同設計し、バッチ処理、キャッシュ、並列処理などの自動最適化を可能にすること。
- 既存のモデルやフレームワークと互換性を保ちながら、LLM プログラミングのコード複雑性を軽減すること。
- 新規なランタイム技術を用いて、複数リクエスト間でアテンションのキーバリュー(KV)キャッシュを効率的に再利用できることを実現すること。
提案手法
- SGLang は Python に埋め込まれたドメイン固有言語(DSL)として実装されており、制御フローおよび生成のための構造化プリミティブ(`fork`、`gen`、`join`、`choices`、`run` など)を提供する。
- システムには動的実行用のインタプリタと、プログラムを計算グラフにトレースして積極的な最適化を実行するコンパイラが含まれる。
- RadixAttention は、ルートツリー構造を用いて LRU(最近使用されていない順)の KV 状態キャッシュを維持する新規な技術であり、複数の推論リクエスト間で自動的に再利用を可能にする。
- コンパイラは、コード移動やプリフェッチアノテーションなどの古典的最適化を適用し、実行効率を向上させる。
- ランタイムシステムは、並列処理、バッチ処理、複数リクエストおよびプログラム間での KV キャッシュ共有をサポートしており、ルートツリーの維持に伴うオーバーヘッドは最小限である。
- システムはオープンソースおよびプロprietaryな LLM と両方互換性を持ち、OpenAI や Anthropic のモデルなど、さまざまなモデルへのポータブルなデプロイメントを可能にする。
実験結果
リサーチクエスチョン
- RQ1高水準プログラミング言語と高性能ランタイムを共同設計することで、マルチコール LLM ワークロードの最適化はどの程度達成可能か?
- RQ2複数の LLM 生成コールにわたる自動 KV キャッシュ再利用は、推論効率をどの程度向上させるか?
- RQ3構造化プリミティブを備えたドメイン固有言語は、LLM アプリケーションにおける高度な制御フローと並列処理を可能にしつつ、コード複雑性を軽減できるか?
- RQ4ルートツリー構造を用いた動的で共有可能な KV キャッシュの維持に伴うランタイムオーバーヘッドはどの程度か?
- RQ5入力共有パターン(例:共有プレフィックス、1ドキュメントあたり複数の質問)の違いが、RadixAttention のパフォーマンス向上に与える影響は何か?
主な発見
- SGLang は、ベースラインシステムと比較して、一般的な LLM ワークロードにおいて最大 5× の実行時間短縮を達成し、顕著なパフォーマンス向上を示した。
- RadixAttention 技術は、特に共有可能な入力の長さが長い場合にスループットを顕著に向上させ、共有プレフィックス長が長くなるほど性能向上が顕著になる。
- 1つの共有入力に対してリクエスト数が増加する(例:1ドキュメントあたり複数の質問)場合、キャッシュ再利用の機会が増えるため、スループット向上が最も顕著に現れる。
- ルートツリーの維持に伴うランタイムオーバーヘッドは無視できるほど小さく、最悪ケースでもわずか 0.5% にとどまるため、実運用において実用的である。
- システムは、ネイティブな Python の制御フローと再利用可能な関数抽象化を備えた構造的で合成可能な LLM プログラムを可能にすることで、コード複雑性を低減した。
- コンパイラおよびトレーシングパイプラインにより、コード移動やプリフェッチなどの積極的最適化が可能となり、基本的な実行を上回るパフォーマンス向上が達成された。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。