Ü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

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:

  1. 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")
    
  2. 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:

  1. 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
    
  2. Aktualisieren Sie die Dienstkonfiguration, und stellen Sie sicher, dass Sie Application Insights aktivieren.

    config = Webservice.deploy_configuration(enable_app_insights=True)
    
  3. 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:

  1. Melden Sie sich unter https://ml.azure.com bei Studio an.

  2. Navigieren Sie zu Modelle, und wählen Sie das bereitzustellende Modell aus.

  3. Wählen Sie + Bereitstellen aus.

  4. Füllen Sie das Formular Modell bereitstellen aus.

  5. Erweitern Sie das Menü Erweitert.

    Bereitstellungsformular

  6. Aktivieren Sie Application Insights-Diagnose und -Datensammlung aktivieren.

    Aktivieren von App Insights

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:

  1. Wechseln Sie zu Ihrem Azure Machine Learning-Arbeitsbereich im Studio.

  2. Wählen Sie Endpunkte.

  3. Testen Sie den bereitgestellten Dienst.

  4. Wählen Sie den Link Application Insights-URL aus.

    Suchen der Application Insights-URL

  5. Wählen Sie in Application Insights auf der Registerkarte Übersicht oder im Abschnitt Überwachung die Option Protokolle aus.

    Registerkarte „Übersicht“ im Abschnitt „Überwachung“

  6. 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
    

    Ablaufverfolgungsdaten

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.

Fortlaufendem Export

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: