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

Notes enable-app-insights-in-production-service.ipynb przedstawia 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 innego niż usunięcie i ponowne utworzenie obszaru roboczego.

Napiwek

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

Wymagania wstępne

  • Subskrypcja platformy Azure — wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Learning.

  • Obszar roboczy usługi Azure Machine Learning, katalog lokalny zawierający skrypty i zainstalowany zestaw SDK usługi Azure Machine Learning dla języka Python. Aby dowiedzieć się więcej, zobacz Jak skonfigurować środowisko deweloperskie.

  • Wytrenowany model uczenia maszynowego. Aby dowiedzieć się więcej, zobacz samouczek Trenowanie modelu klasyfikacji obrazów.

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 czynności:

  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 tylko rejestruje ł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, korzystając z informacji w 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 usługi AKS lub ACI w temacie How to deploy and where document (Jak wdrożyć i gdzie ). 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ższe przykładowe score.py dzienniki plików 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 i gdzie wdrażać modele.

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 za pomocą usługi Azure Machine Learning Studio

Możesz również włączyć aplikacja systemu Azure Insights w usłudze 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.

    Wdróż formularz

  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 wdrożonych modeli

Dzienniki punktów końcowych online to dane klientów. Funkcja służy do pobierania get_logs() dzienników z wcześniej wdrożonej usługi internetowej. Dzienniki mogą zawierać szczegółowe informacje o wszelkich 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 uwierzytelnienia 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 programie 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 Punkty końcowe.

  3. Wybierz wdrożona usługę.

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

    Znajdowanie 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ą śladów . 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 sieci Web

Ważne

aplikacja systemu Azure Insights tylko rejestruje ł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.

Eksport ciągły 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 wykonać następne kroki: