Набор инструментов пакетного вывода (batch-inference) — это пакет 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
Начнем с игрушечной модели для изучения API. Во-первых, вам нужно определить метод Predict_batch в классе модели, а затем добавить декоратор пакетной обработки в класс модели.
Декоратор пакетной обработки добавляет метод host() для создания объекта ModelHost . Метод прогнозирования ModelHost принимает в качестве входных данных один запрос и объединяет несколько запросов в пакет перед вызовом метода 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 ()
Батчер отвечает за объединение запросов и разделение результатов. В этом случае ConcatBatcher объединит входные тензоры в пакетные тензоры в первом измерении. Мы предоставляем набор встроенных Батчеров для распространенных сценариев, и вы также можете реализовать свой собственный Батчер. Дополнительную информацию см. в разделе «Что такое Batcher».