Hugging Face、LLM推論を22%高速化する非同期バッチ処理を公開

同期処理の無駄を解消

GPU待機時間が全体の24%を占める問題
CPUとGPUが交互に動く同期処理が原因
CUDAストリームで並列実行を実現

非同期化の技術的課題

CUDAイベントによるストリーム間同期
ダブルバッファでデータ競合を回避
キャリーオーバーで出力トークンを次バッチへ引き継ぎ

実測で大幅な性能向上

GPU稼働率が76%から99.4%に改善
モデル変更なしで22%の速度向上
詳細を読む

Hugging Faceは2026年5月14日、LLM推論における連続バッチ処理(Continuous Batching)を非同期化し、生成速度を22%向上させる手法を技術ブログで公開しました。従来の同期方式ではCPUとGPUが交互に稼働するため、GPU待機時間が全体の約24%に達していたことが問題の背景です。

従来の連続バッチ処理では、CPUがバッチを準備している間GPUは遊休状態となり、GPUが計算している間CPUも待機するという非効率が生じていました。8Bモデルで8Kトークン生成の実験では、全生成時間300.6秒のうち約72秒がGPUアイドル時間でした。この「交互動作」のボトルネックを解消するために、CPU側のバッチ準備とGPU側の計算を同時に走らせる非同期方式が提案されています。

技術的には3つのCUDAストリーム(ホスト-デバイス転送、計算、デバイス-ホスト転送)を用い、CUDAイベントでストリーム間の依存関係を制御します。バッチNの計算中にバッチN+1の入力をCPU側で準備し、GPUへ転送しておくことで待ち時間をなくす仕組みです。データ競合を避けるため入出力テンソルを2スロット用意し交互に使う「ダブルバッファ」方式を採用しています。

もう1つの課題は、バッチNの出力トークンがバッチN+1の入力に必要な点です。これには「キャリーオーバー」と呼ばれる手法で対処します。バッチN+1の入力にプレースホルダー(値0)を置いておき、バッチNの計算完了後に実際のトークンを上書きする処理をCUDAグラフに組み込んでいます。

同じ8Bモデル・8Kトークン・バッチサイズ32の条件で検証した結果、GPU稼働率は76.0%から99.4%に向上し、生成時間は300.6秒から234.5秒へと22%短縮されました。モデルのカーネル変更は一切不要で、CPUとGPUの協調スケジューリングだけで達成しています。実装はtransformersライブラリに統合済みで、強化学習など16K以上の長文生成ユースケースでさらなる最適化を進めるとしています。