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:
Zidentyfikuj usługę w obszarze roboczym. Wartość parametru
ws
to nazwa obszaru roboczegofrom azureml.core.webservice import Webservice aks_service= Webservice(ws, "my-service-name")
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:
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
Zaktualizuj konfigurację usługi i upewnij się, że włączono usługę Application Insights.
config = Webservice.deploy_configuration(enable_app_insights=True)
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:
Zaloguj się do studia pod adresem https://ml.azure.com.
Przejdź do pozycji Modele i wybierz model, który chcesz wdrożyć.
Wybierz pozycję +Wdróż.
Wypełnij formularz Wdrażanie modelu.
Rozwiń menu Zaawansowane.
Wybierz pozycję Włącz diagnostykę i zbieranie danych usługi Application 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:
Przejdź do obszaru roboczego usługi Azure Machine Learning w programie Studio.
Wybierz Punkty końcowe.
Wybierz wdrożona usługę.
Wybierz link Adres URL usługi Application Insights.
W usłudze Application Insights na karcie Przegląd lub w sekcji Monitorowanie wybierz pozycję Dzienniki.
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
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.
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:
Metodyka MLOps: zarządzanie modelami, wdrażanie i monitorowanie ich za pomocą usługi Azure Machine Learning , aby dowiedzieć się więcej na temat korzystania z danych zebranych z modeli w środowisku produkcyjnym. Takie dane mogą pomóc w ciągłym ulepszaniu procesu uczenia maszynowego.