Creación de paquetes de modelos (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.
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 para la implementación.
Requisitos previos
Antes de seguir los pasos de este artículo, asegúrese de que tiene los siguientes requisitos previos:
Suscripción a Azure. Si no tiene una suscripción de Azure, cree una cuenta gratuita antes de empezar. Pruebe la versión gratuita o de pago de Azure Machine Learning.
Un área de trabajo de Azure Machine Learning. Si no tuvieras uno, sigue los pasos descritos en el artículo Cómo administrar áreas de trabajo para crear uno.
Los controles de acceso basado en rol de Azure (RBAC de Azure) se usan para conceder acceso a las operaciones en Azure Machine Learning. Para realizar los pasos de este artículo, su cuenta de usuario debe tener asignada la función de propietario o colaborador del área de trabajo de Azure Machine Learning, o una función personalizada. Para obtener más información, consulte Administración del acceso a un área de trabajo de Azure Machine Learning.
Modelo que se va a empaquetar. En este ejemplo, se usa un modelo de MLflow registrado en el área de trabajo.
Precaución
No se admite el empaquetado de modelos en el catálogo de modelos de Azure AI, incluidos los modelos de lenguaje grande. Los modelos del catálogo de modelos de Azure AI están optimizados para la inferencia en los destinos de implementación de Azure AI y no son adecuados para el empaquetado.
Acerca de este ejemplo
En este ejemplo, aprenderá a empaquetar modelos en Azure Machine Learning.
Clonación del repositorio
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>
Empaquetado de un modelo
Puede crear paquetes de modelos explícitamente para poder controlar cómo se realiza la operación de empaquetado. Use este flujo de trabajo cuando:
- Quiera personalizar cómo se crea el paquete de modelos.
- Quiera implementar el paquete de modelos fuera de Azure Machine Learning.
- Quiera usar paquetes de modelos en un flujo de trabajo de MLOps.
Puede crear paquetes de modelos especificando lo siguiente:
- 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.
Registro del modelo
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
Creación del entorno base
Los entornos base son utilizan para indicar la imagen de base y las dependencias del paquete Python modelo. Nuestro modelo requiere que se usen los siguientes paquetes como se indica en el archivo de 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:
¿Cuál es el entorno base diferente del entorno que se usa para la implementación de modelos en puntos de conexión en línea y por lotes? Al implementar modelos en puntos de conexión, el entorno debe incluir las dependencias del modelo y los paquetes de Python necesarios para que los puntos de conexión en línea administrados funcionen. Esto conlleva un proceso manual en la implementación, donde tiene que combinar los requisitos del modelo con los requisitos de la plataforma de servicio. Por otro lado, el uso de paquetes de modelo elimina esta fricción, ya que los paquetes necesarios para el servidor de inferencia se insertarán automáticamente en el paquete del modelo en el momento del empaquetado.
Crear el entorno de la siguiente manera:
Creación de una definición de entorno:
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.
Luego cree el entorno:
az ml environment create -f environment/sklearn-regression-env.yml
Creación de una especificación del paquete
Puede crear paquetes de modelo en Azure Machine Learning mediante la CLI de Azure o el SDK de Azure Machine Learning para Python. La especificación del paquete personalizado admite los siguientes atributos:
Atributo | Tipo | Descripción | Obligatorio |
---|---|---|---|
target_environment |
str |
El nombre del paquete que se va a crear. El resultado de la operación de empaquetado es un entorno en Azure Machine Learning. | Sí |
base_environment_source |
object |
La imagen base que se va a usar para crear el paquete donde se especifican las dependencias del modelo. | Sí, a menos que el modelo sea MLflow. |
base_environment_source.type |
str |
El tipo de la imagen base. Solo se admite el uso de otro entorno como imagen base (type: environment_asset ). |
|
base_environment_source.resource_id |
str |
El identificador de recurso del entorno base que se va a usar. Use el formato azureml:<name>:<version> o un identificador de recurso largo. |
|
inferencing_server |
object |
El servidor de inferencia que se va a usar. | Sí |
inferencing_server.type |
azureml_online custom |
Use azureml_online para el servidor de inferencia de Azure Machine Learning o custom para un servidor en línea personalizado, como TensorFlow Serving o Torch Serve. |
Sí |
inferencing_server.code_configuration |
object |
La configuración de código con la rutina de inferencia. Debe contener al menos un archivo de Python con métodos init y run . |
Sí, a menos que el modelo sea MLflow. |
model_configuration |
object |
La configuración del modelo. Use este atributo para controlar cómo se empaqueta el modelo en la imagen resultante. | No |
model_configuration.mode |
download copy |
Indique cómo se colocaría el modelo en el paquete. Los valores posibles son: download (predeterminado) y copy . Use download cuando quiera que el modelo se descargue del registro de modelos en el momento de la implementación. Esta opción crea imágenes de Docker más pequeñas, ya que el modelo no está incluido en ella. Use copy cuando quiera desconectar la imagen de Azure Machine Learning. El modelo se copiará dentro de la imagen de Docker en el momento de creación del paquete. copy no se admite en áreas de trabajo habilitadas para vínculo privado. |
No |
Cree una especificación del paquete del modo siguiente:
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
Inicie la operación del paquete de modelos:
az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
El resultado de la operación de empaquetado es un entorno.
Empaquetado de un modelo que tiene dependencias en fuentes privadas de Python
Los paquetes de modelos pueden resolver las dependencias de Python que están disponibles en fuentes privadas. Para usar esta funcionalidad, debe crear una conexión desde el área de trabajo a la fuente y especificar la configuración del token PAT. En el código de Python siguiente se muestra cómo configurar el área de trabajo donde se ejecuta la operación de paquete.
from azure.ai.ml.entities import WorkspaceConnection
from azure.ai.ml.entities import PatTokenConfiguration
# fetching secrets from env var to secure access, these secrets can be set outside or source code
git_pat = os.environ["GIT_PAT"]
credentials = PatTokenConfiguration(pat=git_pat)
ws_connection = WorkspaceConnection(
name="<workspace_connection_name>",
target="<git_url>",
type="git",
credentials=credentials,
)
ml_client.connections.create_or_update(ws_connection)
Una vez creada la conexión, compile el paquete de modelo como se describe en la sección Empaquetado de un modelo. En el ejemplo siguiente, el entorno base del paquete usa una fuente privada para la dependencia de Python bar
, tal como se especifica en el siguiente archivo de Conda:
conda.yml
name: foo
channels:
- defaults
dependencies:
- python
- pip
- pip:
- --extra-index-url <python_feed_url>
- bar
Si usa un modelo de MLflow, las dependencias del modelo se indican dentro del propio modelo y, por tanto, no se necesita un entorno base. En su lugar, especifique las dependencias de fuente privada al registrar el modelo, como se explica en Registro de modelos con una firma personalizada, un entorno o ejemplos.
Empaquetado de un modelo hospedado en un registro
Los paquetes de modelos proporcionan una manera cómoda de recopilar dependencias antes de la implementación. Sin embargo, cuando los modelos se hospedan en registros, el destino de implementación suele ser otra área de trabajo. Al crear paquetes en esta configuración, use la propiedad target_environment
para especificar la ubicación completa donde desea que se cree el paquete de modelo, en lugar de solo su nombre.
El código siguiente crea un paquete del modelo t5-base
a partir de un registro:
Conéctese al registro donde se encuentra el modelo y al área de trabajo en la que necesita que se cree el paquete de modelo:
az login
Obtenga una referencia al modelo que desea empaquetar. En este caso, estamos empaquetando el modelo
t5-base
desde el registroazureml
.MODEL_NAME="t5-base" MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
Configure una especificación de paquete. Dado que el modelo que queremos empaquetar es MLflow, el entorno base y el script de puntuación son opcionales.
package.yml
$schema: http://azureml/sdk-2-0/ModelVersionPackage.json target_environment: pkg-t5-base-online inferencing_server: type: azureml_online
Inicie la operación para crear el paquete de modelo:
az ml model package --name $MODEL_NAME \ --version $MODEL_VERSION \ --registry-name azureml \ --file package.yml
El paquete ahora se crea en el área de trabajo de destino y está listo para implementarse.
Empaquetado de modelos para implementar fuera de Azure Machine Learning
Los paquetes de modelo se pueden implementar fuera de Azure Machine Learning si es necesario. Para garantizar la portabilidad, solo debe asegurarse de que la configuración del modelo del paquete tenga el modo establecido en copy
para que el propio modelo se copie dentro de la imagen de Docker generada en lugar de hacer referencia al registro de modelos en Azure Machine Learning.
En el código siguiente se muestra cómo configurar copy
en un paquete de modelos:
package-external.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-docker-pkg
inferencing_server:
type: azureml_online
code_configuration:
code: src
scoring_script: score.py
model_configuration:
mode: copy