Especificaciones para editar un archivo de configuración de modelo
Un desarrollador de modelos necesita editar un archivo de configuración config.json al publicar un modelo. El archivo de configuración del modelo describe el uso del modelo, el marco de cómputo, 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 marco estándar, seleccione el motor y el entorno de tiempo de ejecución. Para obtener detalles sobre los entornos de ejecución soportados, véase Motores de IA compatibles para la inferencia de ModelArts. Si el modelo debe ejecutarse en CPU o GPU especificadas, seleccione las CPU o GPU en función del sufijo de tiempo de ejecución. Si el tiempo de ejecución no contiene la información de la CPU o la GPU, compruebe la description del tiempo de ejecución en Motores de IA compatibles para Inferencia de ModelArts. |
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 de API de RESTful proporcionada por un modelo. Para obtener más información sobre la estructura de datos de la API, consulte Tabla 3. Para obtener más información sobre el ejemplo de código, véase Ejemplo de código de parámetros apis.
|
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 soporta el modo de instalación de 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. 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. Los paquetes de la parte superior se instalan primero. El paquete de ruedas en las instalaciones se puede utilizar para la instalación. (El paquete de rueda debe almacenarse en el mismo directorio que el archivo de modelo). Para obtener más información, véase ¿Cómo edito los parámetros de dependencia del paquete de instalación en un archivo de configuración de modelo al importar un modelo? |
health |
No |
health data structure |
Configuración de una interfaz de mantenimiento de imagen. Este parámetro solo es obligatorio cuando model_type se establece en Image. Si los servicios no se pueden interrumpir durante una actualización sucesiva, se debe proporcionar una API de comprobación de estado para que ModelArts invoque. Para obtener más información sobre la estructura de datos de mantenimiento, véase 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 rellamada. 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 |
---|---|---|---|
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 más detalles, véase Tabla 4. |
response |
No |
Object |
Cuerpo de respuesta. Para más detalles, véase Tabla 5. |
Parámetro |
Obligatorio |
Tipo de datos |
Descripción |
---|---|---|---|
Content-type |
No para servicios en tiempo real Sí para 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:
Para los modelos de aprendizaje automático, solo se admite application/json. |
data |
No para servicios en tiempo real Sí para 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 |
No para servicios en tiempo real Sí para servicios por lotes |
String |
Los datos se envían en un formato de contenido especificado. El valor predeterminado es application/json. Para los modelos de aprendizaje automático, solo se admite application/json. |
data |
No para servicios en tiempo real Sí para 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 |
Recolecció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 de las versiones del paquete, 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 |
---|---|---|---|
check_method |
Sí |
String |
Método de comprobación de estado. El valor puede ser HTTP o EXEC.
|
command |
No |
String |
Comando de control de estado. Este parámetro es obligatorio cuando check_method se establece en EXEC. |
url |
No |
String |
URL de solicitud de una API de comprobación de estado. Este parámetro es obligatorio cuando check_method se establece en HTTP. |
protocol |
No |
String |
Protocolo de solicitud de una API de comprobación de estado. El valor predeterminado es http. Este parámetro es obligatorio cuando check_method se establece en HTTP. |
initial_delay_seconds |
No |
String |
Retraso en la inicialización de la comprobación de estado. |
timeout_seconds |
No |
String |
Tiempo de espera de comprobación de estado. |
period_seconds |
Sí |
String |
Período de comprobación de estado, en segundos. Ingrese un número entero mayor que 0 y no mayor que 2147483647. |
failure_threshold |
Sí |
String |
Número máximo de errores de comprobación de estado. Ingrese un número entero mayor que 0 y no mayor que 2147483647. |
Ejemplo de código de parámetros apis
[{ "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" } ] } } } } }]
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
Value: 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
{ "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
{ "model_type": "TensorFlow", "model_algorithm": "object_detection", "metrics": { "f1": 0.345294, "accuracy": 0.462963, "precision": 0.338977, "recall": 0.351852 }, "apis": [{ "url": "/", "method": "post", "request": { "Content-type": "multipart/form-data", "data": { "type": "object", "properties": { "images": { "type": "file" } } } }, "response": { "Content-type": "application/json", "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
{ "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
{ "model_type": "TensorFlow", "model_algorithm": "image_classification", "metrics": { "f1": 0.345294, "accuracy": 0.462963, "precision": 0.338977, "recall": 0.351852 }, "apis": [{ "url": "/", "method": "post", "request": { "Content-type": "multipart/form-data", "data": { "type": "object", "properties": { "images": { "type": "file" } } } }, "response": { "Content-type": "application/json", "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" } ] }] }
El código siguiente utiliza el motor de MindSpore como ejemplo. Puede modificar el parámetro model_type según el tipo de motor que utilice.
- Entrada de modelo
Value: image files
- Salida del modelo
1
"[[-2.404526 -3.0476532 -1.9888215 0.45013925 -1.7018927 0.40332815\n -7.1861157 11.290332 -1.5861531 5.7887416 ]]"
- Archivo de configuración
{ "model_algorithm": "image_classification", "model_type": "MindSpore", "metrics": { "f1": 0.124555, "recall": 0.171875, "precision": 0.0023493892851938493, "accuracy": 0.00746268656716417 }, "apis": [{ "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" }] } } } } } ], "dependencies": [] }
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
{ "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
{ "data": { "resp_data": [ { "predict_result": "unacc" }, { "predict_result": "unacc" } ] } }
- Archivo de configuración
NOTA:
En el código, el parámetro data de las estructuras de solicitud y de respuesta se describe en el JSON Schema. El contenido de data y properties corresponde a la entrada y 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 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": [ { "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": "application/json", "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 el 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 |
{ "model_algorithm": "image_classification", "model_type": "Image", "metrics": { "f1": 0.345294, "accuracy": 0.462963, "precision": 0.338977, "recall": 0.351852 }, "apis": [{ "url": "/", "method": "post", "request": { "Content-type": "multipart/form-data", "data": { "type": "object", "properties": { "images": { "type": "file" } } } }, "response": { "Content-type": "application/json", "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
{ "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
{ "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": [ { "url": "/", "method": "post", "request": { "Content-type": "application/json", "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": {} } } ] } } } } } ] }
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 52 53 54 55 56 |
{ "model_algorithm": "image_classification", "model_type": "TensorFlow", "runtime": "python3.6", "apis": [ { "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.00234938928519385, "accuracy": 0.00746268656716417 }, "dependencies": [ { "installer": "pip", "packages": [ { "restraint": "EXACT", "package_version": "1.16.4", "package_name": "numpy" } ] } ] } |