Monitorizar e recolher dados de pontos finais de serviço Web de ML
APLICA-SE A: Python SDK azureml v1
Neste artigo, você aprenderá a coletar dados de modelos implantados em pontos de extremidade de serviço Web no Serviço Kubernetes do Azure (AKS) ou nas Instâncias de Contêiner do Azure (ACI). Use o Azure Application Insights para coletar os seguintes dados de um ponto de extremidade:
- Dados de saída
- Respostas
- Taxas de pedido, tempos de resposta e taxas de insucesso
- Taxas de dependência, tempos de resposta e taxas de insucesso
- Exceções
O bloco de anotações enable-app-insights-in-production-service.ipynb demonstra conceitos neste artigo.
Saiba como executar blocos de notas ao seguir o artigo Utilizar blocos de notas Jupyter para explorar este serviço.
Importante
As informações neste artigo dependem da instância do Azure Application Insights que foi criada com seu espaço de trabalho. Se você excluiu essa instância do Application Insights, não há como recriá-la além de excluir e recriar o espaço de trabalho.
Gorjeta
Se, em vez disso, você estiver usando pontos de extremidade online, use as informações no artigo Monitorar pontos de extremidade online.
Pré-requisitos
Uma subscrição do Azure - experimente a versão gratuita ou paga do Azure Machine Learning.
Um espaço de trabalho do Azure Machine Learning, um diretório local que contém seus scripts e o SDK do Azure Machine Learning para Python instalado. Para saber mais, consulte Como configurar um ambiente de desenvolvimento.
Um modelo de aprendizagem automática treinado. Para saber mais, consulte o tutorial Modelo de classificação de imagens de trem.
Configurar o registro em log com o SDK do Python
Nesta seção, você aprenderá a habilitar o log do Application Insight usando o SDK do Python.
Atualizar um serviço implantado
Use as seguintes etapas para atualizar um serviço Web existente:
Identifique o serviço em seu espaço de trabalho. O valor for
ws
é o nome do seu espaço de trabalhofrom azureml.core.webservice import Webservice aks_service= Webservice(ws, "my-service-name")
Atualize seu serviço e habilite o Azure Application Insights
aks_service.update(enable_app_insights=True)
Registrar rastreamentos personalizados em seu serviço
Importante
O Azure Application Insights registra apenas cargas úteis de até 64 kb. Se esse limite for atingido, você poderá ver erros como falta de memória ou nenhuma informação poderá ser registrada. Se os dados que você deseja registrar forem maiores de 64 kb, você deve armazená-los no armazenamento de blob usando as informações em Coletar dados para modelos em produção.
Para situações mais complexas, como rastreamento de modelo em uma implantação do AKS, recomendamos o uso de uma biblioteca de terceiros como o OpenCensus.
Para registrar rastreamentos personalizados, siga o processo de implantação padrão para AKS ou ACI no documento Como implantar e onde . Em seguida, use as seguintes etapas:
Atualize o arquivo de pontuação adicionando instruções de impressão para enviar dados ao Application Insights durante a inferência. Para obter informações mais complexas, como os dados da solicitação e a resposta, use uma estrutura JSON.
O arquivo de exemplo
score.py
a seguir registra quando o modelo foi inicializado, entrada e saída durante a inferência e a hora em que ocorrem erros.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
Atualize a configuração do serviço e certifique-se de ativar o Application Insights.
config = Webservice.deploy_configuration(enable_app_insights=True)
Crie uma imagem e implante-a no AKS ou ACI. Para obter mais informações, consulte Como implantar e onde.
Desativar rastreamento em Python
Para desabilitar o Azure Application Insights, use o seguinte código:
## replace <service_name> with the name of the web service
<service_name>.update(enable_app_insights=False)
Configurar o registo com o estúdio do Azure Machine Learning
Você também pode habilitar o Azure Application Insights do estúdio do Azure Machine Learning. Quando estiver pronto para implantar seu modelo como um serviço Web, use as seguintes etapas para habilitar o Application Insights:
Entre no estúdio em https://ml.azure.com.
Vá para Modelos e selecione o modelo que deseja implantar.
Selecione +Implantar.
Preencha o formulário Implantar modelo .
Expanda o menu Avançado .
Selecione Ativar diagnóstico e coleta de dados do Application Insights.
Visualizar métricas e logs
Logs de consulta para modelos implantados
Os logs de endpoints online são dados do cliente. Você pode usar a get_logs()
função para recuperar logs de um serviço Web implantado anteriormente. Os logs podem conter informações detalhadas sobre quaisquer erros que ocorreram durante a implantação.
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()
Se você tiver vários Locatários, talvez seja necessário adicionar o seguinte código de autenticação antes ws = Workspace.from_config()
from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="the tenant_id in which your workspace resides")
Ver registos no estúdio
O Azure Application Insights armazena seus logs de serviço no mesmo grupo de recursos que o espaço de trabalho do Azure Machine Learning. Use as seguintes etapas para visualizar seus dados usando o estúdio:
Vá para seu espaço de trabalho do Azure Machine Learning no estúdio.
Selecione Pontos finais.
Selecione o serviço implantado.
Selecione o link URL do Application Insights.
No Application Insights, na guia Visão geral ou na seção Monitoramento , selecione Logs.
Para exibir as informações registradas do arquivo score.py, examine a tabela de rastreamentos. A consulta a seguir procura logs onde o valor de entrada foi registrado:
traces | where customDimensions contains "input" | limit 10
Para obter mais informações sobre como usar o Azure Application Insights, consulte O que é o Application Insights?.
Metadados do serviço Web e dados de resposta
Importante
O Azure Application Insights registra apenas cargas úteis de até 64 kb. Se esse limite for atingido, você poderá ver erros como falta de memória ou nenhuma informação poderá ser registrada.
Para registrar informações de solicitação de serviço Web, adicione print
instruções ao seu arquivo score.py. Cada print
instrução resulta em uma entrada na tabela de rastreamento do Application Insights sob a mensagem STDOUT
. O Application Insights armazena Contents
as print
saídas da instrução na customDimensions
tabela de rastreamento. A impressão de cadeias de caracteres JSON produz uma estrutura de dados hierárquica na saída de rastreamento em Contents
.
Exportar dados para retenção e processamento
Importante
O Azure Application Insights só suporta exportações para armazenamento de blobs. Para obter mais informações sobre os limites dessa implementação, consulte Exportar telemetria do App Insights.
Use a exportação contínua do Application Insights para exportar dados para uma conta de armazenamento de blobs onde você pode definir configurações de retenção. O Application Insights exporta os dados no formato JSON.
Próximos passos
Neste artigo, você aprendeu como habilitar o registro em log e exibir logs para pontos de extremidade de serviço Web. Experimente estes artigos para os próximos passos:
Como implantar um modelo em instâncias de contêiner do Azure
MLOps: gerencie, implante e monitore modelos com o Aprendizado de Máquina do Azure para saber mais sobre como aproveitar os dados coletados de modelos em produção. Esses dados podem ajudar a melhorar continuamente seu processo de aprendizado de máquina.