Implementación de un modelo como servicio
Función
Esta API se utiliza para implementar un modelo como servicio.
URI
POST /v1/{project_id}/services
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
project_id |
Sí |
String |
ID del proyecto. Para obtener más información sobre cómo obtener un ID de proyecto, consulte Obtención de un ID y un nombre de proyecto. |
Cuerpo de la solicitud
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
service_name |
Sí |
String |
Nombre del servicio. Ingrese entre 1 y 64 caracteres. Solo se permiten letras, dígitos, guiones medios (-) y guiones bajos (_). |
description |
No |
String |
Descripción del servicio, que contiene un máximo de 100 caracteres. De forma predeterminada, este parámetro se deja en blanco. |
infer_type |
Sí |
String |
Modo de inferencia. El valor puede ser real-time o batch.
|
workspace_id |
No |
String |
ID del espacio de trabajo al que pertenece un servicio. El valor predeterminado es 0, que indica el espacio de trabajo predeterminado. Conserve la configuración predeterminada. |
vpc_id |
No |
String |
ID de la VPC en la que se implementa una instancia de servicio en tiempo real. De forma predeterminada, este parámetro se deja en blanco.
|
subnet_network_id |
No |
String |
ID de una subred. De forma predeterminada, este parámetro se deja en blanco. Este parámetro es obligatorio cuando se configura vpc_id. Introduzca el ID de red que se muestra en los detalles de la subred de la consola de VPC. Una subred brinda recursos de red dedicados que están aislados de otras redes. |
security_group_id |
No |
String |
Grupo de seguridad. De forma predeterminada, este parámetro se deja en blanco. Este parámetro es obligatorio cuando se configura vpc_id. Un grupo de seguridad es un firewall virtual que proporciona políticas de control de acceso seguro a la red para instancias de servicio. Un grupo de seguridad debe contener al menos una regla de entrada para permitir las solicitudes cuyo protocolo es TCP, la dirección de origen es 0.0.0.0/0 y el número de puerto es 8080. |
cluster_id |
No |
String |
ID de un grupo de recursos dedicado. Este parámetro se deja en blanco de forma predeterminada, lo que indica que no se utiliza ningún grupo de recursos dedicado. Cuando utilice un grupo de recursos dedicado para implementar servicios, asegúrese de que el grupo de recursos se está ejecutando correctamente. Después de establecer este parámetro, se utiliza la configuración de red del clúster y el parámetro vpc_id no tiene efecto. Si este parámetro se configura con cluster_id en real-time config, cluster_id en real-time config se usa preferentemente. |
config |
Sí |
config array corresponding to infer_type |
Modelo en ejecución de configuración. Si infer_type es batch, solo puede configurar un modelo. Si infer_type es real-time, puede configurar varios modelos y asignar ponderaciones según los requisitos de servicio. Sin embargo, las versiones de estos modelos no pueden ser las mismas. |
schedule |
No |
schedule array |
Configuración de programación de servicios, que solo se puede configurar para servicios en tiempo real. Por defecto, este parámetro no se utiliza. Los servicios duran mucho tiempo. Para más detalles, consulte Tabla 5. |
additional_properties |
No |
Map<String, Object> |
Atributo de servicio adicional, que facilita la gestión del servicio. Para más detalles, consulte Tabla 6. |
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
model_id |
Sí |
String |
ID del modelo |
weight |
Sí |
Integer |
Peso de tráfico asignado a un modelo. Este parámetro es obligatorio solo cuando infer_type se establece en real-time. La suma de los pesos debe ser 100. |
specification |
Sí |
String |
Especificaciones de recursos. Seleccione las especificaciones según los requisitos de servicio. Para la versión actual, están disponibles las siguientes especificaciones:
Para utilizar otras variantes, póngase en contacto con el administrador. |
custom_spec |
No |
Object |
Especificaciones personalizadas. Establezca este parámetro cuando utilice un fondo de recursos dedicado. Para más detalles, consulte Tabla 11. |
instance_count |
Sí |
Integer |
Número de instancias implementadas en un modelo. El valor debe ser mayor que 0. |
envs |
No |
Map<String, String> |
(Opcional) Par de clave-valor de variable de entorno requerido para ejecutar un modelo. De forma predeterminada, este parámetro se deja en blanco. Para garantizar la seguridad de los datos, no introduzca información confidencial, como contraseñas de texto sin formato, en las variables de entorno. |
cluster_id |
No |
string |
ID de un grupo de recursos dedicado. De forma predeterminada, este parámetro se deja en blanco, lo que indica que no se utiliza ningún grupo de recursos dedicado. Después de establecer este parámetro, se utiliza la configuración de red del clúster y el parámetro vpc_id no tiene efecto. |
additional_properties |
No |
Map<String, Object> |
Atributos adicionales para la implementación del modelo, lo que facilita la gestión de instancias de servicio. Para más detalles, consulte Tabla 8. |
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
model_id |
Sí |
String |
ID del modelo |
specification |
Sí |
String |
Variante de recursos. Opciones: modelarts.vm.cpu.2u y modelarts.vm.gpu.p4 |
instance_count |
Sí |
Integer |
Número de instancias implementadas en un modelo. |
envs |
No |
Map<String, String> |
(Opcional) Par de clave-valor de variable de entorno requerido para ejecutar un modelo. De forma predeterminada, este parámetro se deja en blanco. Para garantizar la seguridad de los datos, no introduzca información confidencial, como contraseñas de texto sin formato, en las variables de entorno. |
src_type |
No |
String |
Tipo de origen de datos. Este parámetro se puede establecer en "ManifestFile". Por defecto, este parámetro se deja en blanco, lo que indica que solo se leen los archivos del directorio src_path. Si este parámetro se establece en ManifestFile, src_path debe ser una ruta de archivo de manifiesto específica. Puede especificar varias rutas de datos en el archivo de manifiesto. |
src_path |
Sí |
String |
Ruta OBS de los datos de entrada de un trabajo por lotes |
dest_path |
Sí |
String |
Ruta OBS de los datos de salida de un trabajo por lotes |
req_uri |
Sí |
String |
API de inferencia llamada en un trabajo por lotes, que es una API REST en la imagen del modelo. Seleccione un URI de API del archivo config.json modelo para inferencia. Si se utiliza una imagen de inferencia incorporada de ModelArts el valor de este parámetro es /. |
mapping_type |
Sí |
String |
Tipo de asignación de los datos de entrada. El valor puede ser file o csv.
|
mapping_rule |
No |
Map |
Mapeo entre los parámetros de entrada y los datos CSV. Este parámetro es obligatorio solo cuando mapping_type se establece en csv. Regla de asignación: La regla de asignación proviene del parámetro de entrada (input_params) en el archivo de configuración del modelo config.json. Cuando type se establece en string, number, integer, o boolean, configure el parámetro index. 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 (,). |
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
type |
Sí |
String |
Tipo de programación. Solo se admite el valor stop. |
time_unit |
Sí |
String |
Unidad de tiempo de programación. Opciones:
|
duration |
Sí |
Integer |
Valor que se asigna a la unidad de tiempo. Por ejemplo, si la tarea se detiene después de dos horas, establezca time_unit en HOURS y duration en 2. |
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
smn_notification |
Sí |
Object |
Estructura de notificación de mensaje SMN, que se utiliza para notificar al usuario del cambio de estado de servicio. Para más detalles, consulte Tabla 7. |
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
topic_urn |
Sí |
String |
URN de un tema SMN |
events |
Sí |
List<Integer> |
ID de evento. Actualmente, los siguientes ID de evento están disponibles:
|
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
persistent_volumes |
Sí |
persistentVolume array |
Montaje de almacenamiento persistente. Para más detalles, consulte Tabla 9. |
log_volume |
Sí |
logVolume array |
Montaje de directorio de host. Para más detalles, consulte Tabla 10. Este parámetro solo tiene efecto si se utiliza un grupo de recursos dedicado. |
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
name |
Sí |
String |
Nombre de la imagen en la nube |
mount_path |
Sí |
String |
Ruta de montaje de una imagen de nube en el contenedor |
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
host_path |
Sí |
String |
Ruta de registro que se asignará en el host |
mount_path |
Sí |
String |
Ruta de acceso a los registros del contenedor |
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
cpu |
Sí |
Float |
Número de CPUs requeridas |
memory |
Sí |
Integer |
Capacidad de memoria requerida, en MB |
gpu_p4 |
No |
Float |
Número de GPUs, que pueden ser decimales. Este parámetro es opcional. Por defecto, no se utiliza. |
ascend_a310 |
No |
Integer |
Número de NPU. Este parámetro es opcional y no se utiliza por defecto. |
Cuerpo de respuesta
Muestras
A continuación se muestra cómo implementar diferentes tipos de servicios.
- Solicitud de muestra: Creación de un servicio en tiempo real
POST https://endpoint/v1/{project_id}/services { "service_name": "mnist", "description": "mnist service", "infer_type": "real-time", "config": [ { "model_id": "xxxmodel-idxxx", "weight": "100", "specification": "modelarts.vm.cpu.2u", "instance_count": 1 } ] }
- Solicitud de ejemplo: Creación de un servicio en tiempo real y configuración de la distribución de tráfico multiversión
{ "service_name": "mnist", "description": "mnist service", "infer_type": "real-time", "config": [ { "model_id": "xxxmodel-idxxx", "weight": "70", "specification": "modelarts.vm.cpu.2u", "instance_count": 1, "envs": { "model_name": "mxnet-model-1", "load_epoch": "0" } }, { "model_id": "xxxxxx", "weight": "30", "specification": "modelarts.vm.cpu.2u", "instance_count": 1 } ] }
- Solicitud de ejemplo: Creación de un servicio en tiempo real en un grupo de recursos dedicado con especificaciones personalizadas
{ "service_name": "realtime-demo", "description": "", "infer_type": "real-time", "cluster_id": "8abf68a969c3cb3a0169c4acb24b0000", "config": [{ "model_id": "eb6a4a8c-5713-4a27-b8ed-c7e694499af5", "weight": "100", "cluster_id": "8abf68a969c3cb3a0169c4acb24b0000", "specification": "custom", "custom_spec": { "cpu": 1.5, "memory": 7500, "gpu_p4": 0, "ascend_a310": 0 }, "instance_count": 1 }] }
- Solicitud de muestra: Crear un servicio en tiempo real y configurarlo para que se detenga automáticamente
{ "service_name": "service-demo", "description": "demo", "infer_type": "real-time", "config": [{ "model_id": "xxxmodel-idxxx", "weight": "100", "specification": "modelarts.vm.cpu.2u", "instance_count": 1 }], "schedule": [{ "type": "stop", "time_unit": "HOURS", "duration": 1 }] }
- Solicitud de ejemplo: Creación de un servicio por lotes y configuración de mapping_type en file
{ "service_name": "batchservicetest", "description": "", "infer_type": "batch", "cluster_id": "8abf68a969c3cb3a0169c4acb24b****", "config": [{ "model_id": "598b913a-af3e-41ba-a1b5-bf065320f1e2", "specification": "modelarts.vm.cpu.2u", "instance_count": 1, "src_path": "https://infers-data.obs.ap-southeast-1.myhuaweicloud.com/xgboosterdata/", "dest_path": "https://infers-data.obs.ap-southeast-1.myhuaweicloud.com/output/", "req_uri": "/", "mapping_type": "file" }] }
- Solicitud de ejemplo: Creación de un servicio por lotes y configuración de mapping_type en csv
{ "service_name": "batchservicetest", "description": "", "infer_type": "batch", "config": [{ "model_id": "598b913a-af3e-41ba-a1b5-bf065320f1e2", "specification": "modelarts.vm.cpu.2u", "instance_count": 1, "src_path": "https://infers-data.obs.ap-southeast-1.myhuaweicloud.com/xgboosterdata/batch.manifest", "dest_path": "https://infers-data.obs.ap-southeast-1.myhuaweicloud.com.com/output/", "req_uri": "/", "mapping_type": "csv", "mapping_rule": { "type": "object", "properties": { "data": { "type": "object", "properties": { "req_data": { "type": "array", "items": [{ "type": "object", "properties": { "input5": { "type": "number", "index": 0 }, "input4": { "type": "number", "index": 1 }, "input3": { "type": "number", "index": 2 }, "input2": { "type": "number", "index": 3 }, "input1": { "type": "number", "index": 4 } } }] } } } } } }] }
El formato del cuerpo de solicitud de inferencia descrito en mapping_rule es el siguiente:{ "data": { "req_data": [{ "input1": 1, "input2": 2, "input3": 3, "input4": 4, "input5": 5 }] } }
- Modelo de respuesta
{ "service_id": "10eb0091-887f-4839-9929-cbc884f1e20e", "resource_ids": [ "INF-f878991839647358@1598319442708" ] }
Código de estado
Para obtener más información sobre el código de estado, consulte Tabla 1.