Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-06-25 GMT+08:00

Implementación como servicio por lotes

Después de preparar una aplicación de IA, puede implementarla como un servicio por lotes. La página Service Deployment > Batch Services muestra todos los servicios por lotes. Puede introducir un nombre de servicio en el cuadro de búsqueda en la esquina superior derecha y hacer clic en para consultar el servicio.

Prerrequisitos

  • Se han preparado datos. Específicamente, ha creado una aplicación de IA en el estado Normal de ModelArts.
  • Los datos que se van a procesar por lotes están listos y se han subido a un directorio OBS.
  • Se ha creado al menos una carpeta vacía en OBS para almacenar la salida.

Fondo

  • Se puede crear un máximo de 1,000 de servicios por lotes.
  • En función de la solicitud de entrada (JSON u otro archivo) definida por la aplicación de IA, se introducen diferentes parámetros. Si la entrada de la aplicación de IA es un archivo JSON, se requiere un archivo de configuración para generar un archivo de asignación. Si la entrada de la aplicación de IA es otro archivo, no se requiere ningún archivo de asignación.
  • Los servicios por lotes solo se pueden implementar en un fondo de recursos público, pero no en un fondo de recursos dedicado.

Procedimiento

  1. Inicie sesión en la consola de gestión del ModelArts. En el panel de navegación izquierdo, elija Service Deployment > Batch Services. De forma predeterminada, se muestra la página Batch Services.
  2. En la lista de servicios por lotes, haga clic en Deploy en la esquina superior izquierda. Se muestra la página Deploy.
  3. Establezca parámetros para un servicio por lotes.
    1. Establezca la información básica, incluidos Name y Description. El nombre se genera de forma predeterminada, por ejemplo, service-bc0d. Puede especificar Name y Description de acuerdo con los requisitos reales.
    2. Establezca otros parámetros, incluidas las configuraciones del grupo de recursos y de la aplicación de IA. Para más detalles, consulte 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 la aplicación y la versión de IA que están en el estado Normal.

      Input Path

      Seleccione el directorio OBS donde se van a cargar los datos. Seleccione una carpeta o un archivo .manifest. Para obtener más información sobre las especificaciones del archivo .manifest, consulte 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. Para usar chino, establezca el formato de codificación de archivo en UTF-8. Puede convertir el formato de codificación de archivo con código o abrir el archivo CSV con el Bloc de notas y establecer el formato de codificación en la ventana que se muestra después de hacer clic en Save As.

      Request Path

      URI utilizado para llamar a la interfaz de aplicación de IA en un servicio por lotes, y también a 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.

      Relación de mapeo

      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/boolean, es necesario establecer el parámetro index. Para obtener más información sobre la regla de asignación, consulte 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 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 Instances en 1, se utiliza el modo de cómputo independiente. Si establece Instances en un valor mayor que 1, se utiliza el modo de cómputo distribuida. 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.

  4. Después de establecer los parámetros, implemente el modelo como un servicio por lotes según se le solicite. En general, los trabajos de implementación de servicios se ejecutan durante un período de tiempo, que puede ser de varios minutos o decenas de minutos, dependiendo de la cantidad de datos y recursos seleccionados.

    Después de implementar un servicio por lotes, se inicia inmediatamente. Durante la carrera, 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 la plataforma de inferencia admiten el archivo de manifiesto. El archivo de manifiesto describe la entrada y salida de datos.

Ejemplo de archivo de manifiesto de entrada
  • Nombre del archivo: test.manifest
  • Contenido del archivo:
    {"source": "/test/data/1.jpg"}
    {"source": "/xgboosterdata/data.csv?AccessKeyId=2Q0V0TQ461N26DDL18RB&Expires=1550611914&Signature=wZBttZj5QZrReDhz1uDzwve8GpY%3D&x-obs-security-token=gQpzb3V0aGNoaW5hixvY8V9a1SnsxmGoHYmB1SArYMyqnQT-ZaMSxHvl68kKLAy5feYvLDM..."}
  • Requisitos de archivo:
    1. La extensión del nombre de archivo debe ser .manifest.
    2. 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.
    3. 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:
      1. <OBS path>/{{Bucket name}}/{{Object name}} se puede utilizar para acceder a sus propios datos de OBS. Puede acceder a la ruta para obtener un objeto en OBS.
        Figura 1 Ruta OBS para almacenar datos
      2. Enlace compartido generado por OBS, incluyendo información de firma. Se aplica al acceso a los datos de OBS de otros usuarios.

Ejemplo de archivo de manifiesto de salida

Se generará un archivo de manifiesto en el directorio de salida de los servicios por lotes.
  • 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-{{index}}.manifest
    │   │   ├── infer-result
    │   │   │ ├── 1.jpg_result.txt
    │   │   │ ├── 2.jpg_result.txt
  • Contenido del archivo infer-result-0.manifest:
    {"source": "/obs-data-bucket/test/data/1.jpg","inference-loc": "<obs path>/test-bucket/test/infer-result/1.jpg_result.txt"}
    {"source ": "/xgboosterdata/2.jpg?AccessKeyId=2Q0V0TQ461N26DDL18RB&Expires=1550611914&Signature=wZBttZj5QZrReDhz1uDzwve8GpY%3D&x-obs-security-token=gQpzb3V0aGNoaW5hixvY8V9a1SnsxmGoHYmB1SArYMyqnQT-ZaMSxHvl68kKLAy5feYvLDMNZWxzhBZ6Q-3HcoZMh9gISwQOVBwm4ZytB_m8sg1fL6isU7T3CnoL9jmvDGgT9VBC7dC1EyfSJrUcqfB...",  "inference-loc": "obs://test-bucket/test/infer-result/2.jpg_result.txt"}
  • Formato de archivo:
    1. El nombre del archivo es infer-result-{{index}}.manifest, donde index es el ID de instancia. Cada instancia en ejecución de un servicio por lotes genera un archivo de manifiesto.
    2. El directorio infer-result se crea en el directorio de manifiesto para almacenar el resultado del procesamiento del archivo.
    3. El contenido del archivo está en formato JSON. Cada fila describe el resultado de salida de una pieza de datos de entrada.
    4. El contenido contiene varios campos:
      1. source: descripción de datos de entrada, que es la misma que la del archivo de manifiesto de entrada
      2. inference-loc: ruta de resultado de salida en el formato de <obs path>/{{Bucket name}}/{{Object name}}

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.

Suponga que el parámetro apis en el archivo de configuración usado por su modelo es el siguiente:

 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
[
    {
        "protocol": "http",
        "method": "post",
        "url": "/",
        "request": {
            "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"
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        }
    }
]

En este punto, la relación de mapeo correspondiente se muestra a continuación. La consola de gestión ModelArts resuelve automáticamente la relación de asignación desde el archivo de configuración. Al llamar a una API de ModelArts escriba usted mismo la relación de asignación de acuerdo con 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
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

Los datos para inferencia, es decir, los datos CSV, están en el siguiente formato. Los datos deben estar separados por comas (,).

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 asignación definida, la solicitud de inferencia se muestra a continuación. El formato es similar al formato utilizado por el servicio en tiempo real.

{
	"data": {
		"req_data": [{
			"input_1": 5.1,
			"input_2": 3.5,
			"input_3": 1.4,
			"input_4": 0.2
		}]
	}
}