Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der HTTP-Rückschlussserver von Azure Machine Learning ist ein Python-Paket, das Ihre Bewertungsfunktion als HTTP-Endpunkt verfügbar macht und den Flask-Servercode und die Abhängigkeiten in ein einzelnes Paket packt. Der Ableitungsserver ist in den vordefinierten Docker-Images für die Ableitung enthalten, die verwendet werden, wenn Sie ein Modell in Azure Machine Learning bereitstellen. Wenn Sie das Paket allein verwenden, können Sie das Modell lokal für die Produktion bereitstellen. Sie können Ihr Bewertungsskript (Eintrag) auch einfach in einer lokalen Entwicklungsumgebung überprüfen. Wenn ein Problem mit dem Bewertungsskript vorliegt, gibt der Ableitungsserver einen Fehler und den Speicherort des Fehlers zurück.
Sie können auch den Rückschlussserver verwenden, um Validierungsgates in einer kontinuierlichen Integrations- und Bereitstellungspipeline zu erstellen. Sie können z. B. den Rückschlussserver mit dem Kandidatenskript starten und die Testsuite für den lokalen Endpunkt ausführen.
Dieser Artikel unterstützt Entwickler, die den Rückschlussserver zum lokalen Debuggen verwenden möchten. In diesem Artikel erfahren Sie, wie Sie den Rückschlussserver mit Onlineendpunkten verwenden.
Voraussetzungen
- Python 3.8 oder höher
- Anakonda
Der Ableitungsserver wird auf Windows- und Linux-basierten Betriebssystemen ausgeführt.
Erkunden lokaler Debuggingoptionen für Onlineendpunkte
Indem Sie Endpunkte lokal debuggen, bevor Sie sie in der Cloud bereitstellen, können Sie Fehler in Ihrem Code und ihrer Konfiguration frühzeitig abfangen. Um Endpunkte lokal zu debuggen, haben Sie mehrere Optionen, unter anderem:
- Der Azure Machine Learning-Ableitungs-HTTP-Server.
- Ein lokaler Endpunkt.
In der folgenden Tabelle finden Sie eine Übersicht über die Unterstützung, die jede Option für verschiedene Debugszenarien bietet:
Szenario | Ableitungsserver | Lokaler Endpunkt |
---|---|---|
Aktualisieren der lokalen Python-Umgebung ohne Neuerstellung des Docker-Images | Ja | Nein |
Aktualisieren des Bewertungsskripts | Ja | Ja |
Aktualisieren von Bereitstellungskonfigurationen (Bereitstellung, Umgebung, Code, Modell) | Nein | Ja |
Integrieren von Microsoft Visual Studio Code (VS Code)-Debugger | Ja | Ja |
In diesem Artikel wird beschrieben, wie Sie den Rückschlussserver verwenden.
Wenn Sie den Rückschlussserver lokal ausführen, können Sie sich auf das Debuggen Ihres Bewertungsskripts konzentrieren, ohne dass es um Bereitstellungscontainerkonfigurationen geht.
Lokales Debuggen des Bewertungsskripts
Um Ihr Bewertungsskript lokal zu debuggen, haben Sie mehrere Optionen zum Testen des Ableitungsserververhaltens:
- Verwenden eines Dummy-Bewertungsskripts.
- Verwenden Sie VS Code zum Debuggen mit dem azureml-inference-server-http-Paket .
- Führen Sie ein tatsächliches Bewertungsskript, eine Modelldatei und eine Umgebungsdatei aus dem Beispielrepo aus.
In den folgenden Abschnitten finden Sie Informationen zu den einzelnen Optionen.
Verwenden eines Dummy-Bewertungsskripts zum Testen des Ableitungsserververhaltens
Erstellen Sie ein Verzeichnis mit dem Namen server_quickstart, um Ihre Dateien zu speichern:
mkdir server_quickstart cd server_quickstart
Um Paketkonflikte zu vermeiden, erstellen Sie eine virtuelle Umgebung, wie
myenv
, und aktivieren Sie sie:python -m virtualenv myenv
Hinweis
Führen Sie unter Linux den Befehl
source myenv/bin/activate
aus, um die virtuelle Umgebung zu aktivieren.Nachdem Sie den Rückschlussserver getestet haben, können Sie den
deactivate
Befehl ausführen, um die virtuelle Python-Umgebung zu deaktivieren.Installieren Sie das
azureml-inference-server-http
Paket aus dem Python Package Index (PyPI) -Feed:python -m pip install azureml-inference-server-http
Erstellen Sie Ihr Einstiegsskript. Im folgenden Beispiel wird ein grundlegendes Eintragsskript erstellt und in einer Datei namens score.py gespeichert:
echo -e 'import time\ndef init(): \n\ttime.sleep(1) \n\ndef run(input_data): \n\treturn {"message":"Hello, World!"}' > score.py
Verwenden Sie den
azmlinfsrv
Befehl, um den Rückschlussserver zu starten und die score.py Datei als Eintragsskript festzulegen:azmlinfsrv --entry_script score.py
Hinweis
Der Rückschlussserver wird auf 0.0.0.0.0 gehostet, was bedeutet, dass er alle IP-Adressen des Hostingcomputers überwacht.
Verwenden Sie das
curl
Hilfsprogramm, um eine Bewertungsanforderung an den Ableitungsserver zu senden:curl -p 127.0.0.1:5001/score
Der Rückschlussserver sendet die folgende Antwort:
{"message": "Hello, World!"}
Wenn Sie den Test abgeschlossen haben, wählen Sie STRG+C aus, um den Rückschlussserver zu beenden.
Sie können die score.py Bewertungsskriptdatei ändern. Anschließend können Sie Ihre Änderungen testen, indem Sie den azmlinfsrv --entry_script score.py
Befehl verwenden, um den Rückschlussserver erneut auszuführen.
Integrieren mit VS Code
In VS Code können Sie die Python-Erweiterung zum Debuggen mit dem azureml-inference-server-http-Paket verwenden. VS Code bietet zwei Modi zum Debuggen: Starten und Anfügen.
Bevor Sie einen der beiden Modus verwenden, installieren Sie das azureml-inference-server-http
Paket, indem Sie den folgenden Befehl ausführen:
python -m pip install azureml-inference-server-http
Hinweis
Um Paketkonflikte zu vermeiden, installieren Sie den Rückschlussserver in einer virtuellen Umgebung. Sie können den pip install virtualenv
Befehl verwenden, um virtuelle Umgebungen für Ihre Konfiguration zu aktivieren.
Startmodus
Führen Sie für den Startmodus die folgenden Schritte aus, um die VS Code-konfigurationsdatei launch.json einzurichten und den Rückschlussserver in VS Code zu starten:
Starten Sie VS Code, und öffnen Sie den Ordner, der das skript score.py enthält.
Fügen Sie für diesen Arbeitsbereich in VS Code der launch.json Datei die folgende Konfiguration hinzu:
{ "version": "0.2.0", "configurations": [ { "name": "Debug score.py", "type": "debugpy", "request": "launch", "module": "azureml_inference_server_http.amlserver", "args": [ "--entry_script", "score.py" ] } ] }
Starten Sie die Debugsitzung in VS Code, indem Sie "Debuggen starten"> oder "F5" auswählen.
Anfügemodus
Führen Sie für den Anfügungsmodus die folgenden Schritte aus, um VS Code mit der Python-Erweiterung zum Anfügen an den Ableitungsserverprozess zu verwenden:
Hinweis
Installieren Sie unter Linux zunächst das Paket gdb
, indem Sie den Befehl sudo apt-get install -y gdb
ausführen.
Starten Sie VS Code, und öffnen Sie den Ordner, der das skript score.py enthält.
Fügen Sie für diesen Arbeitsbereich in VS Code der launch.json Datei die folgende Konfiguration hinzu:
{ "version": "0.2.0", "configurations": [ { "name": "Python: Attach using Process ID", "type": "debugpy", "request": "attach", "processId": "${command:pickProcess}", "justMyCode": true } ] }
Starten Sie in einem Befehlsfenster den Ableitungsserver, indem Sie den
azmlinfsrv --entry_script score.py
Befehl ausführen.Führen Sie die folgenden Schritte aus, um die Debugsitzung in VS Code zu starten:
Wählen Sie "Debuggen starten"> aus, oder wählen Sie "F5" aus.
Durchsuchen Sie im Befehlsfenster die Protokolle vom Ableitungsserver, um die Prozess-ID des
azmlinfsrv
Prozesses zu suchen:Suchen Sie unbedingt die ID des
azmlinfsrv
Prozesses, nicht dengunicorn
Prozess.Geben Sie im VS Code-Debugger die ID des
azmlinfsrv
Prozesses ein.Wenn die VS Code-Prozessauswahl nicht angezeigt wird, geben Sie die Prozess-ID manuell in das Feld
processId
der Datei „launch.json“ für diesen Arbeitsbereich ein.
Zum Starten und Anfügen von Modi können Sie Haltepunkte festlegen und das Skript schrittweise debuggen.
Verwenden eines End-to-End-Beispiels
Im folgenden Verfahren wird der Ableitungsserver lokal mit Beispieldateien aus dem Azure Machine Learning-Beispiel-Repository ausgeführt. Die Beispieldateien umfassen ein Bewertungsskript, eine Modelldatei und eine Umgebungsdatei. Weitere Beispiele zur Verwendung dieser Beispieldateien finden Sie unter Bereitstellen und Bewerten eines Machine Learning-Modells mithilfe eines Onlineendpunkts.
Klonen Sie das Beispielrepository, und wechseln Sie zu dem Ordner, der die relevanten Beispieldateien enthält:
git clone --depth 1 https://github.com/Azure/azureml-examples cd azureml-examples/cli/endpoints/online/model-1/
Verwenden Sie Conda zum Erstellen und Aktivieren einer virtuellen Umgebung:
In diesem Beispiel wird das Paket
azureml-inference-server-http
automatisch installiert. Das Paket ist als abhängige Bibliothek desazureml-defaults
Pakets enthalten, das in der Datei "conda.yaml" aufgeführt ist.# Create the environment from the YAML file. conda env create --name model-env -f ./environment/conda.yaml # Activate the new environment. conda activate model-env
Überprüfen Sie das Bewertungsskript, onlinescoring/score.py:
import os import logging import json import numpy import joblib def init(): """ This function is called when the container is initialized/started, typically after create/update of the deployment. You can write the logic here to perform init operations like caching the model in memory """ global model # AZUREML_MODEL_DIR is an environment variable created during deployment. # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION) # Please provide your model's folder name if there is one model_path = os.path.join( os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl" ) # deserialize the model file back into a sklearn model model = joblib.load(model_path) logging.info("Init complete") def run(raw_data): """ This function is called for every invocation of the endpoint to perform the actual scoring/prediction. In the example we extract the data from the json input and call the scikit-learn model's predict() method and return the result back """ logging.info("model 1: request received") data = json.loads(raw_data)["data"] data = numpy.array(data) result = model.predict(data) logging.info("Request processed") return result.tolist()
Führen Sie den Rückschlussserver aus, indem Sie das Bewertungsskript und den Pfad zum Modellordner angeben.
Während der Bereitstellung wird die
AZUREML_MODEL_DIR
Variable definiert, um den Pfad zum Modellordner zu speichern. Sie geben diesen Wert immodel_dir
Parameter an. Wenn das Bewertungsskript ausgeführt wird, ruft es den Wert aus derAZUREML_MODEL_DIR
Variablen ab.Verwenden Sie in diesem Fall das aktuelle Verzeichnis
./
alsmodel_dir
-Wert, da das Bewertungsskript das Unterverzeichnis alsmodel/sklearn_regression_model.pkl
angibt.azmlinfsrv --entry_script ./onlinescoring/score.py --model_dir ./
Wenn der Rückschlussserver gestartet und erfolgreich das Bewertungsskript aufruft, wird das Beispielstartprotokoll geöffnet. Andernfalls zeigt das Protokoll Fehlermeldungen an.
Testen Sie das Bewertungsskript mit Beispieldaten, indem Sie die folgenden Schritte ausführen:
Öffnen Sie ein weiteres Befehlsfenster, und wechseln Sie zum gleichen Arbeitsverzeichnis, in dem Sie den
azmlinfsrv
Befehl ausgeführt haben.Verwenden Sie das folgende
curl
Hilfsprogramm, um eine Beispielanforderung an den Ableitungsserver zu senden und ein Bewertungsergebnis zu erhalten:curl --request POST "127.0.0.1:5001/score" --header "Content-Type:application/json" --data @sample-request.json
Wenn in Ihrem Bewertungsskript keine Probleme bestehen, gibt das Skript das Bewertungsergebnis zurück. Wenn Probleme auftreten, können Sie das Bewertungsskript aktualisieren und dann den Rückschlussserver erneut starten, um das aktualisierte Skript zu testen.
Überprüfung der Inferenz-Serverpfade
Der Rückschlussserver lauscht standardmäßig auf Port 5001 an den folgenden Routen:
Name | Route |
---|---|
Livetest | 127.0.0.1:5001/ |
Ergebnis | 127.0.0.1:5001/score |
OpenAPI (Swagger) | 127.0.0.1:5001/swagger.json |
Überprüfen von Ableitungsserverparametern
Der Rückschlussserver akzeptiert die folgenden Parameter:
Parameter | Erforderlich | Standard | Beschreibung |
---|---|---|---|
entry_script |
Richtig | N/V | Gibt den relativen oder absoluten Pfad zum Bewertungsskript an. |
model_dir |
Falsch | N/V | Gibt den relativen oder absoluten Pfad zum Verzeichnis an, das das modell enthält, das für die Ableitung verwendet wird. |
port |
Falsch | 5001 | Gibt den Dienstport des Ableitungsservers an. |
worker_count |
Falsch | 1 | Gibt die Anzahl von Workerthreads an, die gleichzeitige Anforderungen verarbeiten |
appinsights_instrumentation_key |
Falsch | N/V | Stellt den Instrumentierungsschlüssel für die Instanz von Application Insights bereit, in der die Protokolle veröffentlicht werden. |
access_control_allow_origins |
Falsch | N/V | Aktiviert die CORS für die angegebenen Quellen, wobei mehrere Quellen durch ein Komma (,) getrennt werden, wie z. B. microsoft.com, bing.com . |
Erforschen der Anfrageverarbeitung bei Inferenzservern
Die folgenden Schritte veranschaulichen, azmlinfsrv
wie der Ableitungsserver eingehende Anforderungen verarbeitet:
Ein Python CLI-Wrapper befindet sich um den Netzwerkstapel des Inference-Servers und wird verwendet, um den Rückschlussserver zu starten.
Ein Client sendet eine Anforderung an den Rückschlussserver.
Der Rückschlussserver sendet die Anforderung über den WSGI-Server (Web Server Gateway Interface ), der die Anforderung an eine der folgenden Flask-Workeranwendungen sendet:
Die Flask-Workeranwendung verarbeitet die Anforderung, einschließlich des Ladens des Einstiegsskripts und aller Abhängigkeiten.
Ihr Einstiegsskript empfängt die Anforderung. Das Eingabeskript führt einen Rückschluss auf das geladene Modell und gibt eine Antwort zurück.
Erkunden von Rückschlussserverprotokollen
Es gibt zwei Möglichkeiten zum Abrufen von Protokolldaten für den Ableitungsservertest:
- Führen Sie das
azureml-inference-server-http
Paket lokal aus, und zeigen Sie die Protokollausgabe an. - Verwenden Sie Onlineendpunkte, und zeigen Sie die Containerprotokolle an. Das Protokoll für den Rückschlussserver hat den Namen HTTP-Rückschlussserver für Azure Machine Learning <Version>.
Hinweis
Das Protokollierungsformat wurde seit Version 0.8.0 geändert. Wenn Ihr Protokoll einen anderen als den erwarteten Stil aufweist, aktualisieren Sie das Paket azureml-inference-server-http
auf die neueste Version.
Anzeigen der Startprotokolle
Wenn der Ableitungsserver gestartet wird, werden in den Protokollen die folgenden anfänglichen Servereinstellungen angezeigt:
Azure ML Inferencing HTTP server <version>
Server Settings
---------------
Entry Script Name: <entry-script>
Model Directory: <model-directory>
Config File: <configuration-file>
Worker Count: <worker-count>
Worker Timeout (seconds): None
Server Port: <port>
Health Port: <port>
Application Insights Enabled: false
Application Insights Key: <Application-Insights-instrumentation-key>
Inferencing HTTP server version: azmlinfsrv/<version>
CORS for the specified origins: <access-control-allow-origins>
Create dedicated endpoint for health: <health-check-endpoint>
Server Routes
---------------
Liveness Probe: GET 127.0.0.1:<port>/
Score: POST 127.0.0.1:<port>/score
<logs>
Wenn Sie beispielsweise den Ableitungsserver ausführen, indem Sie die End-to-End-Beispielschritte ausführen, enthalten die Protokolle die folgenden Informationen:
Azure ML Inferencing HTTP server v1.2.2
Server Settings
---------------
Entry Script Name: /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
Model Directory: ./
Config File: None
Worker Count: 1
Worker Timeout (seconds): None
Server Port: 5001
Health Port: 5001
Application Insights Enabled: false
Application Insights Key: None
Inferencing HTTP server version: azmlinfsrv/1.2.2
CORS for the specified origins: None
Create dedicated endpoint for health: None
Server Routes
---------------
Liveness Probe: GET 127.0.0.1:5001/
Score: POST 127.0.0.1:5001/score
2022-12-24 07:37:53,318 I [32726] gunicorn.error - Starting gunicorn 20.1.0
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Listening at: http://0.0.0.0:5001 (32726)
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Using worker: sync
2022-12-24 07:37:53,322 I [32756] gunicorn.error - Booting worker with pid: 32756
Initializing logger
2022-12-24 07:37:53,779 I [32756] azmlinfsrv - Starting up app insights client
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Found user script at /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - run() is not decorated. Server will invoke it with the input in JSON string.
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Invoking user's init function
2022-12-24 07:37:55,974 I [32756] azmlinfsrv.user_script - Users's init has completed successfully
2022-12-24 07:37:55,976 I [32756] azmlinfsrv.swagger - Swaggers are prepared for the following versions: [2, 3, 3.1].
2022-12-24 07:37:55,976 I [32756] azmlinfsrv - Scoring timeout is set to 3600000
2022-12-24 07:37:55,976 I [32756] azmlinfsrv - Worker with pid 32756 ready for serving traffic
Verstehen des Protokolldatenformats
Alle Protokolle vom Ableitungsserver, mit Ausnahme des Startprogrammskripts, präsentieren Daten im folgenden Format:
<UTC-time> <level> [<process-ID>] <logger-name> - <message>
Jeder Eintrag besteht aus den folgenden Komponenten:
<UTC-time>
: Der Zeitpunkt, zu dem der Eintrag in das Protokoll eingegeben wird<level>
: Das erste Zeichen der Protokollierungsebene für den Eintrag, z. B.E
für FEHLER,I
für INFO usw.<process-ID>
: Die ID des Prozesses, der dem Eintrag zugeordnet ist<logger-name>
: Der Name der Ressource, die dem Protokolleintrag zugeordnet ist<message>
: Der Inhalt der Protokollnachricht
Es gibt sechs Protokollierungsebenen in Python. Jede Ebene weist entsprechend ihrem Schweregrad einen zugewiesenen numerischen Wert auf:
Protokolliergrad | Numerischer Wert |
---|---|
KRITISCH | 50 |
40 | |
WARNUNG | 30 |
INFORMATIONEN | 20 |
DEBUG | 10 |
NOTSET | 0 |
Problembehandlung beim Rückschlussserver
In den folgenden Abschnitten finden Sie grundlegende Tipps zur Problembehandlung für den Rückschlussserver. Informationen zur Problembehandlung bei Onlineendpunkten finden Sie unter "Problembehandlung bei der Bereitstellung und Bewertung von Onlineendpunkten".
Installierte Pakete prüfen
Führen Sie die folgenden Schritte aus, um Probleme mit installierten Paketen zu beheben:
Sammeln Sie Informationen zu installierten Paketen und Versionen für Ihre Python-Umgebung.
Überprüfen Sie in Ihrer Umgebungsdatei die Version des
azureml-inference-server-http
python-Pakets, das angegeben ist. Überprüfen Sie in den Startprotokollen des Azure Machine Learning-Servers die Version des angezeigten Ableitungsservers. Vergewissern Sie sich, dass die beiden Versionen übereinstimmen.In einigen Fällen installiert der PIP-Abhängigkeitskonfliktlöser unerwartete Paketversionen. Möglicherweise müssen Sie
pip
ausführen, um installierte Pakete und Versionen zu korrigieren.Wenn Sie Flask oder dessen Abhängigkeiten in Ihrer Umgebung angeben, entfernen Sie diese Elemente.
- Zu den abhängigen Paketen zählen
flask
,jinja2
,itsdangerous
,werkzeug
,markupsafe
undclick
. - Das
flask
Paket wird als Abhängigkeit im Ableitungsserverpaket aufgeführt. Der beste Ansatz besteht darin, dem Rückschlussserver die Installation des Paketsflask
zu ermöglichen. - Wenn der Rückschlussserver für die Unterstützung neuer Versionen von Flask konfiguriert ist, empfängt der Ableitungsserver automatisch die Paketupdates, sobald sie verfügbar sind.
- Zu den abhängigen Paketen zählen
Überprüfen der Ableitungsserverversion
Das Serverpaket azureml-inference-server-http
wird in PyPI veröffentlicht. Auf der Seite "PyPI " werden der Änderungsprotokoll und alle Versionen des Pakets aufgelistet.
Wenn Sie eine frühe Paketversion verwenden, aktualisieren Sie Ihre Konfiguration auf die neueste Version. In der folgenden Tabelle sind stabile Versionen, häufige Probleme und empfohlene Anpassungen zusammengefasst:
Paketversion | Beschreibung | Problem | Lösung |
---|---|---|---|
0.4.x | Gebündelt in Trainingsimages mit dem Datum 20220601 oder früher und azureml-defaults -Paketversionen 0.1.34 bis 1.43. Die neueste stabile Version ist 0.4.13. |
Bei Serverversionen vor 0.4.11 können Abhängigkeitsprobleme, wie ein Problem mit Flask, auftreten can't import name Markup from jinja2 . |
Aktualisieren Sie nach Möglichkeit auf Version 0.4.13 oder 1.4.x, die neueste Version. |
0.6.x | Vorinstalliert in Rückschlussimages bis 20220516 . Die neueste stabile Version ist 0.6.1. |
N/V | N/V |
0.7.x | Unterstützt Flask 2. Die neueste stabile Version ist 0.7.7. | N/V | N/V |
0.8.x | Verwendet ein aktualisiertes Protokollformat. Endet die Unterstützung für Python 3.6. | N/V | N/V |
1.0.x | Endet die Unterstützung für Python 3.7. | N/V | N/V |
1.1.x | Migriert zu pydantic 2.0. |
N/V | N/V |
1.2.x | Fügt Unterstützung für Python 3.11 hinzu. Aktualisiert gunicorn auf Version 22.0.0. Aktualisiert werkzeug auf Version 3.0.3 und spätere Versionen. |
N/V | N/V |
1.3.x | Fügt Unterstützung für Python 3.12 hinzu. Führt ein Upgrade von certifi auf Version 2024.7.4 durch. Führt ein Upgrade von flask-cors auf Version 5.0.0 durch. Aktualisiert die gunicorn - und pydantic -Pakete. |
N/V | N/V |
1.4.x | Führt ein Upgrade von waitress auf Version 3.0.1 durch. Endet die Unterstützung für Python 3.8. Entfernt die Kompatibilitätsschicht, die verhindert, dass das Flask 2.0-Upgrade den Anforderungsobjektcode aufbricht. |
Wenn Sie von der Kompatibilitätsebene abhängen, funktioniert der Anforderungsobjektcode möglicherweise nicht. | Migrieren Sie Ihr Bewertungsskript zu Flask 2. |
Überprüfen der Paketabhängigkeiten
Die wichtigsten abhängigen Pakete für das Serverpaket azureml-inference-server-http
sind:
flask
opencensus-ext-azure
inference-schema
Wenn Sie das azureml-defaults
Paket in Ihrer Python-Umgebung angeben, ist das azureml-inference-server-http
Paket ein abhängiges Paket. Die Abhängigkeit wird automatisch installiert.
Tipp
Wenn Sie das Azure Machine Learning SDK für Python v1 verwenden und das azureml-defaults
Paket nicht explizit in Ihrer Python-Umgebung angeben, fügt das SDK das Paket möglicherweise automatisch hinzu. Die Paketversion ist jedoch relativ zur SDK-Version gesperrt. Wenn die SDK-Version beispielsweise 1.38.0 ist, wird der azureml-defaults==1.38.0
Eintrag den Pip-Anforderungen der Umgebung hinzugefügt.
TypeError beim Starten des Inference-Servers
Möglicherweise tritt beim Rückschlussserverstart der folgende TypeError
auf:
TypeError: register() takes 3 positional arguments but 4 were given
File "/var/azureml-server/aml_blueprint.py", line 251, in register
super(AMLBlueprint, self).register(app, options, first_registration)
TypeError: register() takes 3 positional arguments but 4 were given
Dieser Fehler tritt auf, wenn Flask 2 in Ihrer Python-Umgebung installiert ist, aber Ihre Version des Pakets azureml-inference-server-http
Flask 2 nicht unterstützt. Die Unterstützung für Flask 2 ist im azureml-inference-server-http
Paket 0.7.0 und höher sowie im azureml-defaults
1.44-Paket und höheren Versionen verfügbar.
Wenn Sie das Flask 2-Paket nicht in einem Azure Machine Learning-Docker-Image verwenden, verwenden Sie die aktuelle Version des Pakets
azureml-inference-server-http
oderazureml-defaults
.Wenn Sie das Flask 2-Paket in einem Azure Machine Learning Docker-Image verwenden, vergewissern Sie sich, dass die Build-Version des Images
July 2022
oder höher ist.Sie können die Imageversion in den Containerprotokollen finden. Sehen Sie sich beispielsweise die folgenden Protokollanweisungen an:
2022-08-22T17:05:02,147738763+00:00 | gunicorn/run | AzureML Container Runtime Information 2022-08-22T17:05:02,161963207+00:00 | gunicorn/run | ############################################### 2022-08-22T17:05:02,168970479+00:00 | gunicorn/run | 2022-08-22T17:05:02,174364834+00:00 | gunicorn/run | 2022-08-22T17:05:02,187280665+00:00 | gunicorn/run | AzureML image information: openmpi4.1.0-ubuntu20.04, Materialization Build:20220708.v2 2022-08-22T17:05:02,188930082+00:00 | gunicorn/run | 2022-08-22T17:05:02,190557998+00:00 | gunicorn/run |
Das Builddatum des Images wird nach der Notation
Materialization Build
angezeigt. Im vorherigen Beispiel lautet die Bildversion20220708
oder der 8. Juli 2022. Das Image in diesem Beispiel ist mit Flask 2 kompatibel.Wenn in Ihrem Containerprotokoll keine Meldung dieser Art angezeigt wird, ist Ihr Image veraltet und sollte aktualisiert werden. Wenn Sie ein Compute Unified Device Architecture (CUDA)-Image verwenden und kein neueres Image finden können, überprüfen Sie das AzureML-Containers-Repository , um festzustellen, ob Ihr Image veraltet ist. Dort finden Sie designierte Ersatzimages für veraltete Images.
Wenn Sie den Rückschlussserver mit einem Onlineendpunkt verwenden, finden Sie auch die Protokolle im Azure Machine Learning Studio. Wählen Sie auf der Seite für Ihren Endpunkt die Registerkarte "Protokolle " aus.
Wenn Sie mit dem SDK v1 bereitstellen und kein Image in Ihrer Bereitstellungskonfiguration explizit angeben, wendet der Ableitungsserver das openmpi4.1.0-ubuntu20.04
Paket mit einer Version an, die Ihrem lokalen SDK-Toolset entspricht. Die installierte Version ist jedoch möglicherweise nicht die neueste verfügbare Version des Images.
Für SDK Version 1.43 installiert der Ableitungsserver standardmäßig die openmpi4.1.0-ubuntu20.04:20220616
Paketversion, diese Paketversion ist jedoch nicht mit SDK 1.43 kompatibel. Stellen Sie sicher, dass Sie das neueste SDK für Ihre Bereitstellung verwenden.
Wenn Sie das Image nicht aktualisieren können, können Sie das Problem vorübergehend umgehen, indem Sie die Einträge azureml-defaults==1.43
oder azureml-inference-server-http~=0.4.13
in Ihrer Umgebungsdatei anheften. Diese Einträge weisen den Inferenzserver an, die ältere Version mit flask 1.0.x
zu installieren.
ImportError oder ModuleNotFoundError beim Starten des Rückschlussservers
Sie könnten auf ein ImportError
oder ModuleNotFoundError
in bestimmten Modulen wie opencensus
, jinja2
, markupsafe
oder click
stoßen, während der Inferenz-Server startet. Das folgende Beispiel zeigt die Fehlermeldung:
ImportError: cannot import name 'Markup' from 'jinja2'
Die Import- und Modulfehler treten auf, wenn Sie Version 0.4.10 oder frühere Versionen des Rückschlussservers verwenden, die die Flask-Abhängigkeit nicht an eine kompatible Version anheften. Um das Problem zu verhindern, installieren Sie eine höhere Version des Rückschlussservers.