Monitorar e coletar dados de pontos de extremidade de serviço Web do ML
APLICA-SE A: SDK do Python azureml v1
Neste artigo, saiba como coletar dados de modelos implantados em pontos de extremidade de serviço Web no AKS (Serviço de Kubernetes do Azure) ou nas ACI (Instâncias de Contêiner do Azure). Use o Azure Application Insights para coletar os seguintes dados de um ponto de extremidade:
- Dados de saída
- Respostas
- As taxas, tempos de resposta e taxas de falha de solicitação
- Taxas de dependência, tempos de resposta e taxas de falha
- Exceções
O bloco de anotações enable-app-insights-in-production-service.ipynb demonstra conceitos neste artigo.
Saiba como executar notebooks seguindo o artigo Usar os notebooks do Jupyter para explorar esse serviço.
Importante
As informações neste artigo dependem da instância de Application Insights do Azure que foi criada com seu espaço de trabalho. Se você excluiu essa instância de Application Insights, não há como recriá-la além de excluir e recriar o espaço de trabalho.
Dica
Se você estiver usando pontos de extremidade online, use as informações no artigo Monitorar pontos de extremidade online.
Pré-requisitos
Uma assinatura do Azure - experimente a versão gratuita ou paga do Azure Machine Learning.
Um workspace do Azure Machine Learning, um diretório local que contém seus scripts e o SDK de Aprendizado de Máquina do Azure para Python instalado. Para saber mais, consulte Como configurar um ambiente de desenvolvimento.
Um modelo de aprendizado de máquina treinado. Para saber mais, consulte o tutorial Modelo de classificação de imagem de trem.
Configurar registro em log com o SDK do Python
Nesta seção, você aprenderá a habilitar o registro em log do Application Insights usando o SDK do Python.
Atualizar um serviço implantado
Use as etapas a seguir para atualizar um serviço Web existente:
Identificar o serviço no seu workspace. O valor de
ws
é o nome do seu workspacefrom azureml.core.webservice import Webservice aks_service= Webservice(ws, "my-service-name")
Atualizar seu serviço e habilitar o Azure Application Insights
aks_service.update(enable_app_insights=True)
Rastreamentos de log personalizados em seu serviço
Importante
O Azure Application Insights registra apenas os conteúdos de até 64 KB. Se esse limite for atingido, você poderá ver erros como memória insuficiente, ou nenhuma informação pode ser registrada. Se os dados que você deseja registrar forem maiores 64 que KB, você deverá 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 de AKS, é recomendável usar uma biblioteca de terceiros, como OpenCensus.
Para registrar rastreamentos personalizados, siga o processo de implantação padrão para AKS ou ACI no documento Como e onde implantar. Em seguida, execute as seguintes etapas:
Atualize o arquivo de pontuação adicionando instruções de impressão para enviar dados para o Application Insights durante a inferência. Para obter informações mais complexas, como os dados de solicitação e a resposta, use uma estrutura JSON.
O arquivo de exemplo a seguir
score.py
registra quando o modelo foi inicializado, a entrada e a saída durante a inferência e a hora de ocorrência de 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 habilitar o Application Insights.
config = Webservice.deploy_configuration(enable_app_insights=True)
Criar uma imagem e implantá-lo no AKS ou ACI. Para obter mais informações, confira Como e em que local implantar.
Desabilitar o controle 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 registro em log com o Estúdio do Azure Machine Learning
Você também pode habilitar o Azure Application Insights a partir do Estúdio do Azure Machine Learning. Quando você 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 você deseja implantar.
Escolha +Implantar.
Preencha o formulário Implantar modelo.
Expanda o menu Avançado.
Selecione Habilitar o diagnóstico e a coleta de dados do Application Insights.
Exibir métricas e logs
Logs de consulta para modelos implantados
Os logs de pontos de extremidade online são dados do cliente. Você pode usar a função get_logs()
para recuperar logs de um serviço Web implantado anteriormente. Os logs podem conter informações detalhadas sobre quaisquer erros ocorridos 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")
Exibir logs no estúdio
O Azure Application Insights armazena seus logs de serviço no mesmo grupo de recursos que o workspace do Azure Machine Learning. Use as etapas a seguir para exibir seus dados usando o estúdio:
Acesse o workspace do Azure Machine Learning no estúdio.
Selecione Pontos de extremidade.
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 informações registradas no arquivo score.py, examine a tabela de rastreamentos. A consulta a seguir procura logs em que o valor de entrada foi registrado:
traces | where customDimensions contains "input" | limit 10
Para obter mais informações sobre como usar o Aplicativo Azure Insights, consulte O que é Application Insights?.
Metadados do serviço Web e dados de resposta
Importante
O Azure Application Insights registra apenas os conteúdos de até 64 KB. Se esse limite for atingido, você poderá ver erros como memória insuficiente, ou nenhuma informação pode ser registrada.
Para registrar informações de solicitação de serviço Web, adicione print
instruções ao arquivo score.py. Cada instrução print
resulta em uma entrada na tabela de rastreamento do Application Insights sob a mensagem STDOUT
. O Application Insights armazena as saídas da instrução print
em customDimensions
e na tabela de rastreamento Contents
. 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ó dá suporte a exportações para o 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 em que você pode definir as configurações de retenção. O Application Insights exporta os dados no formato JSON.
Próximas etapas
Neste artigo, você aprendeu a habilitar o registro em log e exibir logs para pontos de extremidade de serviço Web. Experimente estes artigos para as próximas etapas:
Como implantar um modelo nas Instâncias de Contêiner do Azure
MLOps: gerencie, implante e monitore modelos com Azure Machine Learning para saber mais sobre como aproveitar os dados coletados de modelos em produção. Esses dados podem ajudar a melhorar continuamente o processo de aprendizado de máquina.