مجموعة أدوات Batch Inference Toolkit (استدلال الدُفعات) هي حزمة Python التي تعمل على تجميع موترات إدخال النموذج القادمة من طلبات متعددة ديناميكيًا، وتنفيذ النموذج، وإلغاء دفعات موترات الإخراج ثم إعادتها مرة أخرى إلى كل طلب على التوالي. سيؤدي هذا إلى تحسين إنتاجية النظام بسبب التوازي الحسابي الأفضل وموقع ذاكرة التخزين المؤقت الأفضل. العملية برمتها شفافة للمطورين.
عندما تريد استضافة استدلال نموذج التعلم العميق على خوادم السحابة، وخاصة على وحدة معالجة الرسومات
يمكنه تحسين إنتاجية الخادم الخاص بك حتى عدة مرات
نموذج | الإنتاجية مقارنة بخط الأساس | روابط |
---|---|---|
بيرت التضمين | 4.7x | درس تعليمي |
الانتهاء من 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
لنبدأ بنموذج لعبة لتعلم واجهات برمجة التطبيقات. أولاً، تحتاج إلى تحديد طريقة التنبؤ في فئة النموذج الخاص بك، ثم إضافة مصمم الدُفعات إلى فئة النموذج الخاص بك.
يضيف مصمم الدُفعات أسلوب host() لإنشاء كائن ModelHost . تأخذ طريقة التنبؤ الخاصة بـ ModelHost استعلامًا واحدًا كمدخل، وسوف تقوم بدمج استعلامات متعددة في دفعة واحدة قبل استدعاء طريقة التنبؤ_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 ()
باتشر مسؤول عن دمج الاستعلامات وتقسيم المخرجات. في هذه الحالة، سيقوم ConcatBatcher بربط موترات الإدخال في موترات مجمعة في البعد الأول. نحن نقدم مجموعة من أدوات Batcher المضمنة للسيناريوهات الشائعة، ويمكنك أيضًا تنفيذ Batcher الخاص بك. راجع ما هو باتشر لمزيد من المعلومات.