バッチ推論スループットの計算
入力
| バッチサイズ | 32 |
|---|---|
| リクエストあたりの出力トークン数 | 256 |
| バッチ完了時間 | 5 秒 |
バッチ推論スループットの計算
測定したバッチ完了時間から、合計の毎秒トークン数、リクエストごとの速度、毎秒リクエスト数を算出する。バッチ推論におけるスループットとレイテンシのトレードオフを示す。
入力
バッチ
結果
値を入力すると計算結果が表示されます。
詳細
バッチ推論スループット
バッチ推論は、本番環境の言語モデルサーバーが高い利用率を達成する方法である。リクエストを1件ずつ復号するのではなく、多数をまとめて処理する。モデルの重みが1回読まれてグループ全体で再利用されるため、サーバーの出力総量はバッチサイズとともに急激に増える。ただし個々のリクエストはバッチの完了を待つ。この計算は、測定したバッチ完了時間を合計スループット、リクエストごとの速度、リクエスト率という2つの視点に分けて示す。
バッチ処理のトレードオフ
自己回帰的な復号はメモリ律速であり、各ステップは1トークンを生成するためにすべての重みを読み込む。単一のリクエストだけが処理中のとき、そのメモリトラフィックのほとんどはたった1人の利用者のために費やされる。複数のリクエストを1つのバッチにまとめると、同じ重みの読み込みですべてのリクエストに対して同時にトークンが生成されるため、帯域幅コストがほとんど変わらないまま合計トークン速度がバッチサイズとともに上がる。問題はレイテンシである。リクエストはそれを含むバッチステップが完了するまで抜けられないため、リクエストごとの速度は改善せず、バッチが大きくなるとわずかに下がることもある。
計算式
バッチサイズ 、リクエストあたりの出力トークン数 、測定したバッチ完了時間 から次のように求める。
vaggvreqR=tbB×Nout=tbNout=tbBここで は合計スループット、 はリクエストごとのスループット、 は1秒あたりに完了するリクエスト数である。合計はリクエストごとの速度にバッチサイズを掛けたものにほかならない。
計算例
サーバーが32件のリクエストからなるバッチを復号し、それぞれ256トークンを生成して、バッチが5秒間で完了するとする。
vaggvreqR=532×256=1638.4 tokens/s=5256=51.2 tokens/s=532=6.4 requests/s運用者にはサーバーから毎秒1,600トークンを超える流れが見えるが、各利用者はおよそ毎秒51トークンで読む。メモリが許し完了時間が5秒前後にとどまるなら、バッチを64に倍増させると合計はおよそ2倍になり、リクエストごとの値は変わらない。
バッチサイズの選び方
合計スループットは作業がメモリ律速にとどまる間だけバッチサイズとともに上がり続ける。バッチが計算を飽和させるか、キーバリューキャッシュがデバイスメモリを使い尽くすと、完了時間がバッチより速く伸びてリクエストごとのレイテンシが悪化する。実用上の目標は、メモリに収まりつつリクエストごとのレイテンシを許容範囲に保てる最大のバッチであり、いくつかのバッチサイズで完了時間を測定して求める。実際のサーバーは連続バッチ処理も用い、リクエストが固定グループとしてではなくステップごとに加わり抜けるため、持続的なスループットがさらに上がる。 を決める単一ストリームの上限は推論スループットの計算を、多数のレプリカにわたるフリート全体の処理能力は実効トークン毎秒の計算を参照されたい。
よくある質問 (FAQ)
合計スループットがリクエストごとのスループットよりはるかに高いのはなぜですか
合計スループットはバッチ内の全リクエストにわたってサーバーが出力するトークンをすべて数えるのに対し、リクエストごとのスループットは1人の利用者が体感する値です。バッチ処理は各重みを1回だけ読んでグループ全体で再利用するため、処理されるトークン総数はバッチサイズにほぼ比例して増えます。一方で個々のリクエストは依然としてバッチの完了を待たねばならず、体感速度は改善せず、バッチが大きくなるとわずかに低下することさえあります。これがバッチサービングの中心的なトレードオフであり、運用者にとってのスループットと利用者にとってのレイテンシの対立です。
バッチは大きいほど常に良いのですか
ある点までです。作業がメモリ律速である間は合計スループットがバッチサイズとともに上がりますが、バッチが計算を飽和させるか、キーバリューキャッシュがメモリを使い尽くすと、完了時間がバッチより速く伸びてリクエストごとのレイテンシが悪化します。実用上の最適点は、メモリに収まりつつリクエストごとのレイテンシを目標内に保てる最大のバッチであり、いくつかのバッチサイズで完了時間を測定して求めます。
連続バッチ処理ではこれがどう変わりますか
この計算は、まとめて開始し終了する固定バッチを想定しています。最近のサーバーは連続バッチ処理(インフライトバッチ処理)を用い、ステップごとに新しいリクエストが加わり完了したものが抜けるため、系列長が異なってもアクセラレータを満たし続けます。これにより持続的な合計スループットは固定バッチの見積もりを上回りますが、同じトレードオフが成り立ちます。すなわち毎秒トークン数の合計は向上する一方、個々のリクエストは復号速度に制約されます。
免責事項
この見積もりは、バッチ内のすべてのリクエストが同数のトークンを生成し、同時に開始することを前提としています。実際のワークロードは系列長が混在し連続バッチ処理を用いるため、測定される合計スループットは異なります。処理能力を見積もる前に、対象ハードウェアで複数のバッチサイズについてベンチマークを取ってください。