Monitorowanie i zbieranie danych z punktów końcowych usługi internetowej MLMonitor and collect data from ML web service endpoints

W tym artykule dowiesz się, jak zbierać dane z modeli wdrożonych w punktach końcowych usługi sieci Web w usłudze Azure Kubernetes Service (AKS) lub Azure Container Instances (ACI).In this article, you learn how to collect data from models deployed to web service endpoints in Azure Kubernetes Service (AKS) or Azure Container Instances (ACI). Użyj usługi Azure Application Insights , aby zebrać następujące dane z punktu końcowego:Use Azure Application Insights to collect the following data from an endpoint:

  • Dane wyjścioweOutput data
  • OdpowiedziResponses
  • Stawki żądania, czasy odpowiedzi i wskaźniki niepowodzeńRequest rates, response times, and failure rates
  • Stawki zależności, czasy odpowiedzi i wskaźniki niepowodzeńDependency rates, response times, and failure rates
  • WyjątkiExceptions

W notesie enable-App-Insights-in-Product-Service. ipynb przedstawiono Koncepcje opisane w tym artykule.The enable-app-insights-in-production-service.ipynb notebook demonstrates concepts in this article.

Instrukcję uruchamiania notesów znajdziesz w artykule Use Jupyter notebooks to explore this service (Eksplorowanie tej usługi za pomocą notesów Jupyter).Learn how to run notebooks by following the article Use Jupyter notebooks to explore this service.

Wymagania wstępnePrerequisites

Konfigurowanie rejestrowania za pomocą zestawu SDK języka PythonConfigure logging with the Python SDK

W tej sekcji dowiesz się, jak włączyć rejestrowanie w usłudze Application Insights przy użyciu zestawu SDK języka Python.In this section, you learn how to enable Application Insight logging by using the Python SDK.

Aktualizowanie wdrożonej usługiUpdate a deployed service

Wykonaj następujące kroki, aby zaktualizować istniejącą usługę sieci Web:Use the following steps to update an existing web service:

  1. Zidentyfikuj usługę w obszarze roboczym.Identify the service in your workspace. Wartość dla ws jest nazwą obszaru roboczegoThe value for ws is the name of your workspace

    from azureml.core.webservice import Webservice
    aks_service= Webservice(ws, "my-service-name")
    
  2. Aktualizowanie usługi i Włączanie usługi Azure Application InsightsUpdate your service and enable Azure Application Insights

    aks_service.update(enable_app_insights=True)
    

Rejestruj niestandardowe ślady w usłudzeLog custom traces in your service

Ważne

Usługa Azure Application Insights rejestruje tylko ładunki o rozmiarze do 64 KB.Azure Application Insights only logs payloads of up to 64kb. Po osiągnięciu tego limitu mogą pojawić się błędy, takie jak brak pamięci lub nie można rejestrować informacji.If this limit is reached, you may see errors such as out of memory, or no information may be logged. Jeśli dane, które mają być rejestrowane, są większe niż 64 KB, należy je zapisać w usłudze BLOB Storage przy użyciu informacji w temacie zbieranie danych dla modeli w środowisku produkcyjnym.If the data you want to log is larger 64kb, you should instead store it to blob storage using the information in Collect Data for models in production.

W przypadku bardziej złożonych sytuacji, takich jak śledzenie modelu w ramach wdrożenia AKS, zalecamy użycie biblioteki innej firmy, takiej jak OpenCensus.For more complex situations, like model tracking within an AKS deployment, we recommend using a third-party library like OpenCensus.

Aby rejestrować niestandardowe ślady, postępuj zgodnie ze standardowym procesem wdrażania dla AKS lub ACI w temacie jak wdrożyć i gdzie dokument.To log custom traces, follow the standard deployment process for AKS or ACI in the How to deploy and where document. Następnie wykonaj następujące czynności:Then, use the following steps:

  1. Zaktualizuj plik oceniania, dodając instrukcje Print, które wysyłają dane do Application Insights podczas wnioskowania.Update the scoring file by adding print statements to send data to Application Insights during inference. Aby uzyskać bardziej złożone informacje, takie jak dane żądania i odpowiedzi, należy użyć struktury JSON.For more complex information, such as the request data and the response, use a JSON structure.

    Poniższy przykładowy score.py plik rejestruje, kiedy model został zainicjowany, dane wejściowe i wyjściowe podczas wnioskowania oraz czas wystąpienia jakichkolwiek błędów.The following example score.py file logs when the model was initialized, input and output during inference, and the time any errors occur.

    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. Zaktualizuj konfigurację usługi i upewnij się, że Application Insights.Update the service configuration, and make sure to enable Application Insights.

    config = Webservice.deploy_configuration(enable_app_insights=True)
    
  3. Utwórz obraz i Wdróż go na AKS lub ACI.Build an image and deploy it on AKS or ACI. Aby uzyskać więcej informacji, zobacz jak wdrażać i gdzie.For more information, see How to deploy and where.

Wyłącz śledzenie w języku PythonDisable tracking in Python

Aby wyłączyć usługę Azure Application Insights, użyj następującego kodu:To disable Azure Application Insights, use the following code:

## replace <service_name> with the name of the web service
<service_name>.update(enable_app_insights=False)

Konfigurowanie rejestrowania w programie Azure Machine Learning StudioConfigure logging with Azure Machine Learning studio

Możesz również włączyć usługę Azure Application Insights w programie Azure Machine Learning Studio.You can also enable Azure Application Insights from Azure Machine Learning studio. Gdy wszystko jest gotowe do wdrożenia modelu jako usługi sieci Web, wykonaj następujące kroki, aby włączyć Application Insights:When you're ready to deploy your model as a web service, use the following steps to enable Application Insights:

  1. Zaloguj się do programu Studio pod adresem https://ml.azure.com .Sign in to the studio at https://ml.azure.com.

  2. Przejdź do pozycji modele i wybierz model, który chcesz wdrożyć.Go to Models and select the model you want to deploy.

  3. Wybierz pozycję + Wdróż.Select +Deploy.

  4. Wypełnij formularz Wdróż model .Populate the Deploy model form.

  5. Rozwiń menu Zaawansowane .Expand the Advanced menu.

    Wdróż formularz

  6. Wybierz pozycję włącz Application Insights diagnostyki i zbierania danych.Select Enable Application Insights diagnostics and data collection.

    Włączanie usługi App Insights

Wyświetlanie metryk i dziennikówView metrics and logs

Dzienniki zapytań dla wdrożonych modeliQuery logs for deployed models

Dzienniki punktów końcowych w czasie rzeczywistym to dane klientów.Logs of real-time endpoints are customer data. Możesz użyć funkcji, get_logs() Aby pobrać dzienniki z wcześniej wdrożonej usługi sieci Web.You can use the get_logs() function to retrieve logs from a previously deployed web service. Dzienniki mogą zawierać szczegółowe informacje o błędach, które wystąpiły podczas wdrażania.The logs may contain detailed information about any errors that occurred during deployment.

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()

Jeśli masz wiele dzierżawców, może być konieczne dodanie następującego kodu uwierzytelniania przed ws = Workspace.from_config()If you have multiple Tenants, you may need to add the following authenticate code before ws = Workspace.from_config()

from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="the tenant_id in which your workspace resides")

Wyświetlanie dzienników w StudioView logs in the studio

Usługa Azure Application Insights przechowuje dzienniki usługi w tej samej grupie zasobów co obszar roboczy Azure Machine Learning.Azure Application Insights stores your service logs in the same resource group as the Azure Machine Learning workspace. Aby wyświetlić dane przy użyciu programu Studio, wykonaj następujące kroki:Use the following steps to view your data using the studio:

  1. Przejdź do obszaru roboczego Azure Machine Learning w programie Studio.Go to your Azure Machine Learning workspace in the studio.

  2. Wybierz punkty końcowe.Select Endpoints.

  3. Wybierz wdrożoną usługę.Select the deployed service.

  4. Wybierz łącze Application Insights adresu URL .Select the Application Insights url link.

    Lokalizowanie adresu URL Application InsightsLocate Application Insights url

  5. W Application Insights na karcie Przegląd lub w sekcji monitorowanie wybierz pozycję dzienniki.In Application Insights, from the Overview tab or the Monitoring section, select Logs.

    Karta Omówienie monitorowaniaOverview tab of monitoring

  6. Aby wyświetlić informacje zarejestrowane z pliku score.py, zapoznaj się z tabelą TRACES .To view information logged from the score.py file, look at the traces table. Następujące zapytanie wyszukuje dzienniki, w których zarejestrowano wartość wejściową :The following query searches for logs where the input value was logged:

    traces
    | where customDimensions contains "input"
    | limit 10
    

    dane śledzeniatrace data

Aby uzyskać więcej informacji na temat korzystania z usługi Azure Application Insights, zobacz co to jest Application Insights?.For more information on how to use Azure Application Insights, see What is Application Insights?.

Metadane usługi sieci Web i dane odpowiedziWeb service metadata and response data

Ważne

Usługa Azure Application Insights rejestruje tylko ładunki o rozmiarze do 64 KB.Azure Application Insights only logs payloads of up to 64kb. Po osiągnięciu tego limitu mogą pojawić się błędy, takie jak brak pamięci lub nie można rejestrować informacji.If this limit is reached then you may see errors such as out of memory, or no information may be logged.

Aby rejestrować informacje o żądaniu usługi sieci Web, Dodaj print instrukcje do pliku Score.py.To log web service request information, add print statements to your score.py file. Każda print instrukcja powoduje jeden wpis w tabeli śledzenia Application Insights w komunikacie STDOUT .Each print statement results in one entry in the Application Insights trace table under the message STDOUT. Application Insights przechowuje dane print wyjściowe instrukcji w customDimensions i w Contents tabeli śledzenia.Application Insights stores the print statement outputs in customDimensions and in the Contents trace table. Drukowanie ciągów JSON tworzy hierarchiczną strukturę danych w danych wyjściowych śledzenia poniżej Contents .Printing JSON strings produces a hierarchical data structure in the trace output under Contents.

Eksportowanie danych do przechowywania i przetwarzaniaExport data for retention and processing

Ważne

Usługa Azure Application Insights obsługuje tylko eksporty do magazynu obiektów BLOB.Azure Application Insights only supports exports to blob storage. Aby uzyskać więcej informacji na temat limitów tej implementacji, zobacz Eksportowanie danych telemetrycznych z usługi App Insights.For more information on the limits of this implementation, see Export telemetry from App Insights.

Użyj Application Insights " eksportu ciągłego ", aby wyeksportować dane do konta magazynu obiektów blob, w którym można zdefiniować ustawienia przechowywania.Use Application Insights' continuous export to export data to a blob storage account where you can define retention settings. Application Insights eksportuje dane w formacie JSON.Application Insights exports the data in JSON format.

Eksport ciągły

Następne krokiNext steps

W tym artykule przedstawiono sposób włączania rejestrowania i wyświetlania dzienników dla punktów końcowych usługi sieci Web.In this article, you learned how to enable logging and view logs for web service endpoints. Wypróbuj następujące artykuły, aby wykonać kolejne kroki:Try these articles for next steps: