
30. März 2021
In diesem zweiten Artikel der Serie von zwei Artikeln gehe ich auf die Bereitstellung und den Einsatz unserer Modelle im großen Maßstab ein. Wenn Sie den ersten Artikel über das Training eines Fastai-Modells in großem Maßstab auf AI Platform Training verpasst haben, finden Sie hier den Link.
TL;DR
In diesem zweiten Artikel der Serie von zwei Artikeln gehe ich auf die Bereitstellung und den Einsatz unserer Modelle im großen Maßstab ein. Wenn Sie den ersten Artikel über das Training eines Fastai-Modells in großem Maßstab auf AI Platform Training verpasst haben, finden Sie hier den Link.
Der Einsatz eines Deep Learning-Modells kann verschiedene Herausforderungen mit sich bringen:
In diesem Artikel erkläre ich, wie ich einen Deep Learning-Textklassifikator, der mit der FastAI-Bibliothek trainiert wurde, in 2 Hauptschritten bedient habe:
Alle Materialien finden Sie in der github repository. Dieses Repository wurde von einem anderen Projekt inspiriert, das darauf abzielte, einen Fastai-Bildklassifikator auf dem AWS SageMaker Inference Endpoint einzusetzen Hier.
1- Verteilen Sie das Fastai-Modell mit TorchServe
TorchServe macht es einfach, PyTorch-Modelle in Produktionsumgebungen in großem Umfang einzusetzen. Die Entwicklung einer eigenen Client-Server-Architektur ist damit nicht mehr erforderlich. Die FastAI-Bibliothek basiert auf dem PyTorch-Framework. Sie ermöglicht es, diese Technologie zu nutzen, um Fastai-Modelle bereitzustellen, indem Sie Ihr Fastai-Modell als reines PyTorch-Objekt laden (Entfernen der Fastai-Abstraktion).
1-1 Exportieren Sie Modellgewichte aus FastAI
Dazu müssen Sie den FastAI-Lernenden aus dem Export-Pickle aus dem letzten Beitrag wiederherstellen und seine Modellgewichte mit PyTorch speichern.
from fastai.text import load_learner
from fastai.text.learner import get_c, get_text_vocab
learn = load_learner(“fastai_cls.pkl”)
vocab_sz = len(_get_text_vocab(dls)) #dls ist der dataloader, den Sie für das Training verwendet haben
n_class = get_c(dls)
config = awd_lstm_clas_config.copy()
torch.save(learn.model.state_dict(), “fastai_cls_weights.pth”)
1-2 PyTorch Modell von FastAI
Sobald Sie Ihre pytorch-Gewichte exportiert haben, müssen Sie die Modellstruktur neu aufbauen, um Ihre Gewichte in das Modell laden zu können. Möglicherweise müssen Sie ein wenig im Fastai-Quellcode wühlen, um Ihre Implementierung zu finden, aber zum Glück kann man im Jupyter-Notebook den Quellcode untersuchen, indem man ein ?? vor einen Funktionsnamen setzt.
Für den Textklassifikator können Sie ein reines Pytorch-Objekt laden, indem Sie die Funktion fastai get_text_classifier verwenden
from fastai.text.all import AWD_LSTM
torch_pure_model = get_text_classifier(AWD_LSTM, vocab_sz, n_class, config=config)
1-3 Reproduzieren Sie die Fastai-Vorverarbeitungsschritte
Sobald Sie Ihr reines Pytorch-Modell erhalten haben, müssen Sie die gleiche Vorverarbeitung anwenden, die auch für das Training verwendet wurde. FastAI verfügt über eine sehr praktische Methode .predict, die auf einen Text (ein einfaches String-Objekt) angewendet werden kann. Diese Methode reproduziert natürlich die Vorverarbeitung des Trainings und beseitigt somit das Risiko einer Verzerrung der Trainingsdaten.
pred_fastai = learn.predict(text)
pred_fastai
>>(Kategorie tensor(1), tensor(1), tensor([0.0036, 0.9964]))
In unserem Fall müssen wir diese Verantwortung selbst übernehmen, da wir die Fastai-Abstraktion loswerden und direkt mit PyTorch-Objekten arbeiten müssen.
In meinem Beispiel habe ich einen Spacy-Tokenizer verwendet, also habe ich die fastai-Vorverarbeitung wie unten gezeigt reproduziert:
Importfackel
from fastai.text.core import Tokenizer, SpacyTokenizerfrom fastai.text.data import Numericalize
example = “Hallo, dies ist ein Test.”
tokenizer = Tokenizer(
tok=SpacyTokenizer(“en”)
)
numericalizer = Numericalize(vocab=vocab)
example_processed = numericalizer(tokenizer(example))
beispiel_verarbeitet
>>> Tensor([ 4, 7, 26, 29, 16, 72, 69, 31])
inputs = example_processed.resize(1, len(example_processed))
outputs = model_torch.forward(inputs)[0] preds = torch.softmax(outputs, dim=-1) #YSie können jede Aktivierungsfunktion verwenden, die Sie benötigen
preds
>>> tensor([[0.0036, 0.9964]], grad_fn=)
Wie Sie sehen können, sind die Ergebnisse, die ich mit torch functions und learn.predict erhalte, die gleichen, da ich die gleichen Vorverarbeitungsschritte beibehalten konnte.
1-4 Stellen Sie Ihr Modell über torchserve bereit
In diesem Abschnitt stellen wir das PyTorch-Modell auf TorchServe bereit. Für die Installation lesen Sie bitte das TorchServe Github Repository.
Insgesamt gibt es hauptsächlich 3 Schritte, um TorchServe zu benutzen:
- Archivieren Sie das Modell als *.mar.
- Starten Sie den Fackeldienst.
Rufen Sie die API auf und erhalten Sie die Antwort.
Um das Modell zu archivieren, werden in unserem Fall mindestens 2 Dateien benötigt:
- PyTorch-Modellgewichte fastai_cls_weights.pth.
- Benutzerdefinierter TorchServe-Handler.
Benutzerdefinierter Handler
Wie in /deployment/handler.py gezeigt, akzeptiert der TorchServe-Handler data und Kontext. In unserem Beispiel definieren wir eine weitere Python-Helferklasse mit 4 Instanzmethoden, die wir implementieren: initialize, preprocess, inference und postprocess.
Jetzt können Sie TorchServe einrichten und starten.
TorchServe in Aktion
Schritt 1: Archivieren Sie das Modell PyTorch
--model-name=fastai_model
-Version=1.0
-serialized-file=/home/model-server/fastai_cls_weights.pth
-- extra-files=/home/model-server/config.py,/home/model-server/vocab.json
-handler=/home/model-server/handler.py
--export-path=/home/model-server/model-store/
Schritt 2: Servieren Sie das Modell
Schritt 3: Rufen Sie die API auf und erhalten Sie die Antwort (hier verwenden wir curl).
Der erste Aufruf hat eine längere Latenzzeit, da die in initialize definierten Modellgewichte geladen werden, aber dies wird ab dem zweiten Aufruf gemildert.
2- Einsatz auf der KI-Plattform Vorhersage
In diesem Abschnitt stellen wir das mit TorchServe trainierte FastAI-Modell in der GCP AI Platform Prediction mithilfe eines angepassten Docker-Images bereit. Weitere Einzelheiten zu den GCP AI Platform Prediction-Routinen mit benutzerdefinierten Containern finden Sie in diesem Artikel. Beachten Sie, dass diese Option nur verfügbar ist, wenn Sie AI Platform Prediction mit regionalen Endpunkten verwenden.
Schritte zur Bereitstellung eines Fastai-Modells auf der KI-Plattform Prediction:
Erstellen Sie zunächst ein KI-Plattform-Vorhersagemodell auf einem regionalen Endpunkt:
-region=REGION #eg: europa-west1
-Enable-logging
-enable-console-logging
2-1 Erstellen Sie Ihr Docker-Image, das von Ihrer Version verwendet werden soll
-repository-format=docker
-location=REGION #eg: europa-west1
2-2 (Optional) Prüfen Sie, ob Ihr Docker-Image einwandfrei läuft
curl -X POST -H "Content-Type: application/json" -d '["dies war ein schlechter Film"]' 127.0.0.1:8080/vorhersagen/fastai_model
2-3 Schieben Sie Ihr Docker-Image in eine Container-Registry in Ihrem GCP-Projekt
Dazu benötigen Sie die IAM-Anmeldedaten. Sobald Sie sich vergewissert haben, dass Sie sie haben, führen Sie Folgendes aus
docker push REGION-docker.pkg.dev/PROJECT_ID/ARTIFACT_REGISTRY_NAME/fastai_text_cls:v0
2-4 Erstellen Sie eine Modellversion mit Ihrem Docker-Image
-region=REGION
-model=MODELL_NAME
-image=REGION-docker.pkg.dev/PROJECT_ID/ARTIFACT_REGISTRY_NAME/fastai_text_cls:v0
-ports=8080
-health-route=/ping
-predict-route=/vorhersagen/fastai_model
2-5 Testen Sie Ihre Modellversion
-H "Authorization: Bearer $(gcloud auth print-access-token)"
-H "Content-Type: application/json"
-d '["Das war ein schlechter Film"]'
https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models/MODEL_NAME/versions/VERSION_NAME:predict
Ihr Fastai-Modell wird jetzt in einer serverlosen Architektur auf der KI-Plattform Prediction bereitgestellt. Sie können Online-Vorhersagen machen, indem Sie Anfragen an Ihr Modell als REST API senden. Alle Methoden zur Abfrage von Vorhersagen finden Sie unter Google-Dokumentation.
Fazit
Die Verwendung der KI-Plattform Prediction zur Bereitstellung von Modellen jeder Art kann sehr nützlich sein. Dieser Artikel soll ein Beispiel für ein Deep Learning-Modell zeigen, das ein schweres Framework (pytorch) verwendet und kostengünstig bereitgestellt wird.
Einige Einschränkungen sind zu beachten:

BLOG






