推論コスト削減の実務 — 何から手を付けるか
量子化も蒸留も効きますが、たいていの現場ではその前に「品質を1ミリも賭けずに済む手」が残っています。請求書を4つの数に分解し、キャッシュ→バッチング→短縮→圧縮の順に並べ替える。各手の効き方と、順序を間違えたときに何が壊れるかまで。
電球を替える前に、消し忘れた部屋を消す
電気代が想定の3倍になったとき、最初にやることは家じゅうの電球をLEDに替えることではありません。まずどの部屋が食っているかを見て、次につけっぱなしを消す。器具を買い替えるのはその後です。順番を逆にすると、金と手間をかけたのに請求書がほとんど動かない、ということが起きます。
推論コストの削減も同じ形をしています。「量子化しよう」「小さいモデルに蒸留しよう」は目を引く手ですが、多くの現場ではそれより先に効いて、しかも品質を1ミリも賭けなくていい手が2つも3つも残っています。この記事は個々の技術の解説ではなく、どれから手を付けるかと、それぞれの副作用の話です。
請求書は4つの数でできている
自社でGPUを持っていても、APIを叩いていても、支払いの構造は変わりません。借りている計算資源の単価に、それを占有した時間を掛けたものです。1か月ぶんを式にすると、こうなります。
が月額のコスト、 はGPU1時間あたりの値段、 は月のリクエスト件数、 は1件のプロンプトを読み込む(プレフィルの)時間、 は平均の出力トークン数、 は1トークン吐くのにかかる時間、 は同時に何件をまとめて処理できているか(実効バッチサイズ)です。
言い換えると、「単価 × (何件来るか × 1件ぶんの仕事量) ÷ 何件を同時に片づけられるか」。それだけです。
この式が便利なのは、打てる手が4種類しかないとすぐ分かることです。 を減らす(呼ばない)、 を減らす(短くする)、 を減らす(1トークンを軽くする)、 を増やす(まとめる)。世に出ている削減テクニックは、必ずこのどれかに落ちます。逆に言えば、施策を持ってこられたときは「これはどの文字を動かすのか」と聞けば筋の良し悪しが判定できます。
そして優先順位を決める軸は、効果の大きさではありません。品質を賭けるかどうかです。 を増やす手は出力を1文字も変えませんが、 を減らす手の多くは出力そのものを変えます。効果が同じなら、賭けない方から順にやる。これが全体の骨格です。
手0: まず、どこが食っているかを見る
削減に入る前の測定は省略できません。見るのは3つです。
リクエストの内訳。 エンドポイント別・機能別に、件数ではなくGPU秒で並べます。件数で見ると小さく見える機能が、出力が長いせいで請求の半分を占めていることがよくあります。
入出力トークン長の分布。 平均ではなく中央値とp95を出します。平均だけ見ていると、ごく一部の極端に長いリクエストがGPUを長時間占有している構図が見えません。式の は平均ですが、現場で効くのはたいてい裾の方です。
呼び出しの重複。 同じ入力が何度来ているか、リトライやエージェントのループで二重三重に呼んでいないか。ここが数十%あることは珍しくありません。
手1: そもそも呼ばない
いちばん安い推論は、実行しない推論です。しかも品質は定義上まったく落ちません。三段階あります。
完全一致キャッシュ。 入力を正規化して、同じなら保存済みの出力を返す。実装が数十行で済むわりに、FAQ的な使われ方をする機能では効きます。条件が1つあって、temperature を0にして決定的にしておくこと。乱数で毎回違う出力を返す設定のままキャッシュを挟むと、「同じ質問なのに人によって答えが違う」という現象が固定化されます。
プレフィックスキャッシュ。 同じシステムプロンプトで始まるリクエストが100件あるなら、その部分の計算結果は使い回せます。過去のトークンのKとVを取っておく仕組み自体はKVキャッシュを1から理解するで扱ったものですが、それをリクエストをまたいで共有するのがこれです。vLLMなら --enable-prefix-caching の1行。出力は1ビットも変わらないのに、長いシステムプロンプトを使っている構成ではプレフィル時間がまるごと消えます。最初にやるべき設定変更はこれです。
セマンティックキャッシュ。 入力を埋め込みに変え、十分近い過去の質問があればその回答を返す。ヒット率は上がりますが、ここから先は品質を賭けています。
事故の形は決まっています。「東京の明日の天気」と「大阪の明日の天気」は埋め込み空間では非常に近い。「この契約は自動更新されますか」と「この契約は自動更新されませんか」も近い。固有名詞・数値・否定が入れ替わっただけの質問は、意味が正反対でも距離は近いのです。実務的な妥協点は、しきい値をきつめに取ったうえで、固有名詞や数値を含むリクエストはキャッシュ対象から外すこと。ヒット率は落ちますが、間違った回答を自信満々に返すコストの方がずっと高くつきます。
コメント
コメントにはログインが必要です