Creación de trabajos y datos de entrada para puntos de conexión por lotes
Los punto de conexión por lotes se pueden usar para realizar operaciones por lotes largas con grandes cantidades de datos. Estos datos se pueden colocar en diferentes lugares. Algunos tipos de puntos de conexión por lotes también pueden recibir parámetros literales como entradas. En este artículo se explica cómo especificar esas entradas.
Requisitos previos
Para invocar correctamente un punto de conexión por lotes y crear trabajos, asegúrese de que tiene lo siguiente:
Un punto de conexión e implementación. Si todavía no tiene una, vea Implementación de modelos para la puntuación en puntos de conexión por lotes para crear una implementación.
Permisos para ejecutar una implementación de punto de conexión por lotes. Los roles Científico de datos, Colaborador y Propietario de AzureML se pueden usar para ejecutar una implementación. Para las definiciones de roles personalizados, vea Autorización en puntos de conexión por lotes para conocer los permisos específicos necesarios.
Un token de Microsoft Entra ID válido que represente una entidad de seguridad para invocar el punto de conexión. Esta entidad de seguridad puede ser una entidad de seguridad de usuario o una entidad de servicio. En cualquier caso, una vez invocado un punto de conexión, se crea un trabajo de implementación por lotes en la identidad asociada al token. Puede usar credenciales propias para la invocación, como se indica a continuación:
Use la CLI de Azure para iniciar sesión mediante la autenticación interactiva o de código de dispositivo:
az login
Para más información sobre cómo iniciar trabajos de implementación por lotes mediante distintos tipos de credenciales, vea Procedimiento para ejecutar trabajos mediante distintos tipos de credenciales.
El clúster de proceso donde se implementa el punto de conexión tiene acceso para leer los datos de entrada.
Sugerencia
Si usa un almacén de datos sin credenciales o una cuenta externa de Azure Storage como entrada de datos, asegúrese de configurar clústeres de proceso para el acceso a datos. La identidad administrada del clúster de proceso se usa para montar la cuenta de almacenamiento. La identidad del trabajo (invocador) se sigue usando para leer los datos subyacentes, lo que le permite lograr un control de acceso pormenorizado.
Conceptos básicos de la creación de trabajos
Para crear un trabajo a partir de un punto de conexión por lotes, hay que invocarlo. La invocación se puede realizar mediante la CLI de Azure, el SDK de Azure Machine Learning para Python o una llamada a la API REST. En los ejemplos siguientes se muestran los conceptos básicos de la invocación de un punto de conexión por lotes que recibe una única carpeta de datos de entrada para su procesamiento. Consulte Descripción de las entradas y salidas para obtener ejemplos con distintas entradas y salidas.
Use la operación invoke
en puntos de conexión por lotes:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
Invocación de una implementación específica
Los puntos de conexión por lotes pueden hospedar varias implementaciones en el mismo punto de conexión. El punto de conexión predeterminado se usa a menos que el usuario especifique lo contrario. Puede cambiar la implementación que se usa de la siguiente manera:
Use el argumento --deployment-name
o -d
para especificar el nombre de la implementación:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--deployment-name $DEPLOYMENT_NAME \
--input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
Configuración de las propiedades del trabajo
Puede configurar algunas de las propiedades del trabajo creado en el momento de la invocación.
Nota:
La configuración de propiedades de trabajo solo está disponible en puntos de conexión por lotes con implementaciones de componentes de canalización por momento.
Configurar el nombre del experimento
Use el argumento --experiment-name
para especificar el nombre del experimento:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--experiment-name "my-batch-job-experiment" \
--input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
Reconocimiento de entradas y salidas
Los puntos de conexión por lotes proporcionan una API duradera que los consumidores pueden usar para crear trabajos por lotes. La misma interfaz se puede usar para especificar las entradas y las salidas que espera la implementación. Use entradas para pasar cualquier información que el punto de conexión necesite para realizar el trabajo.
Los puntos de conexión por lotes admiten dos tipos de entradas:
- Entradas de datos, que son punteros a una ubicación de almacenamiento específica o a un recurso de Azure Machine Learning.
- Entradas literales, que son valores literales (como números o cadenas) que desea pasar al trabajo.
El número y el tipo de entradas y salidas dependen del tipo de implementación por lotes. Las implementaciones de modelos siempre requieren una entrada de datos y generan una salida de datos. No se admiten entradas literales. Sin embargo, las implementaciones de componentes de canalización proporcionan una construcción más general para compilar puntos de conexión y permiten especificar cualquier número de entradas (datos y literales) y salidas.
En la tabla siguiente se resumen las entradas y salidas de las implementaciones por lotes:
Tipo de implementación | Número de entrada | Tipos de entrada admitidos | Número de salida | Tipos de salida admitidos |
---|---|---|---|---|
Implementación de modelo | 1 | Entradas de datos | 1 | Salidas de datos |
Implementación de componentes de canalización | [0..N] | Entradas de datos y entradas literales | [0..N] | Salidas de datos |
Sugerencia
Las entradas y salidas siempre se denominan. Esos nombres sirven como claves para identificarlos y pasar el valor real durante la invocación. En el caso de las implementaciones de modelos, ya que siempre requieren una entrada y salida, el nombre se omitirá durante la invocación. Puede asignar el nombre que mejor describa el caso de uso, como "sales_estimation".
Entradas de datos
Las entradas de datos hacen referencia a entradas que apuntan a una ubicación donde se colocan los datos. Dado que los puntos de conexión por lotes suelen consumir grandes cantidades de datos, no se pueden pasar los datos de entrada como parte de la solicitud de invocación. En su lugar, especifique la ubicación donde debería ir el punto de conexión por lotes para buscar los datos. Los datos de entrada se montan y transmiten en el proceso de destino para mejorar el rendimiento.
Los puntos de conexión por lotes admiten la lectura de archivos ubicados en las siguientes opciones de almacenamiento:
- Recursos de datos de Azure Machine Learning, incluida la carpeta (
uri_folder
) y el archivo (uri_file
). - Almacenes de datos de Azure Machine Learning, incluidos Azure Blob Storage, Azure Data Lake Storage Gen1 y Azure Data Lake Storage Gen2.
- Cuentas de Azure Storage, incluidos Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2 y Azure Blob Storage.
- Carpetas o archivos de datos locales (CLI de Azure Machine Learning o SDK de Azure Machine Learning para Python). Sin embargo, esa operación da lugar a que los datos locales se carguen en el almacén de datos de Azure Machine Learning predeterminado del área de trabajo en la que está trabajando.
Importante
Aviso de desuso: los conjuntos de datos de tipo FileDataset
(V1) están en desuso y se retirarán en el futuro. Los puntos de conexión por lotes existentes que dependen de esta funcionalidad seguirán funcionando, pero los puntos de conexión por lotes creados con CLIv2 (2.4.0 y versiones posteriores) de disponibilidad general o la API REST de disponibilidad general (2022-05-01 y versiones posteriores) no admitirán el conjunto de datos V1.
Entradas literales
Las entradas literales hacen referencia a entradas que se pueden representar y resolver en tiempo de invocación, como cadenas, números y valores booleanos. Normalmente, se usan entradas literales para pasar parámetros al punto de conexión como parte de una implementación de componentes de canalización. Los puntos de conexión por lotes admiten los siguientes tipos literales:
string
boolean
float
integer
Las entradas literales solo se admiten en implementaciones de componentes de canalización. Consulte Creación de trabajos con entradas literales para obtener información sobre cómo especificarlos.
Salidas de datos
Las salidas de datos hacen referencia a la ubicación donde se deberán colocar los resultados de un trabajo por lotes. Las salidas se identifican por nombre y Azure Machine Learning asignará automáticamente una ruta de acceso única a cada salida con nombre. Sin embargo, puede especificar otra ruta de acceso si es necesario.
Importante
Los puntos de conexión de Batch solo admiten la escritura de salidas en almacenes de datos de Azure Blob Storage. Si necesita escribir en una cuenta de almacenamiento con espacios de nombres jerárquicos habilitados (también conocidos como Azure Datalake Gen2 o ADLS Gen2), observe que este servicio de almacenamiento se puede registrar como un almacén de datos de Azure Blob Storage, ya que los servicios son totalmente compatibles. De este modo, puede escribir salidas de puntos de conexión por lotes en ADLS Gen2.
Creación de trabajos con entradas de datos
En los siguientes ejemplos se muestra cómo crear trabajos que toman entradas de datos de recursos de datos, almacenes de datos y cuentas de Azure Storage.
Entrada de datos desde un recurso de datos
Los recursos de datos de Azure Machine Learning (anteriormente conocidos como conjuntos de datos) se admiten como entradas para trabajos. Siga estos pasos para ejecutar un trabajo de punto de conexión por lotes mediante datos almacenados en un recurso de datos registrado en Azure Machine Learning:
Advertencia
Actualmente no se admiten los recursos de datos de tipo Table (MLTable
).
Primero, cree el recurso de datos. Este recurso de datos consta de una carpeta con varios archivos CSV que procesará en paralelo mediante puntos de conexión por lotes. Puede omitir este paso si los datos ya están registrados como un recurso de datos.
Cree una definición de recurso de datos en
YAML
:heart-dataset-unlabeled.yml
$schema: https://azuremlschemas.azureedge.net/latest/data.schema.json name: heart-dataset-unlabeled description: An unlabeled dataset for heart classification. type: uri_folder path: heart-classifier-mlflow/data
A continuación, cree el recurso de datos:
az ml data create -f heart-dataset-unlabeled.yml
Cree la entrada o solicitud:
DATASET_ID=$(az ml data show -n heart-dataset-unlabeled --label latest | jq -r .id)
Nota
El identificador de los recursos de datos tendría el aspecto de
/subscriptions/<subscription>/resourcegroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/data/<data-asset>/versions/<version>
. También puede usarazureml:/<datasset_name>@latest
como una manera de especificar la entrada.Ejecute el punto de conexión:
Use el argumento
--set
para especificar la entrada:az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$DATASET_ID
Para un punto de conexión que atiende una implementación de modelo, puede usar el argumento
--input
para especificar la entrada de datos, ya que una implementación de modelos siempre requiere una entrada de datos.az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $DATASET_ID
El argumento
--set
tiende a generar comandos largos cuando se especifican varias entradas. En esos casos, coloque las entradas en un archivoYAML
y use--file
para especificar las entradas que necesita para invocar el punto de conexión.inputs.yml
inputs: heart_dataset: azureml:/<datasset_name>@latest
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
Entrada de datos desde almacenes de datos
Los trabajos de implementaciones por lotes pueden hacer referencia directamente a los datos de los almacenes de datos registrados de Azure Machine Learning. En este ejemplo, primero va a cargar algunos datos en el almacén de datos predeterminado del área de trabajo de Azure Machine Learning y, a continuación, ejecutar una implementación por lotes en él. Siga estos pasos para ejecutar un trabajo de punto de conexión por lotes mediante los datos almacenados en un almacén de datos.
Acceda al almacén de datos predeterminado del área de trabajo de Azure Machine Learning. Si los datos están en un almacén diferente, puede usar ese almacén en su lugar. No es necesario usar el almacén de datos predeterminado.
DATASTORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
Nota
El identificador de los almacenes de datos tendría el aspecto de
/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>
.Sugerencia
El almacén de datos de blobs predeterminado en un área de trabajo se denomina workspaceblobstore. Puede omitir este paso si ya conoce el identificador de recurso del almacén de datos predeterminado en el área de trabajo.
Debe cargar algunos datos de ejemplo en el almacén de datos. En este ejemplo se supone que ya ha cargado los datos de ejemplo incluidos en el repositorio de la carpeta
sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/data
en la carpetaheart-disease-uci-unlabeled
de la cuenta de almacenamiento de blobs. Asegúrese de que lo ha hecho antes de continuar.Cree la entrada o solicitud:
Coloque la ruta de acceso del archivo en la variable siguiente:
DATA_PATH="heart-disease-uci-unlabeled" INPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
Nota:
Vea cómo se anexa la ruta de acceso
paths
al identificador de recurso del almacén de datos para indicar que lo siguiente es una ruta de acceso dentro del mismo.Sugerencia
También puede usar
azureml://datastores/<data-store>/paths/<data-path>
como una manera de especificar la entrada.Ejecute el punto de conexión:
Use el argumento
--set
para especificar la entrada:az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_PATH
Para un punto de conexión que atiende una implementación de modelo, puede usar el argumento
--input
para especificar la entrada de datos, ya que una implementación de modelos siempre requiere una entrada de datos.az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_PATH --input-type uri_folder
El argumento
--set
tiende a generar comandos largos cuando se especifican varias entradas. En esos casos, coloque las entradas en un archivoYAML
y use--file
para especificar las entradas que necesita para invocar el punto de conexión.inputs.yml
inputs: heart_dataset: type: uri_folder path: azureml://datastores/<data-store>/paths/<data-path>
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
Si los datos fueran un archivo, use
uri_file
como tipo en su lugar.
Entrada de datos desde cuentas de Azure Storage
Los puntos de conexión por lotes de Azure Machine Learning pueden leer datos de ubicaciones en la nube en cuentas de Azure Storage, tanto públicas como privadas. Siga estos pasos para ejecutar un trabajo de punto de conexión por lotes mediante los datos almacenados en una cuenta de almacenamiento:
Nota:
Consulte la sección Configurar clústeres de proceso para el acceso a datos para obtener más información sobre la configuración adicional necesaria para leer correctamente los datos de las cuentas de almacenamiento.
Cree la entrada o solicitud:
INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
Si los datos son un archivo:
INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data/heart.csv"
Ejecute el punto de conexión:
Use el argumento
--set
para especificar la entrada:az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_DATA
Para un punto de conexión que atiende una implementación de modelo, puede usar el argumento
--input
para especificar la entrada de datos, ya que una implementación de modelos siempre requiere una entrada de datos.az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_DATA --input-type uri_folder
El argumento
--set
tiende a generar comandos largos cuando se especifican varias entradas. En esos casos, coloque las entradas en un archivoYAML
y use--file
para especificar las entradas que necesita para invocar el punto de conexión.inputs.yml
inputs: heart_dataset: type: uri_folder path: https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
Si los datos fueran un archivo, use
uri_file
como tipo en su lugar.
Creación de trabajos con entradas literales
Las implementaciones de componentes de canalización pueden tomar entradas literales. En el ejemplo siguiente, se muestra cómo especificar una entrada denominada score_mode
, de tipo string
, con un valor de append
:
Coloque las entradas en un archivo YAML
y use --file
para especificar las entradas necesarias para invocar el punto de conexión.
inputs.yml
inputs:
score_mode:
type: string
default: append
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
También puede usar el argumento --set
para especificar el valor. Sin embargo, tiende a generar comandos largos cuando se especifican varias entradas:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--set inputs.score_mode.type="string" inputs.score_mode.default="append"
Creación de trabajos con salidas de datos
En el ejemplo siguiente, se muestra cómo cambiar la ubicación en la cual se coloca una salida denominada score
. Por motivos de exhaustividad, estos ejemplos también configuran una entrada denominada heart_dataset
.
Use el almacén de datos predeterminado en el área de trabajo de Azure Machine Learning para guardar las salidas. Es posible usar cualquier otro almacén de datos del área de trabajo siempre que sea una cuenta de almacenamiento de blobs.
DATASTORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
Nota
El identificador de los almacenes de datos tendría el aspecto de
/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>
.Creación de una salida de datos:
DATA_PATH="batch-jobs/my-unique-path" OUTPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
Para mayor exhaustividad, cree también una entrada de datos:
INPUT_PATH="https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
Nota:
Vea cómo se anexa la ruta de acceso
paths
al identificador de recurso del almacén de datos para indicar que lo siguiente es una ruta de acceso dentro del mismo.Ejecute la implementación:
Use el argumento
--set
para especificar la entrada:az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --set inputs.heart_dataset.path=$INPUT_PATH \ --set outputs.score.path=$OUTPUT_PATH
Contenido relacionado
Comentaris
https://aka.ms/ContentUserFeedback.
Properament: al llarg del 2024 eliminarem gradualment GitHub Issues com a mecanisme de retroalimentació del contingut i el substituirem per un nou sistema de retroalimentació. Per obtenir més informació, consulteu:Envieu i consulteu els comentaris de