Überwachen und Erfassen von Daten von ML-Webdienst-Endpunkten
GILT FÜR: Python SDK azureml v1
In diesem Artikel erfahren Sie, wie Sie Daten von Modellen erfassen, die in Webdienst-Endpunkten in Azure Kubernetes Service (AKS) oder Azure Container Instances (ACI) bereitgestellt wurden. Verwenden Sie Azure Application Insights, um die folgenden Daten von einem Endpunkt zu erfassen:
- Ausgabedaten
- Antworten
- Anforderungsraten, Antwortzeiten und Fehlerraten
- Abhängigkeitsraten, Antwortzeiten und Fehlerraten
- Ausnahmen
Im Notebook enable-app-insights-in-production-service.ipynb werden die in diesem Artikel behandelten Konzepte veranschaulicht.
Informationen zum Ausführen von Notebooks finden Sie im Artikel Verwenden von Jupyter-Notebooks zum Erkunden des Azure Machine Learning-Diensts.
Wichtig
Die Informationen in diesem Artikel basieren auf der Azure Application Insights-Instanz, die mit Ihrem Arbeitsbereich erstellt wurde. Wenn Sie diese Application Insights-Instanz gelöscht haben, gibt es keine andere Möglichkeit, sie neu zu erstellen, als den Arbeitsbereich zu löschen und neu zu erstellen.
Tipp
Wenn Sie stattdessen Onlineendpunkte verwenden, verwenden Sie stattdessen die Informationen aus dem Artikel Überwachen von Onlineendpunkten.
Voraussetzungen
Ein Azure-Abonnement. Testen Sie die kostenlose oder kostenpflichtige Version von Azure Machine Learning.
Ein Azure Machine Learning-Arbeitsbereich, ein lokales Verzeichnis mit Ihren Skripts und das Azure Machine Learning SDK für Python müssen installiert sein. Weitere Informationen finden Sie unter Konfiguration einer Entwicklungsumgebung.
Ein trainiertes Modell für maschinelles Lernen. Weitere Informationen finden Sie im Tutorial zum Trainieren eines Imageklassifizierungsmodells.
Konfigurieren der Protokollierung mit dem Python SDK
In diesem Abschnitt erfahren Sie, wie Sie die Application Insights-Protokollierung mit dem Python SDK aktivieren.
Aktualisieren eines bereitgestellten Diensts
Führen Sie die folgenden Schritte aus, um einen vorhandenen Webdienst zu aktualisieren:
Suchen Sie den Dienst in Ihrem Arbeitsbereich. Der Wert für
ws
ist der Name des Arbeitsbereichs.from azureml.core.webservice import Webservice aks_service= Webservice(ws, "my-service-name")
Aktualisieren Sie Ihren Dienst, und aktivieren Sie Azure Application Insights.
aks_service.update(enable_app_insights=True)
Protokollieren von benutzerdefinierten Ablaufverfolgungen in Ihrem Dienst
Wichtig
Azure Application Insights protokolliert nur Nutzlasten von bis zu 64 KB. Bei Erreichen dieses Grenzwerts treten unter Umständen Fehler auf (etwa aufgrund von unzureichendem Arbeitsspeicher), oder es werden ggf. keine Informationen protokolliert. Sind die Daten, die Sie protokollieren möchten, größer als 64 KB, speichern Sie sie stattdessen in Blob Storage, wie unter Sammeln von Daten für Modelle in der Produktion beschrieben.
In komplexeren Situationen wie der Modellnachverfolgung in einer AKS-Bereitstellungwird die Verwendung einer Drittanbieterbibliothek wie OpenCensus empfohlen.
Um benutzerdefinierte Ablaufverfolgungen zu protokollieren, führen Sie den Standardbereitstellungsprozess für AKS oder ACI im Dokument Wie und wo Modelle bereitgestellt werden aus. Führen Sie dann die folgenden Schritte aus:
Aktualisieren Sie die Bewertungsdatei, indem Sie print-Anweisungen hinzufügen, um Daten während des Rückschließens an Application Insights zu senden. Um komplexere Informationen wie etwa die Anforderungsdaten und die Antwort zu protokollieren, verwenden Sie eine JSON-Struktur.
Mit der folgenden Beispieldatei
score.py
werden die Initialisierung des Modells, die Ein- und Ausgabe während des Rückschließens sowie die Zeit protokolliert, zu der Fehler auftreten.import pickle import json import numpy from sklearn.externals import joblib from sklearn.linear_model import Ridge from azureml.core.model import Model import time def init(): global model #Print statement for appinsights custom traces: print ("model initialized" + time.strftime("%H:%M:%S")) # note here "sklearn_regression_model.pkl" is the name of the model registered under the workspace # this call should return the path to the model.pkl file on the local disk. model_path = Model.get_model_path(model_name = 'sklearn_regression_model.pkl') # deserialize the model file back into a sklearn model model = joblib.load(model_path) # note you can pass in multiple rows for scoring def run(raw_data): try: data = json.loads(raw_data)['data'] data = numpy.array(data) result = model.predict(data) # Log the input and output data to appinsights: info = { "input": raw_data, "output": result.tolist() } print(json.dumps(info)) # you can return any datatype as long as it is JSON-serializable return result.tolist() except Exception as e: error = str(e) print (error + time.strftime("%H:%M:%S")) return error
Aktualisieren Sie die Dienstkonfiguration, und stellen Sie sicher, dass Sie Application Insights aktivieren.
config = Webservice.deploy_configuration(enable_app_insights=True)
Erstellen Sie ein Image, und stellen Sie es in AKS oder ACI bereit. Weitere Informationen finden Sie unter Bereitstellen von Modellen mit dem Azure Machine Learning Service.
Deaktivieren der Nachverfolgung in Python
Verwenden Sie den folgenden Code, um Azure Application Insights zu deaktivieren:
## replace <service_name> with the name of the web service
<service_name>.update(enable_app_insights=False)
Konfigurieren der Protokollierung mit Azure Machine Learning Studio
Sie können Azure Application Insights auch in Azure Machine Learning Studio aktivieren. Sobald Ihr Modell als Webdienst bereitgestellt werden kann, führen Sie die folgenden Schritte aus, um Application Insights zu aktivieren:
Melden Sie sich unter https://ml.azure.com bei Studio an.
Navigieren Sie zu Modelle, und wählen Sie das bereitzustellende Modell aus.
Wählen Sie + Bereitstellen aus.
Füllen Sie das Formular Modell bereitstellen aus.
Erweitern Sie das Menü Erweitert.
Aktivieren Sie Application Insights-Diagnose und -Datensammlung aktivieren.
Anzeigen von Metriken und Protokollen
Abfragen von Protokollen für bereitgestellte Modelle
Protokolle von Onlineendpunkten sind Kundendaten. Sie können die get_logs()
-Funktion verwenden, um Protokolle aus einem zuvor bereitgestellten Webdienst abzurufen. Die Protokolle können ausführliche Informationen zu allen Fehlern enthalten, die während der Bereitstellung aufgetreten sind.
from azureml.core import Workspace
from azureml.core.webservice import Webservice
ws = Workspace.from_config()
# load existing web service
service = Webservice(name="service-name", workspace=ws)
logs = service.get_logs()
Wenn Sie über mehrere Mandanten verfügen, müssen Sie vor ws = Workspace.from_config()
ggf. den folgenden Code für die Authentifizierung hinzufügen:
from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="the tenant_id in which your workspace resides")
Anzeigen von Protokollen in Studio
Azure Application Insights speichert die Dienstprotokolle in der gleichen Ressourcengruppe wie der Azure Machine Learning-Arbeitsbereich. Führen Sie die folgenden Schritte aus, um die Daten mit Studio anzuzeigen:
Wechseln Sie zu Ihrem Azure Machine Learning-Arbeitsbereich im Studio.
Wählen Sie Endpunkte.
Testen Sie den bereitgestellten Dienst.
Wählen Sie den Link Application Insights-URL aus.
Wählen Sie in Application Insights auf der Registerkarte Übersicht oder im Abschnitt Überwachung die Option Protokolle aus.
Wenn Sie protokollierte Informationen aus der Datei „score.py“ anzeigen möchten, sehen Sie sich die Tabelle traces an. Mit der folgenden Abfrage wird nach Protokollen gesucht, bei denen der Wert input protokolliert wurde:
traces | where customDimensions contains "input" | limit 10
Weitere Informationen zur Verwendung von Azure Application Insights finden Sie unter Was ist Application Insights?
Meta- und -Antwortdaten eines Webdiensts
Wichtig
Azure Application Insights protokolliert nur Nutzlasten von bis zu 64 KB. Bei Erreichen dieses Grenzwerts treten unter Umständen Fehler auf (etwa aufgrund von unzureichendem Arbeitsspeicher), oder es werden ggf. keine Informationen protokolliert.
Zum Protokollieren von Informationen zu Webdienstanforderungen fügen Sie der Datei „score.py“ print
-Anweisungen hinzu. Jede print
-Anweisung erstellt einen Eintrag in der Application Insights-Ablaufverfolgungstabelle unter der Meldung STDOUT
. Application Insights speichert die Ausgaben der print
-Anweisungen in customDimensions
und in der Ablaufverfolgungstabelle Contents
. Durch Ausgeben von JSON-Zeichenfolgen wird in der Ablaufverfolgungsausgabe unter Contents
eine hierarchische Datenstruktur generiert.
Exportieren von Daten für die Aufbewahrung und die Verarbeitung
Wichtig
Azure Application Insights unterstützt nur Exporte in einen Blobspeicher. Weitere Informationen zu den Beschränkungen dieser Implementierung finden Sie unter Exportieren von Telemetriedaten aus App Insights.
Verwenden Sie den fortlaufenden Export von Application Insights, um Daten in ein Blobspeicherkonto zu exportieren, für das Sie die Aufbewahrungseinstellungen definieren können. Application Insights exportiert die Daten im JSON-Format.
Nächste Schritte
In diesem Artikel haben Sie gelernt, wie Sie die Protokollierung aktivieren und Protokolle für Webdienst-Endpunkte anzeigen. In den folgenden Artikeln werden die nächsten Schritte erläutert:
MLOps: Verwalten, Bereitstellen und Überwachen von Modellen mit Azure Machine Learning erfahren Sie, wie Sie von Modellen in der Produktion erfasste Daten nutzen. Solche Daten können Sie dabei unterstützen, Ihren Machine Learning-Prozess kontinuierlich zu verbessern.