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를 배우기 위해 장난감 모델부터 시작해 보겠습니다. 먼저 모델 클래스에 예측_배치 메서드를 정의한 다음 모델 클래스에 일괄 처리 데코레이터를 추가해야 합니다.
일괄 처리 데코레이터는 Host() 메서드를 추가하여 ModelHost 개체를 생성합니다. ModelHost의 예측 메서드는 단일 쿼리를 입력으로 사용하며, 예측_배치 메서드를 호출하기 전에 여러 쿼리를 일괄 처리로 병합합니다. 또한 예측 메서드는 결과를 반환하기 전에 예측_배치 메서드의 출력을 분할합니다.
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란 무엇입니까?를 참조하세요.