Partilhar via


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

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:

  1. Identifique o serviço em seu espaço de trabalho. O valor for ws é o nome do seu espaço de trabalho

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

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

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

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

  2. Vá para Modelos e selecione o modelo que deseja implantar.

  3. Selecione +Implantar.

  4. Preencha o formulário Implantar modelo .

  5. Expanda o menu Avançado .

    Implantar formulário

  6. Selecione Ativar diagnóstico e coleta de dados do Application Insights.

    Ativar o App 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:

  1. Vá para seu espaço de trabalho do Azure Machine Learning no estúdio.

  2. Selecione Pontos finais.

  3. Selecione o serviço implantado.

  4. Selecione o link URL do Application Insights.

    Localize o URL do Application Insights

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

    Guia Visão geral do monitoramento

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

    dados de rastreio

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.

Continuous export (Exportação contínua)

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: