SE APLICA A:
Extensión ML de la CLI de Azure v2 (actual)
SDK de Python azure-ai-ml v2 (actual)
En este artículo, aprenderá a implementar el modelo en un punto de conexión en línea para usarlo en inferencia en tiempo real. Para empezar, implemente un modelo en la máquina local para depurar los errores. A continuación, implementará y probará el modelo en Azure, verá los registros de implementación y supervisará el acuerdo de nivel de servicio (SLA). Al final de este artículo, tiene un punto de conexión HTTPS/REST escalable que puede usar para la inferencia en tiempo real.
Los puntos de conexión en línea son puntos de conexión que se usan para las inferencias 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 las diferencias, consulte Puntos de conexión en línea administrados frente a puntos de conexión en línea de Kubernetes.
Los puntos de conexión en línea administrados ayudan a implementar los modelos de aprendizaje automático de forma inmediata. Los puntos de conexión en línea administrados funcionan con máquinas eficaces de CPU y GPU en Azure de una manera escalable y totalmente administrada. Los puntos de conexión en línea administrados se encargan de atender, escalar, proteger y supervisar los modelos. Esta ayuda le libera de la sobrecarga de configuración y administración de la infraestructura subyacente.
En el ejemplo principal de este artículo se usan puntos de conexión en línea administrados para la implementación. Para usar 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.
Requisitos previos
SE APLICA A:
Extensión de ML de la CLI de Azure v2 (actual)
La CLI de Azure y la extensión ml
de la CLI de Azure, instaladas y configuradas. Para más información, consulte Instalación y configuración de la CLI (v2).
Un shell de Bash o un shell compatible, por ejemplo, un shell en un sistema Linux o subsistema de Windows para Linux. Se supone que, en los ejemplos de CLI de Azure de este artículo, usted utiliza este tipo de shell.
Un área de trabajo de Azure Machine Learning. Para obtener instrucciones para crear un área de trabajo, consulte Configuración.
El control de acceso basado en rol de Azure (RBAC de Azure) se usa 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 Propietario o Colaborador para el área de trabajo de Azure Machine Learning o un rol personalizado debe permitir Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
. Si usa Azure Machine Learning Studio para crear y administrar puntos de conexión o implementaciones en línea, necesita el permiso Microsoft.Resources/deployments/write
adicional del propietario del grupo de recursos. 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 encarecidamente esta opción, lo que facilita la depuración de problemas.
SE APLICA A:
SDK de Python azure-ai-ml v2 (actual)
Un área de trabajo de Azure Machine Learning. Para conocer los pasos para crear un área de trabajo, consulte Creación del área de trabajo.
Sdk de Azure Machine Learning para Python v2. Para instalar el SDK, use el siguiente comando:
pip install azure-ai-ml azure-identity
Para actualizar una instalación existente del SDK a la versión más reciente, use el siguiente comando:
pip install --upgrade azure-ai-ml azure-identity
Para más información, consulte Biblioteca cliente de Azure Machine Learning Package para Python.
RBAC de Azure se usa 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 Propietario o Colaborador para el área de trabajo de Azure Machine Learning o un rol personalizado debe permitir 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 encarecidamente esta opción, lo que facilita la depuración de problemas.
Antes de seguir los pasos descritos en este artículo, asegúrese de que tiene los siguientes requisitos previos:
La CLI de Azure y la extensión de la CLI para el aprendizaje automático se usan en estos pasos, pero no son el foco principal. Se usan más como utilidades para pasar plantillas a Azure y comprobar el estado de las implementaciones de plantillas.
La CLI de Azure y la extensión ml
de la CLI de Azure, instaladas y configuradas. Para más información, consulte Instalación y configuración de la CLI (v2).
Un shell de Bash o un shell compatible, por ejemplo, un shell en un sistema Linux o subsistema de Windows para Linux. Se supone que, en los ejemplos de CLI de Azure de este artículo, usted utiliza este tipo de shell.
Un área de trabajo de Azure Machine Learning. Para obtener instrucciones para crear un área de trabajo, consulte Configuración.
- RBAC de Azure se usa 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 Propietario o Colaborador para el área de trabajo de Azure Machine Learning o un rol personalizado debe permitir
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
. Para obtener más información, consulte Administración del acceso a un área de trabajo de Azure Machine Learning.
Asegúrese de que tiene asignada suficiente cuota de máquina virtual (VM) para la implementación. Azure Machine Learning reserva el 20 % de los recursos de proceso para realizar actualizaciones en algunas versiones de máquina virtual. Por ejemplo, si solicita 10 instancias en una implementación, debe tener una cuota de 12 para cada número de núcleos para la versión de la máquina virtual. Si no se tienen en cuenta los recursos de proceso adicionales, se produce un error. Algunas versiones de máquina virtual están exentas de la reserva de cuota adicional. Para más información sobre la asignación de cuotas, consulte Asignación de cuota de máquina virtual para la implementación.
Como alternativa, puede usar la cuota del grupo de cuotas compartidas de Azure Machine Learning durante un tiempo limitado. Azure Machine Learning proporciona un grupo de cuotas compartido desde el que los usuarios de varias regiones pueden acceder a la cuota para realizar pruebas durante un tiempo limitado, en función de la disponibilidad.
Cuando se usa Studio para implementar modelos Llama-2, Phi, Nemotron, Mistral, Dolly y Deci-Deci-DeciLM desde el catálogo de modelos en un punto de conexión en línea administrado, Azure Machine Learning le permite acceder a su grupo de cuotas compartidas durante un breve tiempo para poder realizar pruebas. Para más información sobre el grupo de cuotas compartidas, consulte Cuota compartida de Azure Machine Learning.
Preparación del sistema
Establecimiento de variables de entorno
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, clone primero el repositorio azureml-examples y, a continuación, cambie al directorio azureml-examples/cli del repositorio:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli
Use --depth 1
para clonar solo la confirmación más reciente en el repositorio, lo que reduce el tiempo para completar la operación.
Los comandos de este tutorial se encuentran en los archivos deploy-local-endpoint.sh y deploy-managed-online-endpoint.sh en el directorio cli . Los archivos de configuración de 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 se encuentran en el subdirectorio endpoints/online/kubernetes/ .
Clone el repositorio de ejemplos
Para ejecutar los ejemplos de entrenamiento, clone primero el repositorio azureml-examples y, a continuación, cambie al directorio azureml-examples/sdk/python/endpoints/online/managed directory:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/sdk/python/endpoints/online/managed
Use --depth 1
para clonar solo la confirmación más reciente en el repositorio, lo que reduce el tiempo para completar la operación.
La información de este artículo se basa en el cuaderno online-endpoints-simple-deployment.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 de Azure Machine Learning. Proporciona un lugar centralizado para trabajar con todos los artefactos que se crean al usar Azure Machine Learning. En esta sección, se conecta al área de trabajo en la que realiza las tareas de implementación. Para continuar, abra el cuaderno online-endpoints-simple-deployment.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 utiliza el punto de conexión en línea de Kubernetes, importe las clases KubernetesOnlineEndpoint
y KubernetesOnlineDeployment
de la biblioteca azure.ai.ml.entities
.
Configure los detalles del área de trabajo y obtenga un controlador para el área de trabajo.
Para conectarse a un área de trabajo, necesita estos parámetros de identificador: una suscripción, un grupo de recursos y un nombre de área de trabajo. Estos detalles se usan en el MLClient
de azure.ai.ml
para obtener un identificador del área de trabajo de Azure Machine Learning necesaria. En este ejemplo, se usa la autenticación predeterminada de Azure.
# enter details of your Azure Machine Learning workspace
subscription_id = "<subscription ID>"
resource_group = "<resource group>"
workspace = "<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 seguir este artículo, primero clona el repositorio azureml-examples, y después cambia 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
Use --depth 1
para clonar solo la confirmación más reciente en el repositorio, lo que 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, descárguelo en el equipo local.
- Vaya al repositorio de ejemplos (azureml-examples).
- Vaya al <> botón Código de la página y, a continuación, en la pestaña Local , seleccione Descargar ARCHIVO ZIP.
- Busque la carpeta /cli/endpoints/online/model-1/model y el archivo /cli/endpoints/online/model-1/onlinescoring/score.py.
Establecimiento de variables de entorno
Establezca las siguientes variables de entorno para poder usarlas en los ejemplos de este artículo. Reemplace los valores por el identificador de suscripción de Azure, la región de Azure donde se encuentra el área de trabajo, el grupo de recursos que contiene el área de trabajo y el nombre del área de trabajo:
export SUBSCRIPTION_ID="<subscription ID>"
export LOCATION="<your region>"
export RESOURCE_GROUP="<resource group>"
export WORKSPACE="<workspace name>"
Un par de ejemplos de plantillas requieren que cargue archivos en Azure Blob Storage para el área de trabajo. Los pasos siguientes consultan el área de trabajo y almacenan esta información en variables de entorno usadas en los ejemplos:
Obtener un token de acceso:
TOKEN=$(az account get-access-token --query accessToken -o tsv)
Establezca la versión de la API de REST:
API_VERSION="2022-05-01"
Obtenga la información de almacenamiento:
# Get values for storage account
response=$(curl --___location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/datastores?api-version=$API_VERSION&isDefault=true" \
--header "Authorization: Bearer $TOKEN")
AZUREML_DEFAULT_DATASTORE=$(echo $response | jq -r '.value[0].name')
AZUREML_DEFAULT_CONTAINER=$(echo $response | jq -r '.value[0].properties.containerName')
export AZURE_STORAGE_ACCOUNT=$(echo $response | jq -r '.value[0].properties.accountName')
Clone el repositorio de ejemplos
Para seguir este artículo, clone primero el repositorio azureml-examples y, a continuación, cambie al directorio azureml-examples :
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
Use --depth 1
para clonar solo la confirmación más reciente en el repositorio, lo que reduce el tiempo para completar la operación.
Definición del punto de conexión
Para definir un punto de conexión en línea, especifique el nombre del punto de conexión y el modo de autenticación. Para obtener más información sobre los puntos de conexión en línea administrados, consulte Puntos de conexión en línea.
Establecimiento de un nombre de punto de conexión
Para establecer el nombre del punto de conexión, ejecute el siguiente comando. Reemplace <YOUR_ENDPOINT_NAME>
por un nombre único en la región de Azure. Para obtener más información sobre las reglas de nomenclatura, consulte Límites de puntos de conexión.
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
El siguiente fragmento de código muestra el archivo endpoints/online/managed/sample/endpoint.yml:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key
La referencia para el formato YAML del punto de conexión se describe en la tabla siguiente. Para aprender a especificar estos atributos, consulte la referencia de YAML de puntos de conexión en línea. Para más información sobre los límites relacionados con los puntos de conexión administrados, consulte Puntos de conexión en línea y puntos de conexión por lotes de Azure Machine Learning.
Clave |
Descripción |
$schema |
(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. Use aad_token para la autenticación basada en tokens de Microsoft Entra (versión preliminar). Para obtener más información sobre la autenticación, vea Autenticar clientes para puntos de conexión en línea. |
En primer lugar, defina el nombre del punto de conexión en línea y, a continuación, configure el punto de conexión.
Reemplace por <YOUR_ENDPOINT_NAME>
un nombre único en la región de Azure o use el método de ejemplo para definir un nombre aleatorio. Asegúrese de eliminar el método que no use. Para obtener más información sobre las reglas de nomenclatura, consulte Límites de puntos de conexión.
# method 1: define an endpoint name
endpoint_name = "<YOUR_ENDPOINT_NAME>"
# method 2: example way to define a random name
import datetime
endpoint_name = "endpt-" + datetime.datetime.now().strftime("%m%d%H%M%f")
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name = endpoint_name,
description="this is a sample endpoint",
auth_mode="key"
)
El código anterior usa key
para la autenticación basada en claves. Para usar la autenticación basada en tokens de Azure Machine Learning, use aml_token
. Para usar la autenticación basada en tokens de Microsoft Entra (versión preliminar), use aad_token
. Para obtener más información sobre la autenticación, vea Autenticar clientes para puntos de conexión en línea.
Al implementar en Azure desde Studio, creará un punto de conexión y una implementación para agregarlo. En ese momento, se le pedirá que proporcione nombres para el punto de conexión y la implementación.
Establecimiento de un nombre de punto de conexión
Para establecer el nombre del punto de conexión, ejecute el siguiente comando para generar un nombre aleatorio. El valor debe ser único dentro de la región de Azure. Para obtener más información sobre las reglas de nomenclatura, consulte Límites de puntos de conexión.
export ENDPOINT_NAME=endpoint-`echo $RANDOM`
Para definir el punto de conexión y la implementación, en este artículo se usan las plantillas de Azure Resource Manager (plantillas de ARM) online-endpoint.json y online-endpoint-deployment.json. Para usar las plantillas para definir un punto de conexión en línea y una implementación, consulte la sección Implementación en Azure.
Definir la implementación
Una implementación es un conjunto de recursos necesarios para hospedar el modelo que realiza la inferencia real. En este ejemplo, implementará un scikit-learn
modelo que realiza la regresión y usará un script de puntuación score.py para ejecutar el modelo en una solicitud de entrada específica.
Para obtener información sobre los atributos clave de una implementación, consulte Implementaciones en línea.
La configuración de implementación usa la ubicación del modelo que desea implementar.
El fragmento de código siguiente muestra el archivo endpoints/online/managed/sample/blue-deployment.yml con todas las entradas necesarias para configurar una implementación:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
path: ../../model-1/model/
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yaml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
El archivo blue-deployment.yml especifica los siguientes atributos de implementación:
model
: especifica las propiedades del modelo mediante el parámetro path
(desde dónde se cargan los archivos). La CLI carga automáticamente los archivos de modelo y registra el modelo con un nombre generado automáticamente.
environment
: usa definiciones insertadas que incluyen dónde cargar archivos. La CLI carga automáticamente el archivo conda.yaml y registra el entorno. Más adelante, para compilar el entorno, la implementación usa el image
parámetro para la imagen base. En este ejemplo, es mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
. Las conda_file
dependencias se instalan sobre la imagen base.
code_configuration
: carga los archivos locales, como el origen de Python para el modelo de puntuación, desde el entorno de desarrollo durante la implementación.
Para más información sobre el esquema de YAML, consulte la referencia de YAML del punto de conexión en línea.
Nota
Para usar puntos de conexión de Kubernetes en lugar de puntos de conexión en línea administrados como destino de proceso:
- Cree el clúster de Kubernetes y asócielo como destino de proceso al área de Azure Machine Learning mediante Estudio de Azure Machine Learning.
- Utilice el archivo YAML de punto de conexión para usar Kubernetes como destino en lugar del archivo YAML del punto de conexión administrado. Debe editar el archivo YAML para cambiar el valor de
compute
por el nombre del destino de proceso registrado. Puede usar este archivo deployment.yaml que tiene otras propiedades que se aplican a una implementación de Kubernetes.
Todos los comandos que se usan en este artículo para los puntos de conexión en línea administrados también se aplican a los puntos de conexión de Kubernetes, excepto las siguientes funcionalidades que no se aplican a los puntos de conexión de Kubernetes:
Use el código siguiente para configurar una implementación:
model = Model(path="../model-1/model/sklearn_regression_model.pkl")
env = Environment(
conda_file="../model-1/environment/conda.yaml",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest",
)
blue_deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name=endpoint_name,
model=model,
environment=env,
code_configuration=CodeConfiguration(
code="../model-1/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS3_v2",
instance_count=1,
)
Model
: especifica las propiedades del modelo mediante el parámetro path
(desde dónde se cargan los archivos). El SDK carga automáticamente los archivos de modelo y registra el modelo con un nombre generado automáticamente.
Environment
: usa definiciones insertadas que incluyen dónde cargar archivos. El SDK carga automáticamente el archivo conda.yaml y registra el entorno. Más adelante, para compilar el entorno, la implementación usa el image
parámetro para la imagen base. En este ejemplo, es mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
. Las conda_file
dependencias se instalan sobre la imagen base.
CodeConfiguration
: carga los archivos locales, como el origen de Python para el modelo de puntuación, desde el entorno de desarrollo durante la implementación.
Para obtener más información sobre la definición de implementación en línea, vea Clase OnlineDeployment.
Al implementar en Azure, se crea un punto de conexión y una implementación para agregarlo. En ese momento, se le pedirá que proporcione nombres para el punto de conexión y la implementación.
Descripción del script de puntuación
El formato del script de puntuación para los puntos de conexión en línea es el mismo que se usaba en la versión anterior de la CLI y en el SDK de Python.
El script de puntuación especificado en code_configuration.scoring_script
debe tener una función init()
y una función run()
.
El script de puntuación deberá tener una función init()
y una función run()
.
El script de puntuación deberá tener una función init()
y una función run()
.
El script de puntuación deberá tener una función init()
y una función run()
. En este artículo se usa el archivo score.py.
Al usar una plantilla para la implementación, primero debe cargar el archivo de puntuación en Blob Storage y, a continuación, registrarlo:
El código siguiente usa el comando az storage blob upload-batch
de la CLI de Azure para cargar el archivo de puntuación:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s cli/endpoints/online/model-1/onlinescoring --account-name $AZURE_STORAGE_ACCOUNT
El código siguiente usa una plantilla para registrar el código:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/code-version.json \
--parameters \
workspaceName=$WORKSPACE \
codeAssetName="score-sklearn" \
codeUri="https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/score"
En este ejemplo se usa el archivo score.py del repositorio que ha clonado o descargado anteriormente:
import os
import logging
import json
import numpy
import joblib
def init():
"""
This function is called when the container is initialized/started, typically after create/update of the deployment.
You can write the logic here to perform init operations like caching the model in memory
"""
global model
# AZUREML_MODEL_DIR is an environment variable created during deployment.
# It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
# Please provide your model's folder name if there is one
model_path = os.path.join(
os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
)
# deserialize the model file back into a sklearn model
model = joblib.load(model_path)
logging.info("Init complete")
def run(raw_data):
"""
This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
In the example we extract the data from the json input and call the scikit-learn model's predict()
method and return the result back
"""
logging.info("model 1: request received")
data = json.loads(raw_data)["data"]
data = numpy.array(data)
result = model.predict(data)
logging.info("Request processed")
return result.tolist()
Se llama a la función init()
cuando se inicializa o se inicia el contenedor. La inicialización suele producirse poco después de crear o actualizar la implementación. La función init
es el lugar para escribir lógica para operaciones de inicialización global, como almacenar en caché el modelo en memoria (como se muestra en este archivo score.py).
Se llama a la función run()
cada vez que se invoca el punto de conexión. Realiza la puntuación y la predicción reales. En este archivo score.py, la función run()
extrae datos de una entrada JSON, llama al método predict()
del modelo scikit-learn y, a continuación, devuelve el resultado de la predicción.
Implementación y depuración local mediante un punto de conexión local
Se recomienda encarecidamente probar la ejecución del punto de conexión localmente para validar y depurar el código y la configuración antes de realizar la implementación en Azure. La CLI de Azure y el SDK de Python admiten puntos de conexión e implementaciones locales, pero las plantillas de Azure Machine Learning Studio y ARM no.
Para realizar la implementación localmente, deberá tener instalado y ejecutándose el motor de Docker. Este motor normalmente se inicia cuando se inicia el equipo. Si no lo hace, puede solucionar el problema aquí.
Puede usar el paquete de Python del servidor HTTP de inferencia de Azure Machine Learning para depurar su script de puntuación localmente sin Docker Engine. La depuración con el servidor de inferencia le ayuda a depurar el script de puntuación antes de implementar en los puntos de conexión locales para que pueda depurar sin verse afectado por las configuraciones del contenedor de implementación.
Para más información sobre cómo depurar puntos de conexión en línea localmente antes de implementar en Azure, consulte Depuración de puntos de conexión en línea.
Implementación del modelo localmente
En primer lugar, cree un punto de conexión. Opcionalmente, para un punto de conexión local, puede omitir este paso. Puede crear la implementación directamente (paso siguiente), que a su vez crea los metadatos necesarios. La implementación de modelos localmente es útil para fines de desarrollo y pruebas.
az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
ml_client.online_endpoints.begin_create_or_update(endpoint, local=True)
Studio no admite puntos de conexión locales. Para conocer los pasos para probar el punto de conexión localmente, consulte las pestañas de la CLI de Azure o Python.
La plantilla no admite puntos de conexión locales. Para conocer los pasos para probar el punto de conexión localmente, consulte las pestañas de la CLI de Azure o Python.
Ahora cree una implementación de nombre blue
en el punto de conexión.
az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
La marca --local
indica a la CLI que implemente el punto de conexión en el entorno de Docker.
ml_client.online_deployments.begin_create_or_update(
deployment=blue_deployment, local=True
)
La marca local=True
indica al SDK que implemente el punto de conexión en el entorno de Docker.
Studio no admite puntos de conexión locales. Para conocer los pasos para probar el punto de conexión localmente, consulte las pestañas de la CLI de Azure o Python.
La plantilla no admite puntos de conexión locales. Para conocer los pasos para probar el punto de conexión localmente, consulte las pestañas de la CLI de Azure o Python.
Comprobación de que la implementación local se realizó correctamente
Compruebe el estado de implementación para ver si el modelo se implementó sin error:
az ml online-endpoint show -n $ENDPOINT_NAME --local
La salida debe tener un aspecto similar al del siguiente JSON. El provisioning_state
parámetro es Succeeded
.
{
"auth_mode": "key",
"___location": "local",
"name": "docs-endpoint",
"properties": {},
"provisioning_state": "Succeeded",
"scoring_uri": "http://localhost:49158/score",
"tags": {},
"traffic": {}
}
ml_client.online_endpoints.get(name=endpoint_name, local=True)
El método devuelve la entidad ManagedOnlineEndpoint
. El provisioning_state
parámetro es Succeeded
.
ManagedOnlineEndpoint({'public_network_access': None, 'provisioning_state': 'Succeeded', 'scoring_uri': 'http://localhost:49158/score', 'swagger_uri': None, 'name': 'endpt-10061534497697', 'description': 'this is a sample endpoint', 'tags': {}, 'properties': {}, 'id': None, 'Resource__source_path': None, 'base_path': '/path/to/your/working/directory', 'creation_context': None, 'serialize': <msrest.serialization.Serializer object at 0x7ffb781bccd0>, 'auth_mode': 'key', '___location': 'local', 'identity': None, 'traffic': {}, 'mirror_traffic': {}, 'kind': None})
Studio no admite puntos de conexión locales. Para conocer los pasos para probar el punto de conexión localmente, consulte las pestañas de la CLI de Azure o Python.
La plantilla no admite puntos de conexión locales. Para conocer los pasos para probar el punto de conexión localmente, consulte las pestañas de la CLI de Azure o Python.
La tabla siguiente contiene los posibles valores para provisioning_state
:
Valor |
Descripción |
Creating |
Se está creando el recurso. |
Updating |
Se está actualizando el recurso. |
Deleting |
Se está eliminando el recurso. |
Succeeded |
La operación de creación o actualización se realizó correctamente. |
Failed |
Error en la operación de creación, actualización o eliminación. |
Invocación del punto de conexión local para puntuar los datos con el modelo
Invoque el punto de conexión para puntuar el modelo mediante el comando invoke
y pasar parámetros de consulta almacenados en un archivo JSON:
az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Si desea usar un cliente REST (como curl), debe tener el URI de puntuación. Para obtener el identificador URI de puntuación, ejecute az ml online-endpoint show --local -n $ENDPOINT_NAME
. En los datos devueltos, busque el atributo scoring_uri
.
Invoque el punto de conexión para puntuar el modelo mediante el comando invoke
y pasar parámetros de consulta almacenados en un archivo JSON.
ml_client.online_endpoints.invoke(
endpoint_name=endpoint_name,
request_file="../model-1/sample-request.json",
local=True,
)
Si desea usar un cliente REST (como curl), debe tener el URI de puntuación. Para obtener el URI de puntuación, ejecute el código siguiente. En los datos devueltos, busque el atributo scoring_uri
.
endpoint = ml_client.online_endpoints.get(endpoint_name, local=True)
scoring_uri = endpoint.scoring_uri
Studio no admite puntos de conexión locales. Para conocer los pasos para probar el punto de conexión localmente, consulte las pestañas de la CLI de Azure o Python.
La plantilla no admite puntos de conexión locales. Para conocer los pasos para probar el punto de conexión localmente, consulte las pestañas de la CLI de Azure o Python.
Revisión de los registros para obtener la salida de la operación de invocación
En el archivo score.py de ejemplo, el método run()
registra alguna salida en la consola.
Puede ver esta salida usando el comando get-logs
:
az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME
Puede ver esta salida usando el método get_logs
:
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, local=True, lines=50
)
Studio no admite puntos de conexión locales. Para conocer los pasos para probar el punto de conexión localmente, consulte las pestañas de la CLI de Azure o Python.
La plantilla no admite puntos de conexión locales. Para conocer los pasos para probar el punto de conexión localmente, consulte las pestañas de la CLI de Azure o Python.
Implementación del punto de conexión en línea en Azure
A continuación, implemente el punto de conexión en línea en Azure. Como procedimiento recomendado para producción, se recomienda registrar el modelo y el entorno que use en la implementación.
Registro del modelo y el entorno
Se recomienda registrar el modelo y el entorno antes de la implementación en Azure para que pueda especificar sus nombres y versiones registrados durante la implementación. Después de registrar los recursos, puede reutilizarlos sin necesidad de cargarlos cada vez que cree implementaciones. Esta práctica aumenta la reproducibilidad y la rastreabilidad.
A diferencia de la implementación en Azure, la implementación local no admite el uso de modelos y entornos registrados. En su lugar, la implementación local usa archivos de modelo local y usa entornos solo con archivos locales.
Para la implementación en Azure, puede usar recursos locales o registrados (modelos y entornos). En esta sección del artículo, la implementación en Azure usa recursos registrados, pero tiene la opción de usar recursos locales en su lugar. Para obtener un ejemplo de una configuración de implementación que carga los archivos locales que se van a usar para la implementación local, consulte Configuración de una implementación.
Para registrar el modelo y el entorno, use 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 independientes en la carpeta endpoints/online/managed/sample 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
.
Cree una definición de YAML para el modelo. Asigne al archivo el nombre model.yml:
$schema: https://azuremlschemas.azureedge.net/latest/model.schema.json
name: my-model
path: ../../model-1/model/
Registrar el modelo:
az ml model create -n my-model -v 1 -f endpoints/online/managed/sample/model.yml
Cree una definición de YAML para el entorno. Asigne al archivo el nombre environment.yml:
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: my-env
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
conda_file: ../../model-1/environment/conda.yaml
Registre el entorno:
az ml environment create -n my-env -v 1 -f endpoints/online/managed/sample/environment.yml
Para más información sobre cómo registrar el modelo como un recurso, consulte Registro de un modelo mediante la CLI de Azure o el SDK de Python. Para obtener más información sobre cómo crear un entorno, consulte Creación de un entorno personalizado.
Registrar un modelo:
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
file_model = Model(
path="../model-1/model/",
type=AssetTypes.CUSTOM_MODEL,
name="my-model",
description="Model created from local file.",
)
ml_client.models.create_or_update(file_model)
Registre el entorno:
from azure.ai.ml.entities import Environment
env_docker_conda = Environment(
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
conda_file="../model-1/environment/conda.yaml",
name="my-env",
description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env_docker_conda)
Para obtener información sobre cómo registrar el modelo como un recurso para que pueda especificar su nombre registrado y su versión durante la implementación, consulte Registro de un modelo mediante la CLI de Azure o el SDK de Python.
Para obtener más información sobre cómo crear un entorno, consulte Creación de un entorno personalizado.
Registro del modelo
Un registro de modelo es una entidad lógica en el área de trabajo que puede contener un único archivo de modelo o un directorio de varios archivos. Como procedimiento recomendado para producción, registre el modelo y el entorno. Antes de crear el punto de conexión y la implementación descritos en este artículo, asegúrese de registrar la carpeta del modelo que contiene el modelo.
Para registrar el modelo de ejemplo, siga estos pasos:
Vaya a Azure Machine Learning Studio.
En el panel izquierdo, seleccione la página 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 en la copia local del repositorio que ha clonado o descargado anteriormente. Cuando se le solicite, seleccione Cargar y espere a que finalice la carga.
Seleccione Siguiente.
Escriba un nombre amigable para el modelo. En los pasos de este artículo se supone que el modelo se denomina model-1
.
Seleccione Siguiente y, a continuación, seleccione Registrar para finalizar el registro.
Para obtener más información sobre cómo trabajar con modelos registrados, consulte Trabajar con modelos registrados.
Creación y registro del entorno
En el panel izquierdo, seleccione la página Entornos .
Seleccione la pestaña Entornos personalizados y, a continuación, elija Crear.
En la página Configuración , escriba un nombre, como my-env para el entorno.
En Seleccionar origen de entorno, elija Utilizar una imagen de Docker existente con el recurso Conda opcional.
Seleccione Siguiente para ir a la página Personalizar .
Copie el contenido del archivo \azureml-examples\cli\endpoints\online\model-1\environment\conda.yaml del repositorio que ha clonado o descargado anteriormente.
Pegue el contenido en el cuadro de texto.
Seleccione Siguiente hasta llegar a la página Crear y, a continuación, seleccione Crear.
Para obtener más información sobre cómo crear un entorno en Studio, consulte Creación de un entorno.
Para registrar el modelo mediante una plantilla, primero debe cargar el archivo de modelo en Blob Storage. En el ejemplo siguiente se usa el comando az storage blob upload-batch
para cargar un archivo en el almacenamiento predeterminado del área de trabajo:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s cli/endpoints/online/model-1/model --account-name $AZURE_STORAGE_ACCOUNT
Después de cargar el archivo, use la plantilla para crear un registro de modelo. En el ejemplo siguiente, el parámetro modelUri
contiene la ruta de acceso al modelo:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/model-version.json \
--parameters \
workspaceName=$WORKSPACE \
modelAssetName="sklearn" \
modelUri="azureml://subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/workspaces/$WORKSPACE/datastores/$AZUREML_DEFAULT_DATASTORE/paths/model/sklearn_regression_model.pkl"
Parte del entorno es un archivo conda que especifica las dependencias del modelo necesarias para hospedar el modelo. En el ejemplo siguiente se muestra cómo leer el contenido del archivo conda en variables de entorno:
CONDA_FILE=$(cat cli/endpoints/online/model-1/environment/conda.yaml)
En el ejemplo siguiente se muestra cómo usar la plantilla para registrar el entorno. El contenido del archivo conda del paso anterior se pasa a la plantilla mediante el condaFile
parámetro :
ENV_VERSION=$RANDOM
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/environment-version.json \
--parameters \
workspaceName=$WORKSPACE \
environmentAssetName=sklearn-env \
environmentAssetVersion=$ENV_VERSION \
dockerImage=mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1 \
condaFile="$CONDA_FILE"
Importante
Al definir un entorno personalizado para la implementación, asegúrese de que el azureml-inference-server-http
paquete se incluye en el archivo conda. Este paquete es esencial para que el servidor de inferencia funcione correctamente. Si no está familiarizado con cómo crear su propio entorno personalizado, use uno de nuestros entornos seleccionados, como minimal-py-inference
(para modelos personalizados que no usan mlflow
) o mlflow-py-inference
(para modelos que usan mlflow
). Puede encontrar estos entornos mantenidos en la pestaña Entornos de la instancia de Azure Machine Learning Studio.
La configuración de implementación usa el modelo registrado que desea implementar y el entorno registrado.
Use los recursos registrados (modelo y entorno) en la definición de implementación. El fragmento de código siguiente muestra el archivo endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml con todas las entradas necesarias para configurar una implementación:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model: azureml:my-model:1
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment: azureml:my-env:1
instance_type: Standard_DS3_v2
instance_count: 1
Para configurar una implementación, use el modelo y el entorno registrados:
model = "azureml:my-model:1"
env = "azureml:my-env:1"
blue_deployment_with_registered_assets = ManagedOnlineDeployment(
name="blue",
endpoint_name=endpoint_name,
model=model,
environment=env,
code_configuration=CodeConfiguration(
code="../model-1/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS3_v2",
instance_count=1,
)
Al hacer la implementación desde Studio, creará un punto de conexión y una implementación para agregarlo. En ese momento, se le pedirá que escriba nombres para el punto de conexión y la implementación.
Uso de diferentes tipos de instancia de CPU y GPU e imágenes
Puede especificar los tipos de instancia de CPU o GPU e imágenes en la definición de implementación para la implementación local y la implementación en Azure.
La definición de implementación en el archivo blue-deployment-with-registered-assets.yml usó una instancia de tipo Standard_DS3_v2
de uso general y la imagen mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
de Docker que no es de GPU. Para cálculo de GPU, elija una versión de tipo de cálculo de GPU y una imagen de Docker para GPU.
Para ver los tipos de instancia de GPU y de uso general admitidos, consulte Lista de SKU de puntos de conexión en línea administrados. Para obtener una lista de las imágenes base de GPU y CPU de Azure Machine Learning, consulte las imágenes base de Azure Machine Learning.
Puede especificar los tipos de instancia de CPU o GPU e imágenes en la configuración de implementación para la implementación local y la implementación en Azure.
Anteriormente, configuró una implementación que usaba una instancia Standard_DS3_v2
de tipo de uso general y una imagen de Docker mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
que no es de GPU. Para cálculo de GPU, elija una versión de tipo de cálculo de GPU y una imagen de Docker para GPU.
Para ver los tipos de instancia de GPU y de uso general admitidos, consulte Lista de SKU de puntos de conexión en línea administrados. Para obtener una lista de las imágenes base de GPU y CPU de Azure Machine Learning, consulte las imágenes base de Azure Machine Learning.
El registro anterior del entorno especifica una imagen de Docker sin GPU mediante el parámetro mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04
, pasando el valor a la plantilla environment-version.json. Para un cómputo de GPU, proporcione un valor para una imagen de Docker de GPU en la plantilla (use el parámetro dockerImage
) y proporcione una versión del tipo de cómputo de GPU a la plantilla online-endpoint-deployment.json
(use el parámetro skuName
).
Para ver los tipos de instancia de GPU y de uso general admitidos, consulte Lista de SKU de puntos de conexión en línea administrados. Para obtener una lista de las imágenes base de GPU y CPU de Azure Machine Learning, consulte las imágenes base de Azure Machine Learning.
A continuación, implemente el punto de conexión en línea en Azure.
Implementar en Azure
Cree el punto de conexión en la nube de Azure:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Cree la implementación denominada blue
en el punto de conexión:
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml --all-traffic
La creación de la implementación puede tardar hasta 15 minutos, en función de si el entorno o la imagen subyacentes se compilan por primera vez. Las implementaciones posteriores que usan el mismo entorno se procesan más rápido.
Si prefiere no bloquear la consola de la CLI, puede agregar la marca --no-wait
al comando. Sin embargo, esta opción detiene la presentación interactiva del estado de implementación.
La marca --all-traffic
en el código az ml online-deployment create
que se usa para crear la implementación asigna el 100 % del tráfico del punto de conexión a la implementación azul recién creada. El uso de esta marca es útil para fines de desarrollo y pruebas, pero para producción, es posible que desee enrutar el tráfico a la nueva implementación a través de un comando explícito. Por ejemplo, use az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100"
.
Creación del punto de conexión:
Con el endpoint
parámetro que definió anteriormente y el MLClient
parámetro que creó anteriormente, ahora puede crear el punto de conexión en el área de trabajo. Este comando inicia la creación del punto de conexión y devuelve una respuesta de confirmación mientras continúa la creación del punto de conexión.
ml_client.online_endpoints.begin_create_or_update(endpoint)
Creación de la implementación:
Con el blue_deployment_with_registered_assets
parámetro que definió anteriormente y el MLClient
parámetro que creó anteriormente, ahora puede crear la implementación en el área de trabajo. Este comando inicia la creación de la implementación y devuelve una respuesta de confirmación mientras continúa la creación de la implementación.
ml_client.online_deployments.begin_create_or_update(blue_deployment_with_registered_assets)
Si prefiere no bloquear la consola de Python, puede agregar la marca no_wait=True
a los parámetros. Sin embargo, esta opción detiene la presentación interactiva del estado de implementación.
# blue deployment takes 100 traffic
endpoint.traffic = {"blue": 100}
ml_client.online_endpoints.begin_create_or_update(endpoint)
Creación de un punto de conexión en línea administrado y la implementación
Use Estudio 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 registró anteriormente en la sección Registrar el modelo y el entorno:
Vaya a Azure Machine Learning Studio.
En el panel izquierdo, seleccione la página Modelos .
Seleccione el modelo denominado model-1.
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 único en la región de Azure. Para obtener más información sobre las reglas de nomenclatura, consulte Límites de puntos de conexión.
Mantenga la selección predeterminada: Administrada para el tipo de proceso.
Mantenga la selección predeterminada: autenticación basada en claves para el tipo de autenticación. Para obtener más información sobre la autenticación, vea Autenticar clientes para puntos de conexión en línea.
Seleccione Siguiente hasta llegar a la página Implementación . Cambie Diagnósticos de Application Insights a Habilitado para que pueda ver gráficos de las actividades del punto de conexión en Studio más adelante y analizar métricas y registros mediante Application Insights.
Seleccione Siguiente para ir a la pestaña Código y entorno. Selecciona las opciones siguientes:
- Seleccione un script de puntuación para la inferencia: examine y seleccione el archivo \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.py del repositorio que ha clonado o descargado anteriormente.
- Sección Seleccionar entorno: seleccione Entornos personalizados y, a continuación, seleccione el entorno my-env:1 que creó anteriormente.
Seleccione Siguiente y acepte los valores predeterminados hasta que se le pida que cree la implementación.
Revise la configuración de implementación y seleccione Crear.
Como alternativa, puede crear un punto de conexión en línea administrado desde la página Puntos de conexión del estudio.
Vaya a Azure Machine Learning Studio.
En el panel izquierdo, seleccione la página Puntos de conexión .
Seleccione + Create (+ Crear).
Esta acción abre una ventana para seleccionar el modelo y especificar detalles sobre el punto de conexión y la implementación. Escriba la configuración del punto de conexión y la implementación tal y como se ha descrito anteriormente y, a continuación, seleccione Crear para crear la implementación.
Use la plantilla para crear un punto de conexión en línea:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/online-endpoint.json \
--parameters \
workspaceName=$WORKSPACE \
onlineEndpointName=$ENDPOINT_NAME \
identityType=SystemAssigned \
authMode=AMLToken \
___location=$LOCATION
Implemente el modelo en el punto de conexión una vez creado el punto de conexión:
resourceScope="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices"
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/online-endpoint-deployment.json \
--parameters \
workspaceName=$WORKSPACE \
___location=$LOCATION \
onlineEndpointName=$ENDPOINT_NAME \
onlineDeploymentName=blue \
codeId="$resourceScope/workspaces/$WORKSPACE/codes/score-sklearn/versions/1" \
scoringScript=score.py \
environmentId="$resourceScope/workspaces/$WORKSPACE/environments/sklearn-env/versions/$ENV_VERSION" \
model="$resourceScope/workspaces/$WORKSPACE/models/sklearn/versions/1" \
endpointComputeType=Managed \
skuName=Standard_F2s_v2 \
skuCapacity=1
Para depurar errores en la implementación, consulte Solución de problemas de implementaciones de puntos de conexión en línea.
Comprobación del estado del punto de conexión en línea
Use el comando show
para mostrar información en el provisioning_state
para el punto de conexión y la implementación:
az ml online-endpoint show -n $ENDPOINT_NAME
Enumere todos los puntos de conexión del área de trabajo en un formato de tabla mediante el comando list
:
az ml online-endpoint list --output table
Compruebe el estado del punto de conexión para ver si el modelo se implementó sin error:
ml_client.online_endpoints.get(name=endpoint_name)
Enumere todos los puntos de conexión del área de trabajo en un formato de tabla mediante el método list
:
for endpoint in ml_client.online_endpoints.list():
print(endpoint.name)
El método devuelve la lista (iterador) de las entidades ManagedOnlineEndpoint
.
Puede obtener más información especificando más parámetros. Por ejemplo, genere la lista de puntos de conexión como una tabla:
print("Kind\tLocation\tName")
print("-------\t----------\t------------------------")
for endpoint in ml_client.online_endpoints.list():
print(f"{endpoint.kind}\t{endpoint.___location}\t{endpoint.name}")
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 buscar información crítica, como 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 el panel izquierdo, seleccione Puntos de conexión para ver una lista de todos los puntos de conexión del área de trabajo.
(Opcional) Cree un filtro en Tipo de proceso para mostrar solo los tipos de proceso administrados .
Seleccione el nombre de un punto de conexión para ver la página Detalles correspondiente.
Las plantillas son útiles para implementar recursos, pero no se pueden usar para enumerar, mostrar o invocar recursos. Use la CLI de Azure, el SDK de Python o Studio para realizar estas operaciones. El código siguiente usa la CLI de Azure.
Usa el comando show
para mostrar información sobre el parámetro provisioning_state
, relacionado con el punto de conexión y la implementación.
az ml online-endpoint show -n $ENDPOINT_NAME
Enumere todos los puntos de conexión del área de trabajo en un formato de tabla mediante el comando list
:
az ml online-endpoint list --output table
Comprobación del estado de la implementación en línea
Compruebe los registros para ver si el modelo se implementó sin errores.
Para ver la salida del registro de un contenedor, use el siguiente comando de la CLI:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
De forma predeterminada, los registros se extraen del contenedor del servidor de inferencia. Para ver los registros del contenedor del inicializador de almacenamiento, agregue la marca --container storage-initializer
. Para más información sobre los registros de implementación, consulte Obtención de registros de contenedor.
Puede ver la salida del registro mediante el método get_logs
:
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, lines=50
)
De forma predeterminada, los registros se extraen del contenedor del servidor de inferencia. Para ver los registros del contenedor del inicializador de almacenamiento, agregue la opción container_type="storage-initializer"
. Para más información sobre los registros de implementación, consulte Obtención de registros de contenedor.
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, lines=50, container_type="storage-initializer"
)
Para ver la salida del registro, seleccione la pestaña Registros en la página del punto de conexión. Si tiene varias implementaciones en el punto de conexión, use la lista desplegable para seleccionar la implementación con el registro que desea ver.
De forma predeterminada, los registros se extraerán del servidor de inferencia. Para ver los registros del contenedor del inicializador de almacenamiento, use la CLI de Azure o el SDK de Python (consulte cada pestaña para más información). Los registros del contenedor del inicializador de almacenamiento proporcionan información sobre si el código y los datos del modelo se descargaron correctamente en el contenedor. Para más información sobre los registros de implementación, consulte Obtención de registros de contenedor.
Las plantillas son útiles para implementar recursos, pero no se pueden usar para enumerar, mostrar o invocar recursos. Use la CLI de Azure, el SDK de Python o Studio para realizar estas operaciones. El código siguiente usa la CLI de Azure.
Para ver la salida del registro de un contenedor, use el siguiente comando de la CLI:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
De forma predeterminada, los registros se extraen del contenedor del servidor de inferencia. Para ver los registros del contenedor del inicializador de almacenamiento, agregue la marca --container storage-initializer
. Para más información sobre los registros de implementación, consulte Obtención de registros de contenedor.
Invocación del punto de conexión para puntuar los datos con el modelo
Use el comando invoke
o un cliente REST de su elección para invocar el punto de conexión y puntuar algunos datos:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Obtenga la clave que se usa para autenticarse en el punto de conexión:
Puede controlar qué entidades de seguridad de Microsoft Entra pueden obtener la clave de autenticación mediante su asignación a un rol personalizado que permita Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action
y Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action
. Para más información sobre cómo administrar la autorización en áreas de trabajo, consulte Administración del acceso a un área de trabajo de Azure Machine Learning.
ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
Use curl para puntuar los datos.
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json
Tenga en cuenta que usa los comandos show
y get-credentials
para obtener las credenciales de autenticación. Observe también que usa la --query
marca para filtrar solo los atributos que son necesarios. Para más información sobre la marca de --query
, consulte Consulta de la salida del comando de la CLI de Azure.
Para ver los registros de invocación, vuelva a ejecutar get-logs
.
Al usar el parámetro MLClient
que creó anteriormente, obtendrá acceso al punto de conexión. A continuación, puede invocar el punto de conexión mediante el invoke
comando con los parámetros siguientes:
endpoint_name
: Nombre del punto de conexión.
request_file
: archivo con datos de solicitud.
deployment_name
: nombre de la implementación específica que se va a probar en un punto de conexión.
Envíe una solicitud de ejemplo mediante un archivo JSON .
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=endpoint_name,
deployment_name="blue",
request_file="../model-1/sample-request.json",
)
Use la pestaña Prueba de la página de 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 Prueba en la página de detalles del punto de conexión.
Use la lista desplegable para seleccionar la implementación que desea probar.
Escriba la entrada de ejemplo.
Seleccione Probar.
Las plantillas son útiles para implementar recursos, pero no se pueden usar para enumerar, mostrar o invocar recursos. Use la CLI de Azure, el SDK de Python o Studio para realizar estas operaciones. El código siguiente usa la CLI de Azure.
Use el comando invoke
o un cliente REST de su elección para invocar el punto de conexión y puntuar algunos datos:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file cli/endpoints/online/model-1/sample-request.json
(Opcional) Actualización de la implementación
Si desea actualizar el código, el modelo o el entorno, actualice el archivo YAML. A continuación, ejecute el comando az ml online-endpoint update
.
Si actualiza el recuento de instancias (para escalar la implementación) junto con otras opciones de configuración del modelo (como código, modelo o entorno) en un solo update
comando, primero se realiza la operación de escalado. Las otras actualizaciones se aplican a continuación. Se recomienda realizar estas operaciones por separado en un entorno de producción.
Para comprender cómo funciona update
:
Abra el archivo online/model-1/onlinescoring/score.py.
Cambie la última línea de la función init()
: después de logging.info("Init complete")
, agregue logging.info("Updated successfully")
.
Guarde el archivo.
Ejecute este comando:
az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml
La actualización mediante YAML es declarativa. Es decir, los cambios en YAML se reflejan en los recursos subyacentes de Resource Manager (puntos de conexión e implementaciones). El enfoque declarativo facilita GitOps: Todos los cambios en los puntos de conexión o implementaciones (incluso instance_count
) pasan por YAML.
Puede usar parámetros de actualización genéricos, como el parámetro --set
, con el comando de la CLI update
para invalidar atributos en YAML o para establecer atributos específicos sin pasarlos en el archivo YAML. El uso de --set
para atributos únicos es especialmente valioso en escenarios de implementación y pruebas. Por ejemplo, para escalar verticalmente el valor de instance_count
de la primera implementación, podría usar la marca --set instance_count=2
. Sin embargo, como YAML no está actualizado, esta técnica no facilita GitOps.
La especificación del archivo YAML no es obligatoria. Por ejemplo, si desea probar diferentes configuraciones de simultaneidad para una implementación específica, puede intentar algo como az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4
. Este enfoque mantiene toda la configuración existente, pero solo actualiza los parámetros especificados.
Dado que modificó la init()
función , que se ejecuta cuando se crea o actualiza el punto de conexión, el mensaje Updated successfully
aparece en los registros. Recupere los registros ejecutando:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
El comando update
también funciona con implementaciones locales. Use el mismo comando az ml online-deployment update
con la marca --local
.
Si desea actualizar el código, el modelo o el entorno, actualice la configuración y, a continuación, ejecute el MLClient
método de online_deployments.begin_create_or_update
para crear o actualizar una implementación.
Si actualiza el recuento de instancias (para escalar la implementación) junto con otras opciones de configuración del modelo (como código, modelo o entorno) en un único begin_create_or_update
método, primero se realiza la operación de escalado. A continuación, se aplican las demás actualizaciones. Se recomienda realizar estas operaciones por separado en un entorno de producción.
Para comprender cómo funciona begin_create_or_update
:
Abra el archivo online/model-1/onlinescoring/score.py.
Cambie la última línea de la función init()
: después de logging.info("Init complete")
, agregue logging.info("Updated successfully")
.
Guarde el archivo.
Ejecute el método:
ml_client.online_deployments.begin_create_or_update(blue_deployment_with_registered_assets)
Dado que modificó la init()
función , que se ejecuta cuando se crea o actualiza el punto de conexión, el mensaje Updated successfully
aparece en los registros. Recupere los registros ejecutando:
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, lines=50
)
El método begin_create_or_update
también funciona con implementaciones locales. Use el mismo método con la marca local=True
.
Actualmente, solo puede realizar actualizaciones en el recuento de instancias de una implementación. Use las instrucciones siguientes para ajustar el número de instancias para ampliar o reducir una implementación individual:
- Abra la página Detalles del punto de conexión y busque la tarjeta de la implementación que desea actualizar.
- Seleccione el icono de edición (icono de lápiz) situado junto al nombre de la implementación.
- Actualice el recuento de instancias asociado a la implementación. Elija entre Predeterminado o Uso de destino para Tipo de escala de implementación.
- Si selecciona Predeterminado, también puede especificar un valor numérico para Recuento de instancias.
- Si selecciona Uso de destino, puede especificar valores que se usarán para los parámetros al escalar automáticamente la implementación.
- Seleccione Actualizar para finalizar la actualización de los recuentos de instancias de la implementación.
Actualmente no hay ninguna opción para actualizar la implementación mediante una plantilla de ARM.
Nota
La actualización de la implementación en esta sección es un ejemplo de una actualización gradual local.
- En el caso de un punto de conexión en línea administrado, la implementación se actualizará a la nueva configuración con un 20 % de nodos a la vez. Es decir, si la implementación tiene 10 nodos, se actualizan 2 nodos a la vez.
- Para un punto de conexión en línea de Kubernetes, el sistema crea de forma iterativa una nueva instancia de implementación con la nueva configuración y elimina la antigua.
- Para producción, considere el despliegue azul-verde, que ofrece una alternativa más segura para actualizar un servicio web.
La escalabilidad automática ejecuta automáticamente la cantidad adecuada de recursos para controlar la carga en la aplicación. Los puntos de conexión en línea administrados admiten el escalado automático mediante la integración con la característica de escalabilidad automática de Azure Monitor. Para configurar el escalado automático, vea Escalado automático de puntos de conexión en línea.
(Opcional) Supervisión del Acuerdo de Nivel de Servicio mediante Azure Monitor
Para ver las métricas y establecer alertas basadas en el Acuerdo de Nivel de Servicio, siga los pasos que se describen en Supervisión de puntos de conexión en línea.
(Opcional) Integración con Log Analytics
El get-logs
comando para la CLI o el get_logs
método para el SDK proporciona solo las últimas cientos de líneas de registros de una instancia seleccionada automáticamente. Sin embargo, Log Analytics proporciona una manera de almacenar y analizar los registros de forma duradera. Para obtener más información sobre cómo usar el registro, consulte Uso de registros.
Eliminación del punto de conexión y la implementación
Use el siguiente comando para eliminar el punto de conexión y todas sus implementaciones subyacentes:
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Use el siguiente comando para eliminar el punto de conexión y todas sus implementaciones subyacentes:
ml_client.online_endpoints.begin_delete(name=endpoint_name)
Si no va a usar el punto de conexión y la implementación, elimínelos. Al eliminar el punto de conexión, también se eliminan todas sus implementaciones subyacentes.
- Vaya a Azure Machine Learning Studio.
- En el panel izquierdo, seleccione la página Puntos de conexión .
- Seleccione un punto de conexión.
- Seleccione Eliminar.
Como alternativa, puede eliminar un punto de conexión en línea administrado directamente seleccionando el icono Eliminar en la página de detalles del punto de conexión.
Use el siguiente comando para eliminar el punto de conexión y todas sus implementaciones subyacentes:
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Contenido relacionado