batch inference
1.0.0
Batch Inference Toolkit(batch-inference) 是一個 Python 包,它動態批次來自多個請求的模型輸入張量、執行模型、取消批次輸出張量,然後將它們分別返回到每個請求。由於更好的計算並行性和更好的快取局部性,這將提高系統吞吐量。整個過程對開發者來說是透明的。
當您想要在雲端伺服器上託管深度學習模型推理時,尤其是在 GPU 上
它可以將您的伺服器吞吐量提高數倍
模型 | 與基線相比的吞吐量 | 連結 |
---|---|---|
伯特嵌入 | 4.7倍 | 教學 |
GPT 完成 | 16x | 教學 |
從點安裝
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。首先,您需要在模型類別中定義predict_batch方法,然後將批次裝飾器新增至模型類別。
批次裝飾器新增了 host() 方法來建立ModelHost物件。 ModelHost的predict方法將單一查詢作為輸入,在呼叫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 會將輸入張量連接到第一維的批次張量。我們為常見場景提供了一組內建的Batcher,您也可以實現自己的Batcher。有關詳細信息,請參閱什麼是 Batcher。