Implementación de paquetes de modelos en puntos de conexión en línea (versión preliminar)

El paquete de modelos es una función de Azure Machine Learning que permite recopilar todas las dependencias necesarias para implementar un modelo de aprendizaje automático en una plataforma de servicio. La creación de paquetes antes de implementar los modelos proporciona una implementación sólida y fiable y un flujo de trabajo de MLOps más eficaz. Los paquetes pueden moverse entre áreas de trabajo e incluso fuera de Azure Machine Learning. Obtenga más información sobre Paquetes de modelo (versión preliminar)

Importante

Esta característica actualmente está en su versión preliminar pública. Esta versión preliminar se ofrece sin un Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas.

Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

En este artículo, aprenderá a empaquetar un modelo e implementarlo en un punto de conexión en línea en Azure Machine Learning.

Requisitos previos

Antes de seguir los pasos de este artículo, asegúrese de que tiene los siguientes requisitos previos:

Acerca de este ejemplo

En este ejemplo, se empaqueta un modelo de tipo personalizado y se implementa en un punto de conexión en línea para la inferencia en línea.

El ejemplo de este artículo se basa en ejemplos de código incluidos en el repositorio azureml-examples. Para ejecutar los comandos de forma local sin tener que copiar/pegar YAML y otros archivos, primero clona el repositorio y luego cambia los directorios a la carpeta:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

Esta sección utiliza el ejemplo de la carpeta endpoints/online/deploy-packages/custom-model.

Conexión con su área de trabajo

Conéctese al área de trabajo de Azure Machine Learning donde realizará su trabajo.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Empaquetar el modelo

Puede crear paquetes de modelos explícitamente para poder controlar cómo se realiza la operación de empaquetado. Puede crear paquetes de modelos especificando el:

  • Modelo para empaquetar: cada paquete de modelo solo puede contener un único modelo. Azure Machine Learning no permite empaquetar varios modelos en el mismo paquete de modelos.
  • Entorno base: los entornos son utilizan para indicar la imagen de base, y en los paquetes de Python dependencias que el modelo necesita. Para los modelos MLflow, Azure Machine Learning genera automáticamente el entorno base. Para los modelos personalizados, es necesario especificarlo.
  • Tecnología de servicio: la pila de inferencia utilizada para ejecutar el modelo.

Sugerencia

Si su modelo es MLflow, no necesita crear el paquete del modelo manualmente. Podemos empaquetar automáticamente antes de la implementación. Consulte Implementación de modelos MLflow en puntos de conexión en línea.

  1. Los paquetes de modelos requieren que el modelo esté registrado en su área de trabajo o en un registro de Azure Machine Learning. En este ejemplo, ya tiene una copia local del modelo en el repositorio, por lo que solo necesita publicar el modelo en el registro del área de trabajo. Puede omitir esta sección si el modelo que intenta implementar ya está registrado.

    MODEL_NAME='sklearn-regression'
    MODEL_PATH='model'
    az ml model create --name $MODEL_NAME --path $MODEL_PATH --type custom_model
    
  2. Nuestro modelo requiere los siguientes paquetes para ejecutarse y los tenemos especificados en un archivo conda:

    conda.yaml

    name: model-env
    channels:
      - conda-forge
    dependencies:
      - python=3.9
      - numpy=1.23.5
      - pip=23.0.1
      - scikit-learn=1.2.2
      - scipy=1.10.1
      - xgboost==1.3.3
    

    Nota:

    Observe cómo solo los requisitos del modelo se indican en el conda YAML. Cualquier paquete necesario para el servidor de inferencias será incluido por la operación paquete.

    Sugerencia

    Si su modelo requiere paquetes alojados en fuentes privadas, puede configurar su paquete para incluirlos. Leer Empaquetar un modelo que tiene dependencias en fuentes privadas de Python.

  3. Cree un entorno base que contenga los requisitos del modelo y una imagen base. En el entorno base solo se indican las dependencias que requiere su modelo. Para los modelos MLflow, el entorno base es opcional, en cuyo caso Azure Machine Learning lo genera de forma automática por usted.

    Cree una definición de entorno base:

    sklearn-regression-env.yml

    $schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
    name: sklearn-regression-env
    image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
    conda_file: conda.yaml
    description: An environment for models built with XGBoost and Scikit-learn.
    

    A continuación, cree el entorno como se indica de la siguiente manera:

    az ml environment create -f environment/sklearn-regression-env.yml
    
  4. Cree una especificación del paquete:

    package-moe.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    base_environment_source:
        type: environment_asset
        resource_id: azureml:sklearn-regression-env:1
    target_environment: sklearn-regression-online-pkg
    inferencing_server: 
        type: azureml_online
        code_configuration:
          code: src
          scoring_script: score.py
    
  5. Inicie la operación de paquete modelo:

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  6. El resultado de la operación de empaquetado es un entorno.

Implementar el paquete modelo

Los paquetes de modelos pueden implementarse directamente en puntos de conexión en línea en Azure Machine Learning. Siga estos pasos para implementar un paquete en un punto de conexión en línea:

  1. Elija un nombre para un punto de conexión para alojar la implementación del paquete y créelo:

    ENDPOINT_NAME="sklearn-regression-online"
    
    az ml online-endpoint create -n $ENDPOINT_NAME
    
  2. Cree la implementación, utilizando el paquete. Observe cómo environment se configura con el paquete que ha creado.

    deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: with-package
    endpoint_name: hello-packages
    environment: azureml:sklearn-regression-online-pkg@latest
    instance_type: Standard_DS3_v2
    instance_count: 1
    

    Sugerencia

    Observe que no especifica el modelo ni el script de puntuación en este ejemplo; todos forman parte del paquete.

  3. Iniciar la implementación:

    az ml online-deployment create -f deployment.yml
    
  4. En este punto, la implementación está lista para consumirse. Puede probar cómo funciona creando un archivo de solicitud de muestra:

    sample-request.json

    {
        "data": [
            [1,2,3,4,5,6,7,8,9,10], 
            [10,9,8,7,6,5,4,3,2,1]
        ]
    }
    
  5. Envíe la solicitud al punto de conexión

    az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment with-package -r sample-request.json
    

Paso siguiente