Monitorowanie i zbieranie danych z punktów końcowych usługi internetowej ML

DOTYCZY:Zestaw SDK języka Python w wersji 1

Z tego artykułu dowiesz się, jak zbierać dane z modeli wdrożonych w punktach końcowych usługi internetowej w usłudze Azure Kubernetes Service (AKS) lub Azure Container Instances (ACI). Użyj usługi aplikacja systemu Azure Insights, aby zebrać następujące dane z punktu końcowego:

  • Dane wyjściowe
  • Odpowiedzi
  • Szybkości żądań, czasy odpowiedzi i współczynniki niepowodzeń
  • Współczynniki zależności, czasy odpowiedzi i współczynniki niepowodzeń
  • Wyjątki

W notesie enable-app-insights-in-production-service.ipynb przedstawiono pojęcia przedstawione w tym artykule.

Instrukcję uruchamiania notesów znajdziesz w artykule Use Jupyter notebooks to explore this service (Eksplorowanie tej usługi za pomocą notesów Jupyter).

Ważne

Informacje przedstawione w tym artykule opierają się na wystąpieniu usługi aplikacja systemu Azure Insights utworzonym za pomocą obszaru roboczego. Jeśli to wystąpienie usługi Application Insights zostało usunięte, nie ma możliwości ponownego utworzenia go poza usuwaniem i ponownym tworzeniem obszaru roboczego.

Porada

Jeśli zamiast tego używasz punktów końcowych online, skorzystaj z informacji w artykule Monitorowanie punktów końcowych online .

Wymagania wstępne

Konfigurowanie rejestrowania przy użyciu zestawu SDK języka Python

W tej sekcji dowiesz się, jak włączyć rejestrowanie usługi Application Insights przy użyciu zestawu SDK języka Python.

Aktualizowanie wdrożonej usługi

Aby zaktualizować istniejącą usługę internetową, wykonaj następujące kroki:

  1. Zidentyfikuj usługę w obszarze roboczym. Wartość parametru ws to nazwa obszaru roboczego

    from azureml.core.webservice import Webservice
    aks_service= Webservice(ws, "my-service-name")
    
  2. Aktualizowanie usługi i włączanie usługi aplikacja systemu Azure Insights

    aks_service.update(enable_app_insights=True)
    

Rejestrowanie niestandardowych śladów w usłudze

Ważne

aplikacja systemu Azure Insights rejestruje tylko ładunki do 64 kb. Jeśli ten limit zostanie osiągnięty, mogą pojawić się błędy, takie jak brak pamięci lub nie są rejestrowane żadne informacje. Jeśli dane, które chcesz rejestrować, są większe niż 64 kb, należy zamiast tego przechowywać je w magazynie obiektów blob przy użyciu informacji z sekcji Zbieranie danych dla modeli w środowisku produkcyjnym.

W przypadku bardziej złożonych sytuacji, takich jak śledzenie modelu we wdrożeniu usługi AKS, zalecamy użycie biblioteki innej firmy, takiej jak OpenCensus.

Aby rejestrować niestandardowe ślady, postępuj zgodnie ze standardowym procesem wdrażania dla usługi AKS lub ACI w temacie Jak wdrożyć i gdzie dokument. Następnie wykonaj następujące czynności:

  1. Zaktualizuj plik oceniania, dodając instrukcje drukowania w celu wysyłania danych do usługi Application Insights podczas wnioskowania. Aby uzyskać bardziej złożone informacje, takie jak dane żądania i odpowiedź, użyj struktury JSON.

    Poniższy przykładowy score.py plik rejestruje podczas inicjowania modelu, danych wejściowych i wyjściowych podczas wnioskowania oraz czasu wystąpienia błędów.

    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 włączono usługę Application Insights.

    config = Webservice.deploy_configuration(enable_app_insights=True)
    
  3. Skompiluj obraz i wdróż go w usłudze AKS lub ACI. Aby uzyskać więcej informacji, zobacz Jak wdrożyć i gdzie.

Wyłączanie śledzenia w języku Python

Aby wyłączyć aplikacja systemu Azure Insights, użyj następującego kodu:

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

Konfigurowanie rejestrowania przy użyciu Azure Machine Learning studio

Możesz również włączyć aplikacja systemu Azure Insights z poziomu Azure Machine Learning studio. Gdy wszystko będzie gotowe do wdrożenia modelu jako usługi internetowej, wykonaj następujące kroki, aby włączyć usługę Application Insights:

  1. Zaloguj się do studia pod adresem https://ml.azure.com.

  2. Przejdź do pozycji Modele i wybierz model, który chcesz wdrożyć.

  3. Wybierz pozycję +Wdróż.

  4. Wypełnij formularz Wdrażanie modelu .

  5. Rozwiń menu Zaawansowane .

    Wdrażanie formularza

  6. Wybierz pozycję Włącz diagnostykę i zbieranie danych usługi Application Insights.

    Włączanie usługi App Insights

Wyświetlanie metryk i dzienników

Wykonywanie zapytań dotyczących dzienników dla wdrożonych modeli

Dzienniki punktów końcowych online to dane klientów. Możesz użyć get_logs() funkcji , aby pobrać dzienniki z wcześniej wdrożonej usługi internetowej. Dzienniki mogą zawierać szczegółowe informacje o błędach, które wystąpiły podczas wdrażania.

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żaw, może być konieczne dodanie następującego kodu uwierzytelniania przed 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 studio

aplikacja systemu Azure Insights przechowuje dzienniki usługi w tej samej grupie zasobów co obszar roboczy usługi Azure Machine Learning. Aby wyświetlić dane przy użyciu programu Studio, wykonaj następujące czynności:

  1. Przejdź do obszaru roboczego usługi Azure Machine Learning w programie Studio.

  2. Wybierz pozycję Punkty końcowe.

  3. Wybierz wdrożona usługę.

  4. Wybierz link Adres URL usługi Application Insights .

    Lokalizowanie adresu URL usługi Application Insights

  5. W usłudze Application Insights na karcie Przegląd lub w sekcji Monitorowanie wybierz pozycję Dzienniki.

    Karta Przegląd monitorowania

  6. Aby wyświetlić informacje zarejestrowane w pliku score.py, zapoznaj się z tabelą traces . Następujące zapytanie wyszukuje dzienniki, w których zarejestrowano wartość wejściową :

    traces
    | where customDimensions contains "input"
    | limit 10
    

    dane śledzenia

Aby uzyskać więcej informacji na temat korzystania z usługi aplikacja systemu Azure Insights, zobacz Co to jest usługa Application Insights?.

Metadane i dane odpowiedzi usługi internetowej

Ważne

aplikacja systemu Azure Insights rejestruje tylko ładunki do 64 kb. Jeśli ten limit zostanie osiągnięty, mogą pojawić się błędy, takie jak brak pamięci lub nie są rejestrowane żadne informacje.

Aby rejestrować informacje o żądaniu usługi internetowej, dodaj print instrukcje do pliku score.py. Każda print instrukcja powoduje wyświetlenie jednego wpisu w tabeli śledzenia usługi Application Insights pod komunikatem STDOUT. Usługa Application Insights przechowuje print dane wyjściowe instrukcji w customDimensions tabeli śledzenia i w tabeli Contents śledzenia. Drukowanie ciągów JSON tworzy hierarchiczną strukturę danych w danych wyjściowych śledzenia w obszarze Contents.

Eksportowanie danych do przechowywania i przetwarzania

Ważne

aplikacja systemu Azure Insights obsługuje tylko eksporty do magazynu obiektów blob. Aby uzyskać więcej informacji na temat limitów tej implementacji, zobacz Eksportowanie danych telemetrycznych z usługi App Insights.

Eksportowanie ciągłe usługi Application Insights umożliwia eksportowanie danych do konta magazynu obiektów blob, na którym można zdefiniować ustawienia przechowywania. Usługa Application Insights eksportuje dane w formacie JSON.

Eksport ciągły

Następne kroki

W tym artykule przedstawiono sposób włączania rejestrowania i wyświetlania dzienników dla punktów końcowych usługi internetowej. Wypróbuj następujące artykuły, aby uzyskać następne kroki: