Perangkat Inferensi Batch (inferensi-batch) adalah paket Python yang mengelompokkan tensor masukan model yang berasal dari beberapa permintaan secara dinamis, mengeksekusi model, membatalkan kumpulan tensor keluaran, dan kemudian mengembalikannya ke setiap permintaan masing-masing. Hal ini akan meningkatkan throughput sistem karena paralelisme komputasi yang lebih baik dan lokalitas cache yang lebih baik. Seluruh proses transparan bagi pengembang.
Saat Anda ingin menghosting inferensi model Pembelajaran Mendalam di server Cloud, terutama pada GPU
Ini dapat meningkatkan throughput server Anda hingga beberapa kali lipat
Model | Throughput Dibandingkan dengan Baseline | Tautan |
---|---|---|
Penyematan Bert | 4,7x | tutorial |
Penyelesaian GPT | 16x | tutorial |
Instal dari Pip
python -m pip install batch-inference --upgrade
Bangun dan Instal dari Sumber (untuk pengembang)
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
Mari kita mulai dengan model mainan untuk mempelajari API. Pertama, Anda perlu mendefinisikan metode prediksi_batch di kelas model Anda, lalu menambahkan dekorator batching ke kelas model Anda.
Dekorator batching menambahkan metode host() untuk membuat objek ModelHost . Metode prediksi ModelHost mengambil satu kueri sebagai masukan, dan itu akan menggabungkan beberapa kueri ke dalam satu batch sebelum memanggil metode prediksi_batch . Metode prediksi juga membagi keluaran dari metode prediksi_batch sebelum mengembalikan hasil.
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 bertanggung jawab untuk menggabungkan kueri dan membagi keluaran. Dalam hal ini ConcatBatcher akan menggabungkan tensor masukan ke dalam tensor batch pada dimensi pertama. Kami menyediakan serangkaian Batcher bawaan untuk skenario umum, dan Anda juga dapat mengimplementasikan Batcher Anda sendiri. Lihat Apa itu Batcher untuk informasi lebih lanjut.