Batch Inference Toolkit(batch-inference) は、複数のリクエストからのモデル入力テンソルを動的にバッチ処理し、モデルを実行し、出力テンソルをバッチ解除して、それぞれのリクエストに戻す Python パッケージです。これにより、計算の並列性が向上し、キャッシュの局所性が向上するため、システムのスループットが向上します。プロセス全体は開発者にとって透過的です。
ディープ ラーニング モデル推論をクラウド サーバー、特に GPU でホストしたい場合
サーバーのスループットを最大数倍向上させることができます
モデル | ベースラインと比較したスループット | リンク |
---|---|---|
バート・エンベディング | 4.7倍 | チュートリアル |
GPT の完了 | 16倍 | チュートリアル |
Pip からインストールする
python -m pip install batch-inference --upgrade
ソースからのビルドとインストール(開発者向け)
git clone https://github.com/microsoft/batch-inference.git
python -m pip install -e .[docs,testing]
# if you want to format the code before commit
pip install pre-commit
pre-commit install
# run unittests
python -m unittest discover tests
API を学ぶためにおもちゃのモデルから始めましょう。まず、モデル クラスでdetect_batchメソッドを定義し、次にバッチデコレータをモデル クラスに追加する必要があります。
バッチデコレータは、 ModelHostオブジェクトを作成するための host() メソッドを追加します。 ModelHost の予測メソッドは単一のクエリを入力として受け取り、 predict_batchメソッドを呼び出す前に複数のクエリをバッチにマージします。また、predict メソッドは、結果を返す前に、predict_batch メソッドからの出力を分割します。
import numpy as np
from batch_inference import batching
from batch_inference . batcher . concat_batcher import ConcatBatcher
@ batching ( batcher = ConcatBatcher (), max_batch_size = 32 )
class MyModel :
def __init__ ( self , k , n ):
self . weights = np . random . randn ( k , n ). astype ( "f" )
# shape of x: [batch_size, m, k]
def predict_batch ( self , x ):
y = np . matmul ( x , self . weights )
return y
# initialize MyModel with k=3 and n=3
host = MyModel . host ( 3 , 3 )
host . start ()
# shape of x: [1, 3, 3]
def process_request ( x ):
y = host . predict ( x )
return y
host . stop ()
Batcher は、クエリをマージし、出力を分割する責任があります。この場合、ConcatBatcher は入力テンソルを最初の次元でバッチ化されたテンソルに連結します。一般的なシナリオ向けに一連の組み込みバッチャーが提供されていますが、独自のバッチャーを実装することもできます。詳細については、「バッチャーとは」を参照してください。