Monitorar e coletar dados de pontos de extremidade de serviço Web do ML

APLICA-SE A:azureml do SDK do Python 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

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:

  1. Identificar o serviço no seu workspace. O valor de ws é o nome do seu workspace

    from azureml.core.webservice import Webservice
    aks_service= Webservice(ws, "my-service-name")
    
  2. 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:

  1. 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
    
  2. Atualize a configuração do serviço e certifique-se de habilitar o Application Insights.

    config = Webservice.deploy_configuration(enable_app_insights=True)
    
  3. 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:

  1. Entre no estúdio em https://ml.azure.com.

  2. Vá para modelos e selecione o modelo que você deseja implantar.

  3. Escolha +Implantar.

  4. Preencha o formulário Implantar modelo.

  5. Expanda o menu Avançado.

    Implantar formulário

  6. Selecione Habilitar o diagnóstico e a coleta de dados do Application Insights.

    Habilitar App 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:

  1. Acesse o workspace do Azure Machine Learning no estúdio.

  2. Selecione Pontos de extremidade.

  3. Selecione o serviço implantado.

  4. Selecione o link URL do Application insights.

    Localizar URL do Application Insights

  5. No Application Insights, na guia Visão Geral ou na seção Monitoramento, selecione Logs.

    Guia Visão Geral de monitoramento

  6. 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
    

    Dados de rastreamento

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.

Exportação contínua

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: