Supervisión y recopilación de datos de los puntos de conexión del servicio web ML

SE APLICA A:Azure ML del SDK de Python v1

En este artículo, aprenderá a recopilar datos de modelos implementados en los puntos de conexión de servicio en Azure Kubernetes Service (AKS) o Azure Container Instances (ACI). Use Azure Application Insights para recopilar los datos siguientes de un punto de conexión:

  • Datos de salida
  • Respuestas
  • Tasas de solicitudes, tiempos de respuesta y tasas de error
  • Tasas de dependencias, tiempos de respuesta y tasas de error
  • Excepciones

El cuaderno enable-app-insights-in-production-service.ipynb muestra los conceptos de este artículo.

Siga las instrucciones del artículo Exploración de Azure Machine Learning con cuadernos de Jupyter para aprender a ejecutar cuadernos.

Importante

La información de este artículo se basa en la instancia de Azure Application Insights que se creó con el área de trabajo. Si eliminó esta instancia de Application Insights, no hay otra manera de volver a crearla que eliminar y volver a crear el área de trabajo.

Sugerencia

Si usa puntos de conexión en línea, utilice la información del artículo Supervisión de puntos de conexión en línea en su lugar.

Requisitos previos

Configuración del registro con el SDK de Python

En esta sección, aprenderá a habilitar el registro de Application Insights mediante el SDK de Python.

Actualización de un servicio implementado

Para actualizar un servicio web existente, siga estos pasos:

  1. Identifique el servicio en el área de trabajo. El valor de ws es el nombre del área de trabajo.

    from azureml.core.webservice import Webservice
    aks_service= Webservice(ws, "my-service-name")
    
  2. Actualice el servicio y habilite Azure Application Insights.

    aks_service.update(enable_app_insights=True)
    

Registro de seguimientos personalizados del servicio

Importante

Azure Application Insights solo registra cargas de hasta 64 kb. Si se alcanza este límite, puede que vea errores como memoria insuficiente o que no se registre ninguna información. Si los datos que desea registrar tienen más de 64 kB, debe almacenarlos en el almacenamiento de blobs usando la información de Recopilar datos de modelos en producción.

En situaciones más complejas, como el seguimiento de modelos en una implementación de AKS, se recomienda usar una biblioteca de terceros, como OpenCensus.

Para registrar seguimientos personalizados, siga el proceso de implementación estándar de AKS o ACI en el documento sobre Cómo realizar la implementación y dónde. Después, siga estos pasos:

  1. Para enviar datos a Application Insights durante la inferencia, actualice el archivo de puntuación agregando las instrucciones PRINT. Para información más compleja, como los datos de la solicitud y la respuesta, use una estructura JSON.

    En el siguiente ejemplo de archivo score.py se registra la hora en que se inicializa el modelo, la entrada y la salida durante la inferencia, y la hora en que se produjeron los errores.

    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. Actualice la configuración del servicio y asegúrese de habilitar Application Insights.

    config = Webservice.deploy_configuration(enable_app_insights=True)
    
  3. Cree una imagen e impleméntela en AKS o ACI. Para obtener más información, consulte cómo y dónde realizar la implementación.

Deshabilitación del seguimiento en Python

Para deshabilitar Azure Application Insights, use el siguiente código:

## replace <service_name> with the name of the web service
<service_name>.update(enable_app_insights=False)

Configuración del registro con Azure Machine Learning Studio

También puede habilitar Azure Application Insights desde Azure Machine Learning Studio. Cuando esté listo para implementar el modelo como un servicio web, siga estos pasos para habilitar Application Insights:

  1. Inicie sesión en Studio en https://ml.azure.com.

  2. Vaya a Modelos y seleccione el modelo que quiere implementar.

  3. Seleccione +Implementar.

  4. Rellene el formulario Implementar modelo.

  5. Expanda el menú Opciones avanzadas.

    Implementar modelo

  6. Seleccione Habilitar la recopilación de datos y el diagnóstico de Application Insights.

    Habilitar Application Insights

Visualización de métricas y registros

Consulta de registros para modelos implementados

Los registros de puntos de conexión en línea son datos de cliente. Para recuperar los registros de un servicio web implementado anteriormente, puede usar la función get_logs(). Los registros pueden contener información detallada sobre los errores que se produjeron durante la implementación.

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()

Si hay varios inquilinos, es posible que tenga que agregar el siguiente código de autenticación antes de ws = Workspace.from_config()

from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="the tenant_id in which your workspace resides")

Ver registros en Studio

Azure Application Insights almacena los registros del servicio en el mismo grupo de recursos del área de trabajo de Azure Machine Learning. Use los siguientes pasos para ver los datos con Studio:

  1. Vaya al área de trabajo de Azure Machine Learning en Studio.

  2. Seleccione Puntos de conexión.

  3. Seleccione el servicio implementado.

  4. Seleccione el vínculo de dirección URL de Application Insights.

    Localizar la dirección URL de Application Insights

  5. En Application Insights, en la pestaña Información general o en la sección Supervisión, seleccione Registros.

    Pestaña Información general de supervisión

  6. Para ver la información registrada en el archivo score.py, examine la tabla de seguimientos. La siguiente consulta busca registros en los que se registró el valor de entrada:

    traces
    | where customDimensions contains "input"
    | limit 10
    

    datos de seguimiento

Para más información sobre el uso de Azure Application Insights, consulte ¿Qué es Application Insights?.

Metadatos de servicio web y datos de respuesta

Importante

Azure Application Insights solo registra cargas de hasta 64 kb. Si se alcanza este límite, puede que vea errores como memoria insuficiente o que no se registre ninguna información.

Para registrar la información de una solicitud de servicio web, agregue instrucciones print al archivo score.py. Cada instrucción print genera una entrada en la tabla de seguimientos de Application Insights, en el mensaje STDOUT. Application Insights almacena las salidas de la instrucción print en customDimensions y en la tabla de seguimiento de Contents. Si imprime cadenas JSON, se genera una estructura de datos jerárquica en el resultado de seguimientos, en Contents.

Exportación de datos para su retención y procesamiento

Importante

Azure Application Insights solo admite exportaciones a Blob Storage. Para más información sobre los límites de esta implementación, consulte Exportación de datos de telemetría desde App Insights.

Use la opción de exportación continua de Application Insights para exportar datos a una cuenta de almacenamiento de blobs donde pueda definir la configuración de retención. Application Insights exporta los datos en formato JSON.

Exportación continua

Pasos siguientes

En este artículo, aprendió a habilitar el registro y ver los registros de los puntos de conexión del servicio web. Pruebe estos artículos para conocer los pasos siguientes: