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.
Centro de ayuda> ModelArts> Implementación de inferencia> Especificaciones de Inferencia> Especificaciones del paquete de modelo> Especificaciones para compilar el archivo de configuración del modelo
Actualización más reciente 2024-06-25 GMT+08:00

Especificaciones para compilar el archivo de configuración del modelo

Un desarrollador de modelos necesita compilar un archivo de configuración al publicar un modelo. El archivo de configuración del modelo describe el uso del modelo, el marco informático, la precisión, el paquete de dependencia del código de inferencia y la API del modelo.

Formato de archivo de configuración

El archivo de configuración está en formato JSON. Tabla 1 describe los parámetros.

Tabla 1 Parámetros

Parámetro

Obligatorio

Tipo de datos

Descripción

model_algorithm

String

Algoritmo del modelo, que es establecido por el desarrollador del modelo para ayudar a los usuarios del modelo a entender el uso del modelo. El valor debe comenzar con una letra y no contener más de 36 caracteres. Los caracteres chinos y los caracteres especiales (&!'\"<>=) no están permitidos. Los algoritmos de modelos comunes incluyen image_classification (clasificación de imágenes), object_detection (detección de objetos) y predict_analysis (análisis de predicción).

model_type

String

Modelo de motor de IA, que indica el marco de cálculo utilizado por un modelo. Los motores comunes de IA e Image son compatibles.

  • Para obtener más información sobre los motores de IA compatibles, consulte Motores de IA compatibles para la inferencia de ModelArts.
  • Si model_type se establece en Image, la aplicación de IA se crea mediante una imagen personalizada. En este caso, el parámetro swr_location es obligatorio. Para obtener más información sobre las especificaciones para imágenes personalizadas.

runtime

No

String

Entorno de tiempo de ejecución del modelo. Python2.7 se usa por defecto. El valor de runtime depende del valor de model_type. Si model_type se establece en Image, no es necesario establecer runtime. Si model_type se establece en otro framework de uso frecuente, seleccione el motor y el entorno de tiempo de ejecución. Para obtener más información sobre los entornos de ejecución admitidos, consulte Motores de IA compatibles para la inferencia de ModelArts.

Si su modelo necesita ejecutarse en una CPU o GPU especificada, seleccione el tiempo de ejecución basado en la información del sufijo. Si el tiempo de ejecución no contiene la información de CPU o GPU, lea la descripción de cada tiempo de ejecución en Motores de IA compatibles para inferencia de ModelArts.

swr_location

No

String

Dirección de imagen de SWR.

  • Si importa un metamodelo de imagen personalizado desde una imagen contenedora, no es necesario establecer swr_location.
  • Si importa un metamodelo de imagen personalizado de OBS (no recomendado) y establece model_type en Image, debe establecer swr_location. swr_location indica la dirección de la imagen Docker en SWR, indicando que la imagen Docker en SWR se usa para publicar el modelo.

metrics

No

Object

Información de precisión del modelo, incluido el valor promedio, la tasa de recuperación, la precisión y la precisión. Para obtener más información sobre la estructura de objeto metrics, consulte Tabla 2.

El resultado se muestra en el área de precisión del modelo de la página de detalles de la aplicación de IA.

apis

No

api array

Formato de las solicitudes recibidas y devueltas por un modelo. El valor es dato de estructura.

Es la matriz API RESTful proporcionada por un modelo. Para obtener más información sobre la estructura de datos de la API, consulte Tabla 3.

  • Cuando model_type se establece en Image, es decir, en el escenario de modelo de una imagen personalizada, las API con diferentes rutas se pueden declarar en apis basándose en la ruta de solicitud expuesta por la imagen.
  • Cuando model_type no es Image, solo una API cuya ruta de solicitud es / puede declararse en apis porque el motor de IA preconfigurado expone solo una API de inferencia cuya ruta de solicitud es /.

dependencies

No

dependency array

Paquete del que depende el código de inferencia del modelo, que son datos de estructura.

Los desarrolladores de modelos deben proporcionar el nombre del paquete, el modo de instalación y las restricciones de versión. Solo se admite el modo de instalación pip. Tabla 6 describe la matriz de dependencias.

Si el paquete modelo no contiene el archivo customize_service.py, no es necesario establecer este parámetro. No se pueden instalar paquetes de dependencias para modelos de imágenes personalizados.

NOTA:

El parámetro dependencies admite múltiples matrices de estructura de dependencias en formato de lista y se aplica a escenarios en los que los paquetes de instalación tienen relaciones de dependencia.Packages on the top are installed first. The wheel package on premises can be used for installation. (The wheel package must be stored in the same directory as the model file). For details, see How Do I Edit the Installation Package Dependency Parameters in a Model Configuration File When Importing a Model?

health

No

health data structure

Configuración de una interfaz de estado de imagen. Este parámetro solo es obligatorio cuando model_type se establece en Image.

Si los servicios no se pueden interrumpir durante la actualización continua, se debe proporcionar un puerto de comprobación de estado para que ModelArts llame. Para obtener más información sobre la estructura de datos de salud, consulte Tabla 8.

Tabla 2 Descripción del objeto metrics

Parámetro

Obligatorio

Tipo de datos

Descripción

f1

No

Number

Puntuación de F1. El valor se redondea a 17 decimales.

recall

No

Number

Tasa de retirada. El valor se redondea a 17 decimales.

precision

No

Number

Precisión. El valor se redondea a 17 decimales.

accuracy

No

Number

Exactitud. El valor se redondea a 17 decimales.

Tabla 3 Matriz api

Parámetro

Obligatorio

Tipo de datos

Descripción

protocol

No

String

Solicite el protocolo. Establezca el valor del parámetro en http o https en función de su imagen personalizada. Si utiliza un metamodelo importado de OBS, el protocolo predeterminado es https. Para obtener más información sobre otros parámetros, consulte Ejemplo del archivo de configuración del modelo de detección de objetos.

url

No

String

Ruta de solicitud. El valor predeterminado es una barra diagonal (/). Para un modelo de imagen personalizado (model_type es Image), establezca este parámetro en la ruta de solicitud real expuesta en la imagen. Para un modelo de imagen no personalizado (model_type no es Image), la URL solo puede ser /.

method

No

String

Método de solicitud. El valor predeterminado es POST.

request

No

Object

Cuerpo de la solicitud. Para obtener más información sobre la estructura request, consulte Tabla 4.

response

No

Object

Cuerpo de respuesta. Para obtener más información sobre la estructura response, consulte Tabla 5.

Tabla 4 Descripción de request

Parámetro

Obligatorio

Tipo de datos

Descripción

Content-type

Sí para los servicios en tiempo real

No para los servicios por lotes

String

Los datos se envían en un formato de contenido especificado. El valor predeterminado es application/json.

Las opciones son las siguientes:

  • application/json: envía datos JSON.
  • multipart/form-data: carga un archivo.
NOTA:

Para los modelos de aprendizaje automático, solo se admite application/json.

data

Sí para los servicios en tiempo real

No para los servicios por lotes

String

El cuerpo de la solicitud se describe en el esquema JSON. Para obtener más información sobre la descripción de los parámetros, consulte la guía oficial.

Tabla 5 Descripción de response

Parámetro

Obligatorio

Tipo de datos

Descripción

Content-type

Sí para los servicios en tiempo real

No para los servicios por lotes

String

Los datos se envían en un formato de contenido especificado. El valor predeterminado es application/json.

NOTA:

Para los modelos de aprendizaje automático, solo se admite application/json.

data

Sí para los servicios en tiempo real

No para los servicios por lotes

String

El cuerpo de la respuesta se describe en el esquema JSON. Para obtener más información sobre la descripción de los parámetros, consulte la guía oficial.

Tabla 6 Matriz de dependency

Parámetro

Obligatorio

Tipo de datos

Descripción

installer

String

Método de instalación. Solo se admite pip.

packages

package array

Colección de paquetes de dependencia. Para obtener más información sobre la matriz de estructura de paquetes, consulte Tabla 7.

Tabla 7 Matriz de package

Parámetro

Obligatorio

Tipo

Descripción

package_name

String

Nombre del paquete de dependencia. Los caracteres chinos y los caracteres especiales (&!'"<>=) no están permitidos.

package_version

No

String

Versión del paquete de dependencia. Si el paquete de dependencias no depende del número de versión, deje este campo en blanco. Los caracteres chinos y los caracteres especiales (&!'"<>=) no están permitidos.

restraint

No

String

Restricción de versión. Este parámetro es obligatorio solo cuando se configura package_version. Los valores posibles son EXACT, ATLEAST y ATMOST.

  • EXACT indica que se ha instalado una versión especificada.
  • ATLEAST indica que la versión del paquete de instalación no es anterior a la versión especificada.
  • ATMOST indica que la versión del paquete de instalación no es posterior a la versión especificada.
    NOTA:
    • Si hay requisitos específicos en la versión, utilice preferentemente EXACT. Si EXACT entra en conflicto con los paquetes de instalación del sistema, puede seleccionar ATLEAST.
    • Si no hay ningún requisito específico en la versión, conserve solo el parámetro package_name y deje restraint y package_version en blanco.
Tabla 8 Descripción de la estructura de datos health

Parámetro

Obligatorio

Tipo

Descripción

url

String

Solicitud de URL de la interfaz de comprobación de estado

protocol

No

String

Solicitud de protocolo de la interfaz de comprobación de estado. Solo se soporta el protocolo HTTP.

initial_delay_seconds

No

String

Después de iniciar una instancia, se inicia una comprobación de estado después de segundos configurados en initial_delay_seconds.

timeout_seconds

No

String

Tiempo de espera de la comprobación de estado

Ejemplo del archivo de configuración del modelo de detección de objetos

El siguiente código utiliza el motor TensorFlow como ejemplo. Puede modificar el parámetro model_type en función del tipo de motor real.

  • Entrada de modelo

    Clave: images

    Valor: image files

  • Salida del modelo
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    ```
    {
        "detection_classes": [
            "face",
            "arm"
        ],
        "detection_boxes": [
            [
                33.6,
                42.6,
                104.5,
                203.4
            ],
            [
                103.1,
                92.8,
                765.6,
                945.7
            ]
        ],
        "detection_scores": [0.99, 0.73]
    }
    ```
    
  • Archivo de configuración
     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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    ```
    {
        "model_type": "TensorFlow",
        "model_algorithm": "object_detection",
        "metrics": {
            "f1": 0.345294,
            "accuracy": 0.462963,
            "precision": 0.338977,
            "recall": 0.351852
        },
        "apis": [{
            "protocol": "http",
            "url": "/",
            "method": "post",
            "request": {
                "Content-type": "multipart/form-data",
                "data": {
                    "type": "object",
                    "properties": {
                        "images": {
                            "type": "file"
                        }
                    }
                }
            },
            "response": {
                "Content-type": "multipart/form-data",
                "data": {
                    "type": "object",
                    "properties": {
                        "detection_classes": {
                            "type": "array",
                            "items": [{
                                "type": "string"
                            }]
                        },
                        "detection_boxes": {
                            "type": "array",
                            "items": [{
                                "type": "array",
                                "minItems": 4,
                                "maxItems": 4,
                                "items": [{
                                    "type": "number"
                                }]
                            }]
                        },
                        "detection_scores": {
                            "type": "array",
                            "items": [{
                                "type": "number"
                            }]
                        }
                    }
                }
            }
        }],
        "dependencies": [{
            "installer": "pip",
            "packages": [{
                    "restraint": "EXACT",
                    "package_version": "1.15.0",
                    "package_name": "numpy"
                },
                {
                    "restraint": "EXACT",
                    "package_version": "5.2.0",
                    "package_name": "Pillow"
                }
            ]
        }]
    }
    ```
    

Ejemplo del archivo de configuración del modelo de clasificación de imágenes

El siguiente código utiliza el motor TensorFlow como ejemplo. Puede modificar el parámetro model_type en función del tipo de motor real.

  • Entrada de modelo

    Clave: images

    Valor: image files

  • Salida del modelo
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ```
    {
        "predicted_label": "flower",
        "scores": [
           ["rose", 0.99],
           ["begonia", 0.01]
        ]
    }
    ```
    
  • Archivo de configuración
     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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    ```
    {
        "model_type": "TensorFlow",
        "model_algorithm": "image_classification",
        "metrics": {
            "f1": 0.345294,
            "accuracy": 0.462963,
            "precision": 0.338977,
            "recall": 0.351852
        },
        "apis": [{
            "protocol": "http",
            "url": "/",
            "method": "post",
            "request": {
                "Content-type": "multipart/form-data",
                "data": {
                    "type": "object",
                    "properties": {
                        "images": {
                            "type": "file"
                        }
                    }
                }
            },
            "response": {
                "Content-type": "multipart/form-data",
                "data": {
                    "type": "object",
                    "properties": {
                        "predicted_label": {
                            "type": "string"
                        },
                        "scores": {
                            "type": "array",
                            "items": [{
                                "type": "array",
                                "minItems": 2,
                                "maxItems": 2,
                                "items": [
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "type": "number"
                                    }
                                ]
                            }]
                        }
                    }
                }
            }
        }],
        "dependencies": [{
            "installer": "pip",
            "packages": [{
                    "restraint": "ATLEAST",
                    "package_version": "1.15.0",
                    "package_name": "numpy"
                },
                {
                    "restraint": "",
                    "package_version": "",
                    "package_name": "Pillow"
                }
            ]
        }]
    }
    ```
    

Ejemplo del archivo de configuración del modelo de análisis predictivo

El siguiente código utiliza el motor TensorFlow como ejemplo. Puede modificar el parámetro model_type en función del tipo de motor real.

  • Entrada de modelo
     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
    ```
    {
        "data": {
            "req_data": [
                {
                    "buying_price": "high",
                    "maint_price": "high",
                    "doors": "2",
                    "persons": "2",
                    "lug_boot": "small",
                    "safety": "low",
                    "acceptability": "acc"
                },
                {
                    "buying_price": "high",
                    "maint_price": "high",
                    "doors": "2",
                    "persons": "2",
                    "lug_boot": "small",
                    "safety": "low",
                    "acceptability": "acc"
                }
            ]
        }
    }
    ```
    
  • Salida del modelo
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    ```
    {
        "data": {
            "resp_data": [
                {
                    "predict_result": "unacc"
                },
                {
                    "predict_result": "unacc"
                }
            ]
        }
    }
    ```
    
  • Archivo de configuración
     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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    ```
    {
        "model_type": "TensorFlow",
        "model_algorithm": "predict_analysis",
        "metrics": {
            "f1": 0.345294,
            "accuracy": 0.462963,
            "precision": 0.338977,
            "recall": 0.351852
        },
        "apis": [
            {
                "protocol": "http",
                "url": "/",
                "method": "post",
                "request": {
                    "Content-type": "application/json",
                    "data": {
                        "type": "object",
                        "properties": {
                            "data": {
                                "type": "object",
                                "properties": {
                                    "req_data": {
                                        "items": [
                                            {
                                                "type": "object",
                                                "properties": {
                                                }
                                            }],
                                        "type": "array"
                                    }
                                }
                            }
                        }
                    }
                },
                "response": {
                    "Content-type": "multipart/form-data",
                    "data": {
                        "type": "object",
                        "properties": {
                            "data": {
                                "type": "object",
                                "properties": {
                                    "resp_data": {
                                        "type": "array",
                                        "items": [
                                            {
                                                "type": "object",
                                                "properties": {
                                                }
                                            }]
                                    }
                                }
                            }
                        }
                    }
                }
            }],
        "dependencies": [
            {
                "installer": "pip",
                "packages": [
                    {
                        "restraint": "EXACT",
                        "package_version": "1.15.0",
                        "package_name": "numpy"
                    },
                    {
                        "restraint": "EXACT",
                        "package_version": "5.2.0",
                        "package_name": "Pillow"
                    }]
            }]
    }
    ```
    

Ejemplo del archivo de configuración del modelo de imagen personalizado

Las entradas y salidas del modelo son similares a las de Ejemplo del archivo de configuración del modelo de detección de objetos.

  • Si la entrada es una imagen, el ejemplo de solicitud es el siguiente.

    En el ejemplo, se recibe una solicitud de predicción de modelo que contiene los parámetro images con el tipo de parámetro de file. En este ejemplo, el botón de carga de archivos se muestra en la página de inferencia y la inferencia se realiza en formato de archivo.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    {
                "Content-type": "multipart/form-data",
                "data": {
                    "type": "object",
                    "properties": {
                        "images": {
                            "type": "file"
                        }
                    }
                }
    }
    
  • Si la entrada es datos JSON, el ejemplo de solicitud es el siguiente.

    En este ejemplo, se recibe el cuerpo de solicitud JSON de predicción de modelo. En la solicitud, solo hay una solicitud de predicción que contiene el parámetro input con el tipo de parámetro de string. En la página de inferencia, se muestra un cuadro de texto para que introduzca la solicitud de predicción.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
         {
                "Content-type": "application/json",
                "data": {
                    "type": "object",
                    "properties": {
                        "input": {
                            "type": "string"
                        }
                    }
                }
            }
    

Un ejemplo de solicitud completo 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
{
    "model_algorithm": "image_classification",
    "model_type": "Image",

    "metrics": {
        "f1": 0.345294,
        "accuracy": 0.462963,
        "precision": 0.338977,
        "recall": 0.351852
    },
    "apis": [{
        "protocol": "http",
        "url": "/",
        "method": "post",
        "request": {
            "Content-type": "multipart/form-data",
            "data": {
                "type": "object",
                "properties": {
                    "images": {
                        "type": "file"
                    }
                }
            }
        },
        "response": {
            "Content-type": "multipart/form-data",
            "data": {
                "type": "object",
                "required": [
                    "predicted_label",
                    "scores"
                ],
                "properties": {
                    "predicted_label": {
                        "type": "string"
                    },
                    "scores": {
                        "type": "array",
                        "items": [{
                            "type": "array",
                            "minItems": 2,
                            "maxItems": 2,
                            "items": [{
                                    "type": "string"
                                },
                                {
                                    "type": "number"
                                }
                            ]
                        }]
                    }
                }
            }
        }
    }]
}

Ejemplo del archivo de configuración del modelo de aprendizaje automático

El siguiente ejemplo utiliza XGBoost:

  • Entrada de modelo
{
	"data": {
		"req_data": [{
			"sepal_length": 5,
			"sepal_width": 3.3,
			"petal_length": 1.4,
			"petal_width": 0.2
		}, {
			"sepal_length": 5,
			"sepal_width": 2,
			"petal_length": 3.5,
			"petal_width": 1
		}, {
			"sepal_length": 6,
			"sepal_width": 2.2,
			"petal_length": 5,
			"petal_width": 1.5
		}]
	}
}
  • Salida del modelo
{
	"data": {
		"resp_data": [{
			"predict_result": "Iris-setosa"
		}, {
			"predict_result": "Iris-versicolor"
		}]
	}
}
  • Archivo de configuración
{
  "model_type": "XGBoost",
  "model_algorithm": "xgboost_iris_test",
  "runtime": "python2.7",
  "metrics": {
    "f1": 0.345294,
    "accuracy": 0.462963,
    "precision": 0.338977,
    "recall": 0.351852
  },
  "apis": [
    {
      "protocol": "http",
      "url": "/",
      "method": "post",
      "request": {
        "Content-type": "application/json",
        "data": {
          "type": "object",
          "properties": {
            "data": {
              "type": "object",
              "properties": {
                "req_data": {
                  "items": [
                    {
                      "type": "object",
                      "properties": {}
                    }
                  ],
                  "type": "array"
                }
              }
            }
          }
        }
      },
      "response": {
        "Content-type": "applicaton/json",
        "data": {
          "type": "object",
          "properties": {
            "resp_data": {
              "type": "array",
              "items": [
                {
                  "type": "object",
                  "properties": {
                    "predict_result": {
                      "type": "number"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    }
  ]
}

Ejemplo de un archivo de configuración de modelo que utiliza un paquete de dependencia personalizado

En el siguiente ejemplo se define el entorno de dependencia NumPy 1.16.4.

 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
42
43
44
45
46
47
48
49
50
51
{
     "model_algorithm": "image_classification",
     "model_type": "TensorFlow",
     "runtime": "python3.6",
     "apis": [{
             "procotol": "http",
             "url": "/",
             "method": "post",
             "request": {
                 "Content-type": "multipart/form-data",
                 "data": {
                     "type": "object",
                     "properties": {
                         "images": {
                             "type": "file"
                         }
                     }
                 }
             },
             "response": {
                 "Content-type": "applicaton/json",
                 "data": {
                     "type": "object",
                     "properties": {
                         "mnist_result": {
                             "type": "array",
             "item": [{
                "type": "string"
                         }]
                         }
                     }
                 }
             }
         }
     ],
     "metrics": {
         "f1": 0.124555,
         "recall": 0.171875,
         "precision": 0.0023493892851938493,
         "accuracy": 0.00746268656716417
     },
    "dependencies": [{
        "installer": "pip",
        "packages": [{
                "restraint": "EXACT",
                "package_version": "1.16.4",
                "package_name": "numpy"
            }
        ]
    }]
 }