Se Övervaka och samla in data från webbtjänstslutpunkter i ML
GÄLLER FÖR: Python SDK azureml v1
I den här artikeln får du lära dig hur du samlar in data från modeller som distribueras till webbtjänstslutpunkter i Azure Kubernetes Service (AKS) eller Azure Container Instances (ACI). Använd Azure Application Insights för att samla in följande data från en slutpunkt:
- Utdata
- Svar
- Begärandefrekvens, svarstid och felfrekvens
- Beroendefrekvens, svarstid och felfrekvens
- Undantag
Notebook-filen enable-app-insights-in-production-service.ipynb visar begrepp i den här artikeln.
Lär dig att köra notebook-filer genom att följa artikeln Använda Jupyter-notebooks till att utforska tjänsten.
Viktigt!
Informationen i den här artikeln förlitar sig på Azure Application Insights-instansen som skapades med din arbetsyta. Om du har tagit bort den här Application Insights-instansen finns det inget annat sätt att återskapa den än att ta bort och återskapa arbetsytan.
Dricks
Om du använder onlineslutpunkter i stället använder du informationen i artikeln Övervaka onlineslutpunkter i stället.
Förutsättningar
En Azure-prenumeration – prova den kostnadsfria eller betalda versionen av Azure Machine Learning.
En Azure Machine Learning-arbetsyta, en lokal katalog som innehåller dina skript och Azure Machine Learning SDK för Python installerat. Mer information finns i Konfigurera en utvecklingsmiljö.
En tränad maskininlärningsmodell. Mer information finns i självstudien Träna bildklassificeringsmodell .
Konfigurera loggning med Python SDK
I det här avsnittet får du lära dig hur du aktiverar Application Insight-loggning med hjälp av Python SDK.
Uppdatera en distribuerad tjänst
Följ stegen nedan för att uppdatera en befintlig webbtjänst:
Identifiera tjänsten på din arbetsyta. Värdet för
ws
är namnet på din arbetsytafrom azureml.core.webservice import Webservice aks_service= Webservice(ws, "my-service-name")
Uppdatera din tjänst och aktivera Azure Application Insights
aks_service.update(enable_app_insights=True)
Logga anpassade spårningar i din tjänst
Viktigt!
Azure Application Insights loggar endast nyttolaster på upp till 64 kB. Om den här gränsen har nåtts kan det hända att du ser fel som slut på minne, eller så kan ingen information loggas. Om de data du vill logga är större än 64 kB bör du i stället lagra dem i bloblagring med hjälp av informationen i Samla in data för modeller i produktion.
För mer komplexa situationer, till exempel modellspårning i en AKS-distribution, rekommenderar vi att du använder ett bibliotek från tredje part som OpenCensus.
Om du vill logga anpassade spårningar följer du standarddistributionsprocessen för AKS eller ACI i dokumentet Så här distribuerar du och var . Använd sedan följande steg:
Uppdatera bedömningsfilen genom att lägga till utskriftsuttryck för att skicka data till Application Insights under slutsatsdragningen. Om du vill ha mer komplex information, till exempel begärandedata och svaret, använder du en JSON-struktur.
Följande exempelfilloggar
score.py
när modellen initierades, indata och utdata under slutsatsdragningen och den tid då fel inträffar.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
Uppdatera tjänstkonfigurationen och se till att aktivera Application Insights.
config = Webservice.deploy_configuration(enable_app_insights=True)
Skapa en avbildning och distribuera den på AKS eller ACI. Mer information finns i Hur och var man distribuerar.
Inaktivera spårning i Python
Om du vill inaktivera Azure Application Insights använder du följande kod:
## replace <service_name> with the name of the web service
<service_name>.update(enable_app_insights=False)
Konfigurera loggning med Azure Machine Learning-studio
Du kan också aktivera Azure Application Insights från Azure Machine Learning-studio. När du är redo att distribuera din modell som en webbtjänst använder du följande steg för att aktivera Application Insights:
Logga in i studion på https://ml.azure.com.
Gå till Modeller och välj den modell som du vill distribuera.
Välj +Distribuera.
Fyll i formuläret Distribuera modell .
Expandera menyn Avancerat .
Välj Aktivera Application Insights-diagnostik och datainsamling.
Visa mått och loggar
Frågeloggar för distribuerade modeller
Loggar för onlineslutpunkter är kunddata. Du kan använda get_logs()
funktionen för att hämta loggar från en tidigare distribuerad webbtjänst. Loggarna kan innehålla detaljerad information om eventuella fel som uppstod under distributionen.
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()
Om du har flera klienter kan du behöva lägga till följande autentiseringskod innan ws = Workspace.from_config()
from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="the tenant_id in which your workspace resides")
Visa loggar i studion
Azure Application Insights lagrar dina tjänstloggar i samma resursgrupp som Azure Machine Learning-arbetsytan. Använd följande steg för att visa dina data med hjälp av studio:
Gå till din Azure Machine Learning-arbetsyta i studion.
Välj slutpunkter.
Välj den distribuerade tjänsten.
Välj url-länken för Application Insights.
I Application Insights går du till fliken Översikt eller avsnittet Övervakning och väljer Loggar.
Om du vill visa information som loggats från filen score.py tittar du på spårningstabellen. Följande fråga söker efter loggar där indatavärdet loggades:
traces | where customDimensions contains "input" | limit 10
Mer information om hur du använder Azure Application Insights finns i Vad är Application Insights?.
Webbtjänstmetadata och svarsdata
Viktigt!
Azure Application Insights loggar endast nyttolaster på upp till 64 kB. Om den här gränsen nås kan du se fel som slut på minne eller så kan ingen information loggas.
Om du vill logga information om webbtjänstbegäran lägger du till print
instruktioner i din score.py-fil. Varje print
instruktion resulterar i en post i application insights-spårningstabellen under meddelandet STDOUT
. Application Insights lagrar instruktionens print
utdata i customDimensions
och i spårningstabellen Contents
. När du skriver ut JSON-strängar skapas en hierarkisk datastruktur i spårningsutdata under Contents
.
Exportera data för kvarhållning och bearbetning
Viktigt!
Azure Application Insights stöder endast export till bloblagring. Mer information om gränserna för den här implementeringen finns i Exportera telemetri från App Insights.
Använd Application Insights kontinuerliga export för att exportera data till ett bloblagringskonto där du kan definiera kvarhållningsinställningar. Application Insights exporterar data i JSON-format.
Nästa steg
I den här artikeln har du lärt dig hur du aktiverar loggning och visar loggar för webbtjänstslutpunkter. Prova följande artiklar för nästa steg:
Så här distribuerar du en modell till Azure Container Instances
MLOps: Hantera, distribuera och övervaka modeller med Azure Machine Learning för att lära dig mer om att utnyttja data som samlats in från modeller i produktion. Sådana data kan hjälpa dig att kontinuerligt förbättra din maskininlärningsprocess.