大規模言語モデル(LLM)は、トラフィックの増加に伴い、処理が遅く、コストが高くなります。Machine Learning Masteryサイトに掲載されたBala Priya氏の記事では、既存のさまざまな手法の中から、特定のワークロードのボトルネックに適した手法を選択するための6つの質問からなる決定木を提案しています。
各手法が前提とするもの
推論時、つまりモデルが回答を生成する段階では、最も長い生成の後ろにリクエストが蓄積され、グラフィックスプロセッシングユニット(GPU)のメモリはキャッシュされたアテンション状態で満たされ、ハードウェアはメモリ読み込みを待つ時間が多くなります。推論最適化手法はすべて同じポイントを狙っているわけではありません。メモリに作用するもの、計算に作用するもの、リクエストのスケジューリングに作用するものがあります。
それぞれが特定の仮定に基づいています。量子化、構造化スパース化、蒸留は、モデルがハードウェアやレイテンシ予算に対して大きすぎるため、精度にリスクを負ってでもサイズを縮小する価値があると仮定します。プレフィックスキャッシングは、多くのリクエストが同じトークン(モデルが処理するテキストの単位)シーケンスの始まりを共有しており、その再計算は無駄であると仮定します。連続バッチングは、予測不可能な応答長を持つリクエストが並行して到着すると仮定します。
他の手法は異なる状況に対応します。PagedAttentionは断片化または過大なKVキャッシュメモリに関係し、投機的デコードはトークンごとの生成によって制限されるデコードに関係し、プリフィル-デコード分離は同じGPU上の2つのフェーズ間の競合に関係します。テンソル並列化やパイプライン並列化は、単一デバイスのメモリに収まらないモデルに役立ち、KVキャッシュのオフロードは有用な入力が早すぎる段階で追い出される場合に役立ち、オフラインバッチ処理はインタラクティブな応答を必要としないリクエストに役立ちます。
6つの質問からなる決定木
最初の質問はハードウェアに関するものです。モデルはターゲット上に快適に収まりますか?重すぎる場合、著者はモデル圧縮から始めることを推奨しています。なぜなら、それが残りの容量を決定するからです。2番目の質問はプロンプトの繰り返しに関するものです。チャットアプリケーションは各ターンで完全な履歴を返し、検索拡張生成(RAG)パイプラインはしばしば同じ指示を異なるコンテキストに追加します。この場合、プレフィックスキャッシングは「効果対努力比が最も高い手法」として紹介されています。ただし、プレフィックスが文字単位で同一であることが条件です。したがって、安定したコンテンツは可変コンテンツの前に置く必要があります。
次の質問はトラフィックとメモリに関するものです。短いリクエストと長いリクエストが重なり合うバーストで到着する場合、連続バッチングはアイドル時間を削除し、終了したシーケンスは即座にバッチから離脱します。KVキャッシュが未使用のメモリを確保している場合、PagedAttentionはそれを固定サイズのページに分割します。各ユーザーの生成速度が全体のスループットよりも優先される場合、小さなドラフトモデルに依存する投機的デコードが検討される可能性があります。最後の質問であるプリフィル-デコード分離は、サービスアーキテクチャを変更するため、大規模なデプロイメントにのみ関係します。
トレードオフと失敗の兆候
各手法には裏側があります。量子化は精度の低下を招く可能性があり、プレフィックスキャッシングはわずかな文字の違いでも失敗し、投機的デコードは十分な受け入れ率を持つドラフトモデルを必要とします。分離にはノード間でのKVキャッシュ転送コストが伴い、オフライン処理は厳格な応答時間制約のある用途には適していません。
記事はまた、失敗の症状についても詳述しています。プレフィックスキャッシュのヒット率がゼロに近い場合、非決定的なシリアライゼーションや、プロンプトの先頭に動的コンテンツが配置されていることが原因かもしれません。投機的デコードが従来のデコードよりも遅い場合、受け入れ率が低すぎることを示しています。分離がレイテンシを悪化させる場合、ワークロードが小さすぎる可能性があります。量子化から期待されるスループット向上が現れない場合、重みのみが量子化されただけかもしれません。著者によれば、手法が繰り返し期待以下の性能を示す場合、複雑さを追加する前に、まずその前提条件を確認する必要があります。
