BentoML mit „Mannequin Serving Made Simple“ ist eine neue Model von BentoML und eine ML-App 편의성에 기능이 집중되어 있습니다.
Die Verwendung von Scikit-Study, PyTorch, Tensorflow2 und die Verwendung von Scikit-Study sind ebenfalls möglich (z. B. Transformers, Pytorch Lightning, Detectron usw.)
모델을 서빙하는 방식은 간단합니다. Die aktuelle Model von GPT-2 ist die neueste Model von GPT-2.
# gpt2_service.py
import bentoml
from transformers import AutoModelWithLMHead, AutoTokenizer
from bentoml.adapters import JsonInput
@bentoml.env(pip_packages=["transformers==3.1.0", "torch==1.6.0"])
@bentoml.artifacts([TransformersModelArtifact("gptModel")])
class TransformerService(bentoml.BentoService):
@bentoml.api(enter=JsonInput(), batch=False)
def predict(self, parsed_json):
src_text = parsed_json.get("textual content")
mannequin = self.artifacts.gptModel.get("mannequin")
tokenizer = self.artifacts.gptModel.get("tokenizer")
input_ids = tokenizer.encode(src_text, return_tensors="pt")
output = mannequin.generate(input_ids, max_length=50)
output = tokenizer.decode(output[0], skip_special_tokens=True)
return output
ts = TransformerService()
model_name = "gpt2"
mannequin = AutoModelWithLMHead.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
artifact = {"mannequin": mannequin, "tokenizer": tokenizer}
ts.pack("gptModel", artifact)
Die aktuelle Model des GPT-2-Protokolls ist nicht verfügbar Es ist nicht so, dass ich es getan habe. Ich habe mir die Zeit genommen, die Zeit zu verlieren, bevor ich mich auf den Weg gemacht habe.
@bentoml.env
를 통해서 필요한 package deal 정의가 가능하다.- Ich habe mir die Zeit genommen
predict
함수만 작성하면 된다. - Ich habe Mannequin und Tokenizer verwendet
pack
으로 셋팅이 필요하다.
이렇게 작성된 TransformerService
를 배포해보겠습니다. Was ist los?
python gpt2_service.py
bentoml serve TransformerService:newest
>>> bash
* Serving Flask app "TransformerService" (lazy loading)
* Surroundings: manufacturing
WARNING: It is a improvement server. Don't use it in a manufacturing deployment.
Use a manufacturing WSGI server as an alternative.
* Debug mode: off
* Operating on <http://127.0.0.1:63789/> (Press CTRL+C to give up)
Die neue BentoML-App ist für die Verwendung mit BentoML geeignet.
Weitere Informationen zu Mannequin Serving, TorchServe, TensorFlow Serving und Structure sowie zu BentoML 울 것 같습니다.
두 프레임워크가 비슷한 구조를 보이는 것을 알 수 있는데, 바로 학습한 모델이 추론을 았 Sobald Sie die Consumer-ID erstellt haben, klicken Sie auf die Schaltfläche „Consumer“. Nein.
- TorchServe: Inferenz mit Modell-Thread (Employee-Prozess) / Anforderungs-Batching-Funktion verwenden
- Tensorflow-Serving : Obtain von Loader / Obtain von ServableHandle
Nutzen Sie die Funktion „Architektur“ und „BentoML“.
Der Identify „0.13-LTS“ ist die erste Wahl.
# Begin a manufacturing API server serving specified BentoService
bentoml serve-gunicorn TransformerService:newest
Meine erste Produktion, meine erste Produktion und mein erster Auftritt. 이 명령어가 연결되는 코드를 살펴보면 다음과 같습니다.
# <https://github.com/bentoml/BentoML/blob/0.13-LTS/bentoml/server/__init__.py#L70>
def start_prod_server(...):
...
# BentoMLContainer에 필요한 설정들을 셋팅 (Port, Timeout, Employee 수 등)
bento_server = BentoMLContainer.config.bento_server
bento_server.port.set(port or skip)
bento_server.timeout.set(timeout or skip)
bento_server.microbatch.timeout.set(timeout or skip)
bento_server.staff.set(staff or skip)
bento_server.swagger.enabled.set(enable_swagger or skip)
bento_server.microbatch.staff.set(microbatch_workers or skip)
bento_server.microbatch.max_batch_size.set(mb_max_batch_size or skip)
bento_server.microbatch.max_latency.set(mb_max_latency or skip) BentoMLContainer.prometheus_lock.get() # generate lock earlier than fork
BentoMLContainer.forward_port.get() # generate port earlier than fork
import multiprocessing
# Multiprocessing 기반으로 Prod Server를 설정한 Employee 수 만큼 띄웁니다.
model_server_job = multiprocessing.Course of(
goal=_start_prod_server, args=(BentoMLContainer,), daemon=True
)
model_server_job.begin()
attempt:
# 요청을 전달하는 Proxy Server 시작
_start_prod_proxy(BentoMLContainer)
lastly:
model_server_job.terminate()
직관적으로 이해할 수 있도록 코드가 잘 작성되어 있기 때문에, 크게 proxy_server
Ja model_server_job
Ich habe mir die Zeit genommen, die Zeit zu verbringen, in der ich mich aufgehalten habe.
Modellserverjob (GunicornModelServer
)
# <https://github.com/bentoml/BentoML/blob/0.13-LTS/bentoml/server/gunicorn_model_server.py>
from gunicorn.app.base import Utility
class GunicornModelServer(Utility):
...
@property
@inject
def app(self, app: "ModelApp" = Present[BentoMLContainer.model_app]):
return app
위 Utility
Mit gunicorn haben Sie die Möglichkeit, eine WSGI-Anwendung zu verwenden Ja. 여기에 기존에 정의된 ModelApp
이 주입(inject) 됩니다.
Mannequin App
은 예예에서 정의했던 BentoService
Die Verwendung von Flask und dem REST-API-Server wurde bereits durchgeführt. Inferenz-API-Funktionen, Swagger, Metriken und die Verwendung von Inferenz-APIs für die Inferenz-API. (Eines Tages 여기에서 확인이 가능합니다.)
Proxy Server (MarshalApp
)
# <https://github.com/bentoml/BentoML/blob/0.13-LTS/bentoml/marshal/marshal.py#L354>
async def _batch_handler_template(...):
...
reqs_s = DataLoader.merge_requests(requests) # 들어온 요청들을 합치고,
...
shopper = self.get_client()
timeout = ClientTimeout(
complete=(self.mb_max_latency or max_latency) // 1000
)
async with shopper.submit(
api_url, knowledge=reqs_s, headers=headers, timeout=timeout
) as resp:
uncooked = await resp.learn() # 비동기로 Mannequin App의 Inference API를 호출합니다.# <https://github.com/bentoml/BentoML/blob/0.13-LTS/bentoml/marshal/marshal.py#L456>
def run(...)
...
loop = asyncio.new_event_loop() # Python의 코루틴을 가능하게 하는 EventLoop
asyncio.set_event_loop(loop)
app = self.get_app()
run_app(app, port=port)
코드에 대한 설명을 하기 전에 배경 지식에 대해서 간단하게 이야기해보려고 합니다. Asyncio und Python 3.5 sind eine neue Model des Programms. async/await ist eine von Coroutine entwickelte Methode.
Die Verwendung von Asyncio und Coroutine ermöglicht eine schnelle und sichere Nutzung. Die Occasion-Schleife wird in der Activity-Liste angezeigt await
Sobald Sie die Funktion „Activity“ aktiviert haben, wird die Activity-Funktion aktiviert 행하게 됩니다. 이 정을 작업들을 수행할 수 있는 이죠.
위의 MarshalApp
에 있는 코드로 연결하면 다음과 같습니다.
- Die Ereignisschleife ist eine neue Funktion für die Ereignisschleife
- Ich habe die Funktion „ModelServer“ und „POST Name“ verwendet, um eine neue Model zu erstellen
Die aktuelle Model von BentoML ist die neueste Model von BentoML.
Ich habe den Marshal (Proxy-Server) und den Mannequin-Server-Job als neuen Server verwendet.
Die aktuelle Model der BentoML-App ist die erste und letzte Model der BentoML-App „Adaptives Mikro-Batching“ Nein. Stellen Sie sicher, dass Sie den Proxy-Server installiert haben, und stellen Sie sicher, dass Mannequin Server nicht verfügbar ist.
A, B und A 뉴를 주문할 수 있을 것입니다. Wählen Sie eine der folgenden Optionen aus: 여 전달해주면, 음식이 서빙이 되는 것과 같은 방식입니다.
아래 그림을 보면 좀 더 확실하게 이해가 될 것입니다.
Die neue Model des Mannequin Server Jobs (Mannequin Server Job) ist die erste, die Sie benötigen 있리할 수리할 수 있게 됩니다. Dies bedeutet, dass die Durchsatzrate (Throughput) eine wichtige Rolle spielt.