En este artículo, aprenderá a implementar una nueva versión de un modelo de Machine Learning sin causar ninguna interrupción. Usará una estrategia de implementación azul-verde (también conocida como estrategia de lanzamiento seguro) para introducir una nueva versión de un servicio web en producción. Esta estrategia le permitirá implementar la nueva versión del servicio web en un pequeño subconjunto de usuarios o solicitudes antes de implementarlo por completo.
En este artículo se supone que usa puntos de conexión en línea, es decir, puntos de conexión que se usan para la inferencia en línea (en tiempo real). Hay dos tipos de puntos de conexión en línea: puntos de conexión en línea administrados y puntos de conexión en línea de Kubernetes. Para más información sobre los puntos de conexión y las diferencias entre los puntos de conexión en línea administrados y los puntos de conexión en línea de Kubernetes, consulte ¿Qué son los puntos de conexión de Azure Machine Learning?
En el ejemplo principal de este artículo se usan puntos de conexión en línea administrados para la implementación. Para usar puntos de conexión Kubernetes en su lugar, consulte las notas de este documento insertadas en la explicación de los puntos de conexión en línea administrados.
En este artículo aprenderá lo siguiente:
Definir un punto de conexión en línea con una implementación denominada "blue" para atender la versión 1 de un modelo
Escalar esta implementación azul para que pueda controlar más solicitudes
Implemente la versión 2 del modelo (denominada implementación "verde") en el punto de conexión, pero envíe la implementación sin tráfico activo
Probar la implementación verde de forma aislada.
Reflejo de un porcentaje del tráfico activo en la implementación verde para validarlo
Envíe un pequeño porcentaje de tráfico en directo a la implementación verde
Enviar todo el tráfico en directo a la implementación verde
Eliminar la implementación azul de la versión 1 que ya no se usa.
En los ejemplos de la CLI de este artículo se supone que usa el shell de Bash (o compatible). Por ejemplo, de un sistema Linux o Subsistema de Windows para Linux.
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 descritos en este artículo, la cuenta de usuario debe tener asignado el rol de propietario o colaborador para el área de trabajo de Azure Machine Learning, o un rol personalizado que permita Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Para obtener más información, consulte Administración del acceso a un área de trabajo de Azure Machine Learning.
(Opcional) Para implementar localmente, debe instalar el motor de Docker en el equipo local. Se recomienda esta opción, para que sea más sencillo depurar los problemas.
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 descritos en este artículo, la cuenta de usuario debe tener asignado el rol de propietario o colaborador para el área de trabajo de Azure Machine Learning, o un rol personalizado que permita Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Para obtener más información, consulte Administración del acceso a un área de trabajo de Azure Machine Learning.
(Opcional) Para implementar localmente, debe instalar el motor de Docker en el equipo local. Se recomienda esta opción, para que sea más sencillo depurar los problemas.
Antes de seguir los pasos de este artículo, asegúrese de que tiene los siguientes requisitos previos:
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 descritos en este artículo, la cuenta de usuario debe tener asignado el rol de propietario o colaborador para el área de trabajo de Azure Machine Learning, o un rol personalizado que permita Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Para obtener más información, consulte Administración del acceso a un área de trabajo de Azure Machine Learning.
Si aún no ha establecido los valores predeterminados de la CLI de Azure, guarde la configuración predeterminada. Para evitar pasar los valores de la suscripción, el área de trabajo y el grupo de recursos varias veces, ejecute este código:
az account set --subscription <subscription id>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
Clone el repositorio de ejemplos
Para seguir este artículo, primero clone el repositorio de ejemplos (azureml-examples). A continuación, vaya al directorio cli/ del repositorio:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli
Sugerencia
Use --depth 1 para clonar únicamente la última confirmación al repositorio. Esto reduce el tiempo para completar la operación.
Los comandos de este tutorial están en el archivo deploy-safe-rollout-online-endpoints.sh en el directorio cli y los archivos de configuración YAML se encuentran en el subdirectorio endpoints/online/managed/sample/.
Nota
Los archivos de configuración de YAML para los puntos de conexión en línea de Kubernetes están en el endpoints/online/kubernetes/ subdirectorio.
Clone el repositorio de ejemplos
Para ejecutar los ejemplos de entrenamiento, primero clone el repositorio de ejemplos (azureml-examples). A continuación, vaya al azureml-examples/sdk/python/endpoints/online/managed directorio:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/sdk/python/endpoints/online/managed
Sugerencia
Use --depth 1 para clonar únicamente la última confirmación al repositorio. Esto reduce el tiempo para completar la operación.
La información de este artículo se basa en el cuaderno online-endpoints-safe-rollout.ipynb. Contiene el mismo contenido que este artículo, aunque el orden de los códigos es ligeramente diferente.
Conexión al área de trabajo de Azure Machine Learning
El área de trabajo es el recurso de nivel superior para Azure Machine Learning, que proporciona un lugar centralizado para trabajar con todos los artefactos que se crean al usar Azure Machine Learning. En esta sección, nos conectaremos al área de trabajo donde realizará las tareas de implementación. Para continuar, abra el cuaderno online-endpoints-safe-rollout.ipynb.
Importe las bibliotecas necesarias:
# import required libraries
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
ManagedOnlineEndpoint,
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration,
)
from azure.identity import DefaultAzureCredential
Nota
Si usa el punto de conexión en línea de Kubernetes, importe la KubernetesOnlineEndpoint clase y KubernetesOnlineDeployment de la azure.ai.ml.entities biblioteca.
Configure los detalles del área de trabajo y obtenga un manipulador para el área de trabajo:
Para conectarse a un área de trabajo, se necesitan parámetros de identificador: una suscripción, un grupo de recursos y un nombre de área de trabajo. Usaremos estos detalles en el elemento MLClient de azure.ai.ml para obtener un manipulador para el área de trabajo de Azure Machine Learning necesaria. En este ejemplo, se usa la autenticación predeterminada de Azure.
# enter details of your AML workspace
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AML_WORKSPACE_NAME>"
# get a handle to the workspace
ml_client = MLClient(
DefaultAzureCredential(), subscription_id, resource_group, workspace
)
Si tiene Git instalado en el equipo local, puede seguir las instrucciones para clonar el repositorio de ejemplos. De lo contrario, siga las instrucciones para descargar archivos del repositorio de ejemplos.
Clone el repositorio de ejemplos
Para continuar con este artículo, primero clone el repositorio de ejemplos (azureml-examples) y, a continuación, cambie al directorio azureml-examples/cli/endpoints/online/model-1.
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli/endpoints/online/model-1
Sugerencia
Use --depth 1 para clonar solamente la confirmación más reciente en el repositorio, lo cual reduce el tiempo para completar la operación.
Descarga de archivos del repositorio de ejemplos
Si ha clonado el repositorio de ejemplos, la máquina local ya tiene copias de los archivos de este ejemplo y puede pasar directamente a la sección siguiente. Si no ha clonado el repositorio, puede descargarlo en el equipo local.
Vaya al botón <> Code de la página y, a continuación, seleccione Download ZIP en la pestaña Local.
Busque la carpeta /cli/endpoints/online/model-1/model del modelo y el script de puntuación /cli/endpoints/online/model-1/onlinescoring/score.py para un primer modelo model-1.
Busque la carpeta /cli/endpoints/online/model-2/model del modelo y el script de puntuación /cli/endpoints/online/model-2/onlinescoring/score.py para un segundo modelo model-2.
Definición del punto de conexión y la implementación
Los puntos de conexión en línea se usan para las inferencias en línea (en tiempo real). Los puntos de conexión en línea contienen implementaciones que están listas para recibir datos de los clientes y enviar respuestas en tiempo real.
Definición de un punto de conexión
En la tabla siguiente se enumeran los atributos clave que se deben especificar al definir un punto de conexión.
Atributo
Description
Nombre
Necesario. Nombre del punto de conexión. El valor debe ser único dentro de la región de Azure. Para más información sobre las reglas de nomenclatura, vea los límites del punto de conexión.
Modo de autenticación
Método de autenticación del punto de conexión. Elija entre la autenticación basada en claves key y la autenticación basada en tokens de Azure Machine Learning aml_token. Una clave no expira, pero un token sí. Para más información sobre la autenticación, consulte Autenticación en un punto de conexión en línea.
Descripción
Descripción del punto de conexión.
Etiquetas
Diccionario de etiquetas del punto de conexión.
Tráfico
Reglas sobre cómo enrutar el tráfico entre implementaciones. Represente el tráfico como un diccionario de pares clave-valor, donde las claves representan el nombre de la implementación y los valores representan el porcentaje de tráfico a esa implementación. Solo puede establecer el tráfico cuando se hayan creado las implementaciones en un punto de conexión. También puede actualizar el tráfico de un punto de conexión en línea una vez creadas las implementaciones. Para obtener más información sobre cómo usar el tráfico reflejado, consulte Asignación de un pequeño porcentaje de tráfico en directo a la nueva implementación.
Una implementación es un conjunto de recursos necesarios para hospedar el modelo que realiza la inferencia real. En la tabla siguiente se describen los atributos clave que se deben especificar al definir una implementación.
Atributo
Description
Nombre
Necesario. Nombre de la implementación.
El nombre del punto de conexión
Necesario. Nombre del punto de conexión en el que se creará la implementación.
Modelo
Modelo que se usará para la implementación. Este valor puede ser una referencia a un modelo con versiones existente en el área de trabajo o una especificación de modelo en línea. En el ejemplo, tenemos un modelo scikit-learn que realiza la regresión.
Ruta de acceso al código
Ruta de acceso al directorio en el entorno de desarrollo local que contiene todo el código fuente de Python para puntuar el modelo. Puede usar directorios y paquetes anidados.
Script de puntuación
Código de Python que ejecuta el modelo en una solicitud de entrada determinada. Este valor puede ser la ruta de acceso relativa al archivo de puntuación en el directorio de código fuente. El script de puntuación recibe los datos enviados a un servicio web implementado y los pasa al modelo. A continuación, el script ejecuta el modelo y devuelve su respuesta al cliente. El script de puntuación es específico para el modelo y debe entender los datos que el modelo espera como entrada y devuelve como salida. En este ejemplo, tenemos un archivo score-py. Este código de Python debe tener una función init() y una función run(). Se llamará a la función init() después de crear o actualizar el modelo (puede usarla para copiar en caché el modelo en la memoria, por ejemplo). Se llama a la función run() en cada invocación del punto de conexión para realizar la puntuación o predicción reales.
Entorno
Necesario. Entorno para hospedar el modelo y el código. Este valor puede ser una referencia a un entorno con versiones existente en el área de trabajo o una especificación de entorno en línea. El entorno puede ser una imagen de Docker con dependencias de Conda, un Dockerfile o un entorno registrado.
Necesario. El número de instancias que se usarán para la implementación. Base el valor en la carga de trabajo esperada. Para lograr alta disponibilidad, se recomienda establecer el valor en al menos 3. Reservamos un 20 % adicional para realizar actualizaciones. Para más información, vea Límites de puntos de conexión en línea.
En primer lugar, establezca el nombre del punto de conexión y configúrelo. En este artículo, usará el archivo endpoints/online/managed/sample/endpoint.yml para configurar el punto de conexión. El siguiente fragmento de código muestra el contenido del archivo:
(Opcional) El esquema de YAML. Para ver todas las opciones disponibles en el archivo YAML, puede ver el esquema del fragmento de código anterior en un explorador.
name
Nombre del punto de conexión.
auth_mode
Use key para la autenticación basada en claves. Use aml_token para la autenticación basada en tokens de Azure Machine Learning. Para obtener el token más reciente, use el comando az ml online-endpoint get-credentials.
Creación de un punto de conexión en línea:
Establezca el nombre del punto de conexión:
Para Unix, ejecute este comando (reemplace por YOUR_ENDPOINT_NAME un nombre único):
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
Importante
Los nombres del punto de conexión deben ser únicos dentro de una región de Azure. Por ejemplo, en la región westus2 de Azure solo puede haber un punto de conexión con el nombre my-endpoint.
Cree el punto de conexión en la nube:
Ejecute el código siguiente a fin de usar el archivo endpoint.yml para configurar el punto de conexión:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Creación de la implementación "azul"
En este artículo, usará el archivo endpoints/online/managed/sample/blue-deployment.yml para configurar los aspectos clave de la implementación. El siguiente fragmento de código muestra el contenido del archivo:
A fin de crear una implementación denominada blue para el punto de conexión, ejecute el siguiente comando para usar el archivo blue-deployment.yml para la configuración:
az ml online-deployment create --name blue --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
Importante
La marca --all-traffic del elemento az ml online-deployment create asigna el 100 % del tráfico del punto de conexión a la implementación azul creada recientemente.
En el archivo blue-deployment.yaml, se especifica el valor de path (desde donde cargar archivos) insertado. La CLI carga automáticamente los archivos y registra el modelo y el entorno. Como procedimiento recomendado en producción, debe registrar el modelo y el entorno y especificar el nombre y la versión registrados por separado en el archivo YAML. Utilice el formulario model: azureml:my-model:1 o environment: azureml:my-env:1.
Para el registro, puede extraer las definiciones de YAML de model y environment en archivos YAML diferentes y usar los comandos az ml model create y az ml environment create. Para más información sobre estos comandos, ejecute az ml model create -h y az ml environment create -h.
Para crear un punto de conexión en línea administrado, use la clase ManagedOnlineEndpoint. Esta clase permite al usuario configurar los aspectos clave del punto de conexión.
Configuración del punto de conexión:
# Creating a unique endpoint name with current datetime to avoid conflicts
import random
online_endpoint_name = "endpt-moe-" + str(random.randint(0, 10000))
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name=online_endpoint_name,
description="this is a sample online endpoint",
auth_mode="key",
tags={"foo": "bar"},
)
Nota
Para crear un punto de conexión en línea de Kubernetes, use la clase KubernetesOnlineEndpoint.
Para crear una implementación para el punto de conexión en línea administrado, use la clase ManagedOnlineDeployment. Esta clase permite al usuario configurar los aspectos clave de la implementación.
En la tabla siguiente se describen los atributos de un elemento deployment:
En este ejemplo se especifica path (desde donde cargar archivos) insertado. El SDK carga automáticamente los archivos y registra el modelo y el entorno. Como procedimiento recomendado en producción, debe registrar el modelo y el entorno y especificar el nombre y la versión registrados por separado en los códigos.
Al crear un punto de conexión en línea administrado en el Estudio de Azure Machine Learning, debe definir una implementación inicial para el punto de conexión. Para poder definir una implementación, debe tener un modelo registrado en el área de trabajo. Empecemos por registrar el modelo que se va a usar para la implementación.
Registro del modelo
Un registro de modelos es una entidad lógica en el área de trabajo. Esta entidad puede contener un único archivo de modelo o un directorio de varios archivos. Como procedimiento recomendado para producción, debe registrar el modelo y el entorno. Al crear el punto de conexión y la implementación en este artículo, se supondrá que ha registrado la carpeta del modelo que contiene el modelo.
Para registrar el modelo de ejemplo, siga estos pasos:
En la barra de navegación izquierda, seleccione la página Models (Modelos).
Seleccione Registrar y, luego, De archivos locales.
Seleccione Tipo no especificado en Tipo de modelo.
Seleccione Examinar y elija Examinar carpeta.
Seleccione la carpeta \azureml-examples\cli\endpoints\online\model-1\model de la copia local del repositorio que ha clonado o descargado anteriormente. Cuando se le solicite, seleccione Cargar y espere a que se complete la carga.
Seleccione Siguiente una vez completada la carga de la carpeta.
Escriba un nombre descriptivo para el modelo. En los pasos de este artículo se supone que el modelo se llama model-1.
Seleccione Next y, luego, Register para completar el registro.
Repita los pasos anteriores para registrar un elemento model-2 desde la carpeta \azureml-examples\cli\endpoints\online\model-2\model en la copia local del repositorio que ha clonado o descargado anteriormente.
Para obtener información sobre cómo crear un entorno en el estudio, consulte Creación de un entorno.
Creación de un punto de conexión en línea administrado y la implementación "blue"
Use el Estudio de Azure Machine Learning para crear un punto de conexión en línea administrado directamente en el explorador. Al crear un punto de conexión en línea administrado en Estudio, debe definir una implementación inicial. No puede crear un punto de conexión en línea administrado vacío.
Una forma de crear un punto de conexión en línea administrado en el estudio es desde la página Modelos. Este método también ofrece una manera sencilla de agregar un modelo a una implementación en línea administrada existente. Para implementar el modelo denominado model-1 que ha registrado anteriormente en la sección Registrar el modelo:
En la barra de navegación izquierda, seleccione la página Models (Modelos).
Seleccione el modelo denominado model-1; para ello, marque el círculo situado junto a su nombre.
Seleccione Implementar>Punto de conexión en tiempo real.
Con esta acción se abre una ventana en la que puede especificar detalles sobre el punto de conexión.
Escriba un nombre de punto de conexión.
Mantenga las selecciones predeterminadas: Administrado para el tipo de proceso y Autenticación basada en claves para el tipo de autenticación.
Seleccione Siguiente hasta que llegue a la página "Implementación". En esta página, realice las siguientes tareas:
Asigne el nombre "blue" a la implementación.
Marque la casilla Habilitar diagnósticos y recopilación de datos de Application Insights para permitirle ver gráficos de las actividades del punto de conexión en el estudio más adelante.
Seleccione Siguiente para ir a la pestaña "Entorno". En este caso, realice los pasos siguientes:
En el cuadro "Selección del archivo de puntuación y las dependencias" navegue y seleccione el archivo \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.pydel repositorio que clonó o descargó anteriormente.
Empiece a escribir sklearn en el cuadro de búsqueda encima de la lista de entornos y seleccione el entorno mantenido AzureML-sklearn-0.24.
Seleccione Siguiente para ir a la página "Proceso". En esta página, mantenga la selección predeterminada de la máquina virtual "Standard_DS3_v2" y cambie el recuento de instancias a 1.
Seleccione Siguiente para aceptar la asignación de tráfico predeterminada (100 %) a la implementación azul.
Revise la configuración de la implementación y seleccione el botón Crear.
Como alternativa, puede crear un punto de conexión en línea administrado desde la página Puntos de conexión del estudio.
En la barra de navegación izquierda, seleccione la página Endpoints (Puntos de conexión).
Seleccione + Create (+ Crear).
Esta acción abre una ventana para especificar detalles sobre el punto de conexión y la implementación. Introduzca la configuración del punto de conexión y la implementación, tal y como se describe en los pasos anteriores del 5 al 11, y acepte los valores predeterminados hasta que se le pida que cree la implementación.
Confirmación de la implementación existente
Una manera de confirmar la implementación existente es invocar su punto de conexión para que pueda puntuar su modelo para una solicitud de entrada determinada. Al invocar el punto de conexión desde la CLI o el SDK de Python, puede optar por especificar el nombre de la implementación que recibirá el tráfico entrante.
Nota
A diferencia de la CLI o el SDK de Python, Estudio de Azure Machine Learning requiere que especifique una implementación al invocar un punto de conexión.
Invocar un punto de conexión con el nombre de la implementación
Si invoca el punto de conexión con el nombre de la implementación que recibirá tráfico, Azure Machine Learning enrutará el tráfico del punto de conexión directamente a la implementación especificada y devolverá su salida. Puede usar la opción --deployment-name para la CLI v2 o la opción deployment_name para el SDK v2 con el fin de especificar la implementación.
Invocar un punto de conexión sin especificar la implementación
Si invoca el punto de conexión sin especificar la implementación que recibirá tráfico, Azure Machine Learning enrutará el tráfico entrante del punto de conexión a las implementaciones en el punto de conexión en función de la configuración del control de tráfico.
La configuración del control de tráfico asigna porcentajes especificados del tráfico entrante a cada implementación del punto de conexión. Por ejemplo, si las reglas de tráfico especifican que una implementación concreta de su punto de conexión recibirá tráfico entrante el 40 % del tiempo, Azure Machine Learning dirigirá el 40 % del tráfico del punto de conexión a esa implementación.
Con el elemento MLClient creado anteriormente, vamos a obtener un manipulador para el punto de conexión. El punto de conexión se puede invocar mediante el comando invoke con los parámetros siguientes:
endpoint_name: nombre del punto de conexión.
request_file: archivo con los datos de la solicitud.
deployment_name: nombre de la implementación específica que se va a probar en un punto de conexión
Vamos a enviar una solicitud de ejemplo mediante un archivo JSON.
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name="blue",
request_file="../model-1/sample-request.json",
)
Visualizar puntos de conexión en línea administrados
Puede ver todos los puntos de conexión en línea administrados en la página Puntos de conexión. Vaya a la página Detalles del punto de conexión para encontrar información crítica, incluidos el URI del punto de conexión, el estado, las herramientas de prueba, los monitores de actividad, los registros de implementación y el código de consumo de ejemplo:
En la barra de navegación de la izquierda, seleccione Puntos de conexión. Aquí puede ver una lista de todos los puntos de conexión del área de trabajo.
(Opcional) En Filter (Filtro) cree un filtro por Compute type (Tipo de proceso) para mostrar solo los tipos de proceso Managed (Administrado).
Seleccione el nombre de un punto de conexión para ver la página Detalles correspondiente.
Prueba del punto de conexión con datos de ejemplo
Use la pestaña Prueba de la página "Detalles" del punto de conexión para probar la implementación en línea administrada. Escriba la entrada de ejemplo y vea los resultados.
Seleccione la pestaña Test (Prueba) en la página de detalles del punto de conexión. La implementación azul ya está seleccionada en el menú desplegable.
az ml online-deployment update --name blue --endpoint-name $ENDPOINT_NAME --set instance_count=2
Nota
Observe que en el comando anterior se usa --set para invalidar la configuración de la implementación. Como alternativa, puede actualizar el archivo YAML y pasarlo como entrada en el comando update mediante la entrada --file.
Con el elemento MLClient creado anteriormente, vamos a obtener un manipulador para la implementación. Para escalar la implementación, se aumenta o se reduce el valor de instance_count.
# Get the details for online endpoint
endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)
# existing traffic details
print(endpoint.traffic)
# Get the scoring URI
print(endpoint.scoring_uri)
Use las instrucciones siguientes para ajustar el número de instancias para escalar o reducir verticalmente la implementación:
En la página "Detalles" del punto de conexión, busque la tarjeta de la implementación azul.
Seleccione el icono de edición en el encabezado de la tarjeta de la implementación azul.
Cambie el recuento de instancias a 2.
Selecciona Actualización.
Implementación de un nuevo modelo sin que aún reciba tráfico
az ml online-deployment create --name green --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/green-deployment.yml
Puesto que no hemos asignado explícitamente ningún tráfico a green, tiene cero tráfico asignado. Para comprobarlo, use el comando siguiente:
az ml online-endpoint show -n $ENDPOINT_NAME --query traffic
Prueba de la nueva implementación
Aunque green tiene asignado 0 % de tráfico, puede invocarla directamente si especifica el nombre --deployment:
az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name green --request-file endpoints/online/model-2/sample-request.json
Si desea usar un cliente REST para invocar la implementación directamente sin pasar por reglas de tráfico, establezca el siguiente encabezado HTTP: azureml-model-deployment: <deployment-name>. El fragmento de código siguiente usa curl para invocar la implementación directamente. El fragmento de código debe funcionar en entornos Unix o WSL:
# get the scoring uri
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
# use curl to invoke the endpoint
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --header "azureml-model-deployment: green" --data @endpoints/online/model-2/sample-request.json
Cree una nueva implementación para el punto de conexión en línea administrado y asigne un nombre a la implementación green:
# use MLClient to create green deployment
ml_client.online_deployments.begin_create_or_update(green_deployment).result()
Nota
Si va a crear una implementación para un punto de conexión en línea de Kubernetes, use la clase KubernetesOnlineDeployment y especifique un tipo de instancia de Kubernetes en el clúster de Kubernetes.
Prueba de la nueva implementación
Aunque green tiene asignado el 0 % del tráfico, todavía puede invocar el punto de conexión y la implementación con un archivo json.
Cree una nueva implementación para agregar al punto de conexión en línea administrado y asigne el nombre green a la implementación.
En la página de detalles del punto de conexión:
Seleccione el botón + Agregar implementación en la página "Detalles" del punto de conexión.
Seleccione Implementar un modelo.
Seleccione Siguiente para ir a la página "Modelo" y seleccione el modelo model-2.
Seleccione Siguiente para ir a la página "Implementación" y realizar las siguientes tareas:
Asigne el nombre "green" a la implementación.
Habilite los diagnósticos y la recopilación de datos de Application Insights.
Seleccione Siguiente para ir a la pestaña "Entorno". En este caso, realice los pasos siguientes:
En el cuadro "Selección del archivo de puntuación y las dependencias" navegue y seleccione el archivo \azureml-examples\cli\endpoints\online\model-2\onlinescoring\score.pydel repositorio que clonó o descargó anteriormente.
Empiece a escribir sklearn en el cuadro de búsqueda encima de la lista de entornos y seleccione el entorno mantenido AzureML-sklearn-0.24.
Seleccione Siguiente para ir a la página "Proceso". En esta página, mantenga la selección predeterminada de la máquina virtual "Standard_DS3_v2" y cambie el recuento de instancias a 1.
Seleccione Siguiente para ir a la página "Tráfico". En esta página, mantenga la asignación de tráfico predeterminada a las implementaciones (el 100 % de tráfico a "blue" y el 0 % de tráfico a "green").
Seleccione Siguiente para revisar la configuración de la implementación.
Seleccione Crear para crear la implementación.
Como alternativa, puede usar la página Models (Modelos) para agregar una implementación:
En la barra de navegación izquierda, seleccione la página Models (Modelos).
Seleccione el círculo situado junto al nombre del modelo para elegirlo.
Seleccione Implementar>Punto de conexión en tiempo real.
Elija implementar en un punto de conexión en línea administrado existente.
Siga los pasos anteriores del 3 al 9 para terminar de crear la implementación verde.
Nota
Al agregar una nueva implementación a un punto de conexión, puede ajustar el equilibrio del tráfico entre las implementaciones en la página "Tráfico". En esta página, mantenga la asignación de tráfico predeterminada a las implementaciones (el 100 % del tráfico a "blue" y el 0 % del tráfico a "green").
Prueba de la nueva implementación
Aunque green tiene asignado el 0 % del tráfico, todavía puede invocar el punto de conexión y la implementación. Use la pestaña Prueba de la página "Detalles" del punto de conexión para probar la implementación en línea administrada. Escriba la entrada de ejemplo y vea los resultados.
Seleccione la pestaña Test (Prueba) en la página de detalles del punto de conexión.
Seleccione la implementación verde en el menú desplegable.
Pegue la entrada de ejemplo en el cuadro de prueba.
Seleccione Probar.
Prueba de la implementación con tráfico reflejado
Una vez que haya probado la implementación green, puede reflejar (o copiar) un porcentaje del tráfico en directo en ella. La creación de reflejo del tráfico (también denominada creación de sombras) no cambia los resultados devueltos a los clientes; el 100 % de las solicitudes siguen fluyendo a la implementación blue. El porcentaje reflejado del tráfico se copia y se envía a la implementación green para que pueda recopilar métricas y registros sin que los clientes resulten afectados. La creación de reflejo es útil cuando desea validar una nueva implementación sin que los clientes resulten afectados. Por ejemplo, puede usar la creación de reflejo para comprobar si la latencia está dentro de los límites aceptables o para comprobar que no haya errores HTTP. La prueba de la nueva implementación con creación de reflejo o "shadowing" de tráfico también se conoce como pruebas de "shado". La implementación que recibe el tráfico reflejado (en este caso, la implementación green) también se puede denominar implementación de sombra.
La creación de reflejo tiene las siguientes limitaciones:
La creación de reflejo del tráfico se admite en la CLI (v2) (versión 2.4.0 o posterior) y en el SDK de Python (v2) (versión 1.0.0 o posterior). Si usa una versión anterior de la CLI o el SDK para actualizar un punto de conexión, perderá la configuración del tráfico reflejado.
La creación de reflejo no se admite actualmente en los puntos de conexión en línea de Kubernetes.
Puede reflejar el tráfico en una sola implementación en un punto de conexión.
El porcentaje máximo de tráfico que puede reflejar es el 50 %. Este límite se establece para reducir el efecto en la cuota de ancho de banda del punto de conexión (valor predeterminado de 5 MBPS); el ancho de banda del punto de conexión se limita si supera la cuota asignada. Para más información sobre la supervisión del límite de ancho de banda, consulte Supervisión de puntos de conexión en línea administrados.
Tenga en cuenta también los siguientes comportamientos:
Una implementación se puede configurar para recibir solo el tráfico en directo o el tráfico reflejado, no ambos.
Al invocar un punto de conexión, puede especificar el nombre de cualquiera de sus implementaciones (incluso una implementación instantánea) para devolver la predicción.
Al invocar un punto de conexión con el nombre de la implementación que recibirá tráfico entrante, Azure Machine Learning no reflejará el tráfico en la implementación de sombra. Azure Machine Learning refleja el tráfico en la implementación de sombra desde el tráfico enviado al punto de conexión cuando no se especifica una implementación.
Ahora vamos a establecer la implementación verde para recibir el 10 % del tráfico reflejado. Los clientes seguirán recibiendo predicciones solo de la implementación azul.
Puede probar el tráfico reflejado invocando el punto de conexión varias veces sin especificar una implementación para recibir el tráfico entrante:
# You can test mirror traffic by invoking the endpoint several times
for i in range(20):
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
request_file="../model-1/sample-request.json",
)
Puede confirmar que el porcentaje específico del tráfico se envió a la implementación green viendo los registros de la implementación:
Para reflejar el 10 % del tráfico en la implementación green:
En la página "Detalles" del punto de conexión, seleccione Actualizar tráfico.
Deslice el botón hasta Enable mirrored traffic (Habilitar tráfico reflejado).
Seleccione la implementación green en el menú desplegable "Nombre de la implementación".
Mantenga la asignación de tráfico predeterminada del 10 %.
Selecciona Actualización.
En la página "Detalles" del punto de conexión ahora se muestra la asignación de tráfico reflejado del 10 % en la implementación green.
Para probar el tráfico reflejado, consulte las pestañas de la CLI de Azure o Python para invocar el punto de conexión varias veces. Confirme que el porcentaje específico del tráfico se envió a la implementación green viendo los registros de la implementación. Puede acceder a los registros de implementación desde la pestaña Registros de implementación del punto de conexión. También puede usar métricas y registros para supervisar el rendimiento del tráfico reflejado. Para obtener más información, consulte Supervisión de los puntos de conexión en línea.
Después de las pruebas, puede deshabilitar la creación de reflejo:
En la página "Detalles" del punto de conexión, seleccione Actualizar tráfico.
Vuelva a deslizar el botón junto a Enable mirrored traffic (Habilitar tráfico reflejado) para deshabilitarlo.
Selecciona Actualización.
Asignación de un pequeño porcentaje de tráfico en directo a la nueva implementación
Cuando esté plenamente satisfecho con la implementación green, cambie todo el tráfico a ella.
En la página "Detalles" del punto de conexión, seleccione Actualizar tráfico.
Para ajustar el tráfico de la implementación, asigne el 100 % a la implementación verde y el 0 % a la implementación azul.
Selecciona Actualización.
Eliminación de la implementación anterior
Siga estos pasos para eliminar una implementación individual de un punto de conexión en línea administrado. Al eliminar una implementación individual, las demás implementaciones del punto de conexión en línea administrado se ven afectadas:
No se puede eliminar una implementación que tenga tráfico en directo asignado. Para poder eliminarla, primero debe establecer la asignación de tráfico de la implementación en 0 %.
En la página "Detalles" del punto de conexión, busque la implementación azul.
Seleccione el icono de eliminación situado junto al nombre de la implementación.
Eliminación del punto de conexión y la implementación
Si no va a usar el punto de conexión ni la implementación, debe eliminarlos. Al eliminar el punto de conexión, también se eliminarán todas sus implementaciones subyacentes.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Si no va a usar el punto de conexión ni la implementación, debe eliminarlos. Al eliminar el punto de conexión, también se eliminarán todas sus implementaciones subyacentes.
Si no va a usar el punto de conexión ni la implementación, debe eliminarlos. Al eliminar el punto de conexión, también se eliminarán todas sus implementaciones subyacentes.
En la barra de navegación izquierda, seleccione la página Endpoints (Puntos de conexión).
Seleccione el círculo situado junto al punto de conexión para elegirlo.
Seleccione Eliminar.
Como alternativa, para eliminar un punto de conexión en línea administrado directamente, puede seleccionar el icono de eliminación en la página "Detalles" del punto de conexión.