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.
Parámetro |
Obligatorio |
Tipo de datos |
Descripción |
---|---|---|---|
model_algorithm |
Sí |
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 |
Sí |
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.
|
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.
|
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.
|
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. |
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. |
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. |
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:
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. |
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. |
Parámetro |
Obligatorio |
Tipo de datos |
Descripción |
---|---|---|---|
installer |
Sí |
String |
Método de instalación. Solo se admite pip. |
packages |
Sí |
package array |
Colección de paquetes de dependencia. Para obtener más información sobre la matriz de estructura de paquetes, consulte Tabla 7. |
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
package_name |
Sí |
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.
|
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
url |
Sí |
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
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
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" } ] }] } |