Despliegue como servicio por lotes
Después de preparar una aplicación de IA, puede desplegarla como un servicio por lotes. La página Service Deployment > Batch Services muestra todos los servicios por lotes.
Requisitos previos
- Hay disponible una aplicación de ModelArts en estado Normal.
- Los datos que se van a procesar por lotes están listos y se han subido a un directorio de OBS.
- Se ha creado al menos una carpeta vacía en OBS para almacenar la salida.
Contexto
- Se puede crear un máximo de 1,000 de servicios por lotes.
- En función de la solicitud de entrada (JSON o archivo) definida por la aplicación de IA, se ingresan diferentes parámetros. Si la entrada de la aplicación de IA es un archivo de JSON, se requiere un archivo de configuración para generar un archivo de asignación. Si la entrada de la aplicación AI es un archivo, no se requiere ningún archivo de mapeo.
- Los servicios por lotes solo se pueden desplegar en un grupo de recursos público, pero no en un grupo de recursos dedicado.
Procedimiento
- Inicie sesión en la consola de gestión de ModelArts. En el panel de navegación izquierdo, elija Service Deployment > Batch Services. De forma predeterminada, se muestra la página Batch Services.
- En la lista de servicios por lotes, haga clic en Deploy en la esquina superior izquierda. Se muestra la página Deploy.
- Establezca parámetros para un servicio por lotes.
- Configure la información básica, como Name y Descripción. El nombre se genera de forma predeterminada, por ejemplo, service-bc0d. Puede especificar Name y Description de acuerdo con los requisitos reales.
- Establezca otros parámetros, incluidas las configuraciones del grupo de recursos y de la aplicación de IA. Para más detalles, véase Tabla 1.
Tabla 1 Parámetros Parámetro
Descripción
AI Application Source
Seleccione My AI Applications o My Subscriptions según sus requisitos.
AI Application and Version
Seleccione una aplicación de IA y su versión que se ejecuten correctamente.
Input Path
Seleccione el directorio de OBS donde se almacenan los datos cargados. Seleccione una carpeta o un archivo .manifest. Para obtener detalles sobre las especificaciones del archivo .manifest, véase Especificaciones del archivo de manifiesto.
NOTA:- Si los datos de entrada son una imagen, asegúrese de que el tamaño de una sola imagen sea inferior a 10 MB.
- Si los datos de entrada están en formato CSV, asegúrese de que no se incluya ningún carácter chino.
- Si los datos de entrada están en formato de CSV, asegúrese de que el tamaño del archivo no exceda los 12 MB.
Request Path
URL utilizada para invocar a la API de aplicación de IA en un servicio por lotes, y también la ruta de solicitud del servicio de aplicación de IA. Su valor se obtiene del campo url de apis en el archivo de configuración de la aplicación de IA.
Mapping Relationship
Si la entrada de la aplicación de IA está en formato JSON, el sistema genera automáticamente la asignación basada en el archivo de configuración correspondiente a la aplicación de IA. Si la entrada de la aplicación de IA es otro archivo, la asignación no es necesaria.
Archivo de asignación generado automáticamente. Introduzca el índice de campo correspondiente a cada parámetro en el archivo CSV. El índice comienza desde 0.
Regla de asignación: La regla de asignación proviene del parámetro de entrada (request) en el archivo de configuración del modelo config.json. Cuando type se establece en string, number, integer, or boolean, se requiere configurar el parámetro de index. Para obtener detalles sobre la regla de mapeo, véase Ejemplo de mapeo.
El índice debe ser un entero positivo a partir de 0. Si el valor de index no cumple con la regla, este parámetro se omite en la solicitud. Después de configurar la regla de asignación, los datos de CSV correspondientes deben estar separados por comas (,).
Output Path
Seleccione la ruta para guardar el resultado de la predicción por lotes. Puede seleccionar la carpeta vacía que cree.
Specifications
El sistema proporciona recursos informáticos disponibles que coinciden con su aplicación de IA. Seleccione un recurso disponible en la lista desplegable.
Por ejemplo, si el modelo proviene de un proyecto ExeML, los recursos de cálculo se asocian automáticamente a las especificaciones de ExeML para su uso.
Compute Nodes
Establezca el número de instancias para la versión actual de la aplicación de IA. Si establece el número de nodos en 1, se utilizará el modo de cómputo independiente. Si establece el número de nodos en un valor mayor que 1, se utilizará el modo de cómputo distribuido. Seleccione un modo de cómputo basado en los requisitos reales.
Environment Variable
Establezca las variables de entorno e inyéctelas en el pod. Para garantizar la seguridad de los datos, no introduzca información confidencial, como contraseñas de texto sin formato, en las variables de entorno.
Timeout
Tiempo de espera de un único modelo, incluido el tiempo de despliegue y de inicio. El valor predeterminado es 20 minutos. El valor debe estar dentro del rango de 3 a 120.
Runtime Log Output
Esta función está deshabilitada por defecto. Los logs de ejecución de los servicios por lotes solo se almacenan en el sistema de log de ModelArts. Puede consultar los logs de ejecución en la página de fichas Logs de la página de detalles del servicio.
Si esta función está habilitada, los logs de ejecución de los servicios por lotes se exportan y almacenan en Log Tank Service (LTS). LTS crea automáticamente grupos de logs y flujos de logs y cachés ejecuta logs generados en un plazo de siete días de forma predeterminada. Para obtener más detalles sobre la función de gestión de logs LTS, véase Log Tank Service.
NOTA:- Esto no se puede deshabilitar una vez que está habilitado.
- Se le facturarán las funciones de consulta de logs y almacenamiento de logs proporcionadas por LTS. Para obtener más detalles, véase la sección Detalles de precios de LTS.
- Después de establecer los parámetros, despliegue el modelo como un servicio por lotes según se le solicite. El despliegue de un servicio generalmente requiere un período de tiempo, que puede ser de varios minutos o decenas de minutos, dependiendo de la cantidad de datos y recursos.
Después de desplegar un servicio por lotes, se inicia inmediatamente. Durante el funcionamiento, se le cobrará en función de los recursos seleccionados.
Puede ir a la lista de servicios por lotes para ver la información básica sobre el servicio por lotes. En la lista de servicios por lotes, después de que el estado del servicio recién implementado cambie de Deploying a Running, el servicio se implementa correctamente.
Especificaciones del archivo de manifiesto
Los servicios por lotes de ModelArts soportan archivos de manifiesto, que describen la entrada y salida de datos.
- Nombre del archivo: test.manifest
- Contenido del archivo:
{"source": "obs://test/data/1.jpg"} {"source": "s3://test/data/2.jpg"} {"source": "https://infers-data.obs.cn-north-1.myhuaweicloud.com:443/xgboosterdata/data.csv?AccessKeyId=2Q0V0TQ461N26DDL18RB&Expires=1550611914&Signature=wZBttZj5QZrReDhz1uDzwve8GpY%3D&x-obs-security-token=gQpzb3V0aGNoaW5hixvY8V9a1SnsxmGoHYmB1SArYMyqnQT-ZaMSxHvl68kKLAy5feYvLDM..."}
- Requerimientos del archivo:
- La extensión del nombre de archivo debe ser .manifest.
- El contenido del archivo está en formato JSON. Cada fila describe un fragmento de datos de entrada, que debe ser preciso para un archivo en lugar de una carpeta.
- Se debe definir un campo source para el contenido JSON. El valor del campo es la dirección URL OBS del archivo en cualquiera de los siguientes formatos:
- Ruta de acceso de bucket <obs path>{{Bucket name}}/{{Object name}}/File name que se utiliza para acceder a los datos de OBS. Puede acceder a la ruta para obtener un objeto en OBS. <obs path> puede ser obs:// o s3://.
- Enlace compartido generado por OBS, incluida la información de firma. Se aplica al acceso a los datos de OBS de otros usuarios. El enlace tiene un período de validez. Realizar operaciones dentro del período.
Ejemplo de archivo de manifiesto de salida
- Supongamos que la ruta de salida es //test-bucket/test/. El resultado se almacena en la siguiente ruta:
OBS bucket/directory name ├── test-bucket │ ├── test │ │ ├── infer-result-{{task_id}}.manifest │ │ ├── infer-result │ │ │ ├── 1.jpg_result.txt │ │ │ ├── 2.jpg_result.txt
- Contenido del archivo infer-result-0.manifest:
{"source": "obs://obs-data-bucket/test/data/1.jpg","result":"SUCCESSFUL","inference-loc": "obs://test-bucket/test/infer-result/1.jpg_result.txt"} {"source": "s3://obs-data-bucket/test/data/2.jpg","result":"FAILED","error_message": "Download file failed."} {"source ": "https://infers-data.obs.xxx.com:443/xgboosterdata/2.jpg?AccessKeyId=2Q0V0TQ461N26DDL18RB&Expires=1550611914&Signature=wZBttZj5QZrReDhz1uDzwve8GpY%3D&x-obs-security-token=gQpzb3V0aGNoaW5hixvY8V9a1SnsxmGoHYmB1SArYMyqnQT-ZaMSxHvl68kKLAy5feYvLDMNZWxzhBZ6Q-3HcoZMh9gISwQOVBwm4ZytB_m8sg1fL6isU7T3CnoL9jmvDGgT9VBC7dC1EyfSJrUcqfB_N0ykCsfrA1Tt_IQYZFDu_HyqVk-GunUcTVdDfWlCV3TrYcpmznZjliAnYUO89kAwCYGeRZsCsC0ePu4PHMsBvYV9gWmN9AUZIDn1sfRL4voBpwQnp6tnAgHW49y5a6hP2hCAoQ-95SpUriJ434QlymoeKfTHVMKOeZxZea-JxOvevOCGI5CcGehEJaz48sgH81UiHzl21zocNB_hpPfus2jY6KPglEJxMv6Kwmro-ZBXWuSJUDOnSYXI-3ciYjg9-h10b8W3sW1mOTFCWNGoWsd74it7l_5-7UUhoIeyPByO_REwkur2FOJsuMpGlRaPyglZxXm_jfdLFXobYtzZhbul4yWXga6oxTOkfcwykTOYH0NPoPRt5MYGYweOXXxFs3d5w2rd0y7p0QYhyTzIkk5CIz7FlWNapFISL7zdhsl8RfchTqESq94KgkeqatSF_iIvnYMW2r8P8x2k_eb6NJ7U_q5ztMbO9oWEcfr0D2f7n7Bl_nb2HIB_H9tjzKvqwngaimYhBbMRPfibvttW86GiwVP8vrC27FOn39Be9z2hSfJ_8pHej0yMlyNqZ481FQ5vWT_vFV3JHM-7I1ZB0_hIdaHfItm-J69cTfHSEOzt7DGaMIES1o7U3w%3D%3D","result":"SUCCESSFUL","inference-loc": "obs://test-bucket/test/infer-result/2.jpg_result.txt"}
- Formato de archivo:
- El nombre del archivo es infer-result-{{task_id}}.manifest, que task_id es el ID de la tarea por lotes, que es único para un servicio por lotes.
- Si es necesario procesar un gran número de archivos, se pueden generar varios archivos de manifiesto con el mismo sufijo .manifest y se distinguen por sufijo, por ejemplo, infer-result-{{task_id}}_1.manifest.
- El directorio infer-result-{{task_id}} se crea en el directorio del manifiesto para almacenar el resultado del procesamiento del archivo.
- El contenido del archivo está en formato de JSON. Cada fila describe el resultado de salida de una pieza de datos de entrada.
- El archivo contiene varios campos:
- source: descripción de datos de entrada, que es la misma que la del archivo de manifiesto de entrada
- result: resultado de procesamiento de archivos, que puede ser SUCCESSFUL FAILED
- inference-loc: ruta de resultados de salida. Este campo está disponible cuando el resultado es SUCCESSFUL. El formato es obs://{{Bucket name}}/{Object name}.
- error_message: información de error. Este campo está disponible cuando el resultado es FAILED.
Ejemplo de mapeo
En el ejemplo siguiente se muestra la relación entre el archivo de configuración, la regla de asignación, los datos CSV y la solicitud de inferencia.
A continuación se utiliza un archivo para la predicción como ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
[ { "method": "post", "url": "/", "request": { "Content-type": "multipart/form-data", "data": { "type": "object", "properties": { "data": { "type": "object", "properties": { "req_data": { "type": "array", "items": [ { "type": "object", "properties": { "input_1": { "type": "number" }, "input_2": { "type": "number" }, "input_3": { "type": "number" }, "input_4": { "type": "number" } } } ] } } } } } } } ] |
La consola de gestión de ModelArts resuelve automáticamente la relación de asignación desde el archivo de configuración como se muestra a continuación. Al invocar a una API de ModelArts, configure la asignación siguiendo la regla.
{ "type": "object", "properties": { "data": { "type": "object", "properties": { "req_data": { "type": "array", "items": [ { "type": "object", "properties": { "input_1": { "type": "number", "index": 0 }, "input_2": { "type": "number", "index": 1 }, "input_3": { "type": "number", "index": 2 }, "input_4": { "type": "number", "index": 3 } } } ] } } } } }
Múltiples partes de datos de CSV para inferencia se separan con comas (,). A continuación se muestra un ejemplo:
5.1,3.5,1.4,0.2 4.9,3.0,1.4,0.2 4.7,3.2,1.3,0.2
Dependiendo de la relación de mapeo definida, a continuación se muestra la solicitud de inferencia, cuyo formato es similar al de los servicios en tiempo real.
{ "data": { "req_data": [{ "input_1": 5.1, "input_2": 3.5, "input_3": 1.4, "input_4": 0.2 }] } }