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> Referencia de la API> Gestión de servicios> Implementación de un modelo como servicio
Actualización más reciente 2024-06-25 GMT+08:00

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

Tabla 1 describe los parámetros requeridos.
Tabla 1 Parámetros

Parámetro

Obligatorio

Tipo

Descripción

project_id

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

Tabla 2 describe los parámetros de solicitud.
Tabla 2 Parameters

Parámetro

Obligatorio

Tipo

Descripción

service_name

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

String

Modo de inferencia. El valor puede ser real-time o batch.

  • real-time: servicio en tiempo real, que se puede detener según lo programado.
  • batch: servicio por lotes, que se puede configurar como tareas para ejecutarse en lotes. Cuando se completan las tareas, el servicio se detiene automáticamente.

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.

  • En este caso, el ModelArts asigna una VPC dedicada a cada usuario para que los usuarios estén aislados entre sí. Si necesita acceder a otros componentes de servicio en una VPC de una instancia de servicio, establezca este parámetro en el ID de la VPC correspondiente.
  • Una vez que se configura una VPC, no se puede modificar. Si tanto vpc_id como cluster_id están configurados, solo el grupo de recursos dedicado tiene efecto.

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

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.

  • Si infer_type se establece en real-time, consulte Tabla 3.
  • Si infer_type se establece en batch, consulte Tabla 4.

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.

Tabla 3 parámetros config de real-time

Parámetro

Obligatorio

Tipo

Descripción

model_id

String

ID del modelo

weight

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

String

Especificaciones de recursos. Seleccione las especificaciones según los requisitos de servicio. Para la versión actual, están disponibles las siguientes especificaciones:

  • modelarts.vm.cpu.2u
  • modelarts.vm.gpu.p4
  • modelarts.vm.gpu.t4
  • modelarts.vm.arm.d310.3u6g
  • modelarts.vm.ai1.a310
  • modelarts.vm.cpu.free
  • modelarts.vm.gpu.free
  • custom (Available only in dedicated resource pool deployment.)

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

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.

Tabla 4 Parámetros config del batch

Parámetro

Obligatorio

Tipo

Descripción

model_id

String

ID del modelo

specification

String

Variante de recursos. Opciones: modelarts.vm.cpu.2u y modelarts.vm.gpu.p4

instance_count

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

String

Ruta OBS de los datos de entrada de un trabajo por lotes

dest_path

String

Ruta OBS de los datos de salida de un trabajo por lotes

req_uri

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

String

Tipo de asignación de los datos de entrada. El valor puede ser file o csv.

  • Si selecciona file, cada solicitud de inferencia corresponde a un archivo en la ruta de datos de entrada. Cuando se utiliza este modo, req_uri de este modelo puede tener solo un parámetro de entrada y el tipo de este parámetro es file.
  • Si selecciona csv, cada solicitud de inferencia corresponde a una fila de datos en el archivo CSV. Cuando se utiliza este modo, los archivos en la ruta de datos de entrada solo pueden estar en formato CSV y mapping_rule debe configurarse para asignar el índice de cada parámetro en el cuerpo de solicitud de inferencia al archivo 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 (,).

Tabla 5 Parámetros schedule

Parámetro

Obligatorio

Tipo

Descripción

type

String

Tipo de programación. Solo se admite el valor stop.

time_unit

String

Unidad de tiempo de programación. Opciones:

  • DAYS
  • HOURS
  • MINUTES

duration

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.

Tabla 6 Atributos de servicio existentes en additional_properties

Parámetro

Obligatorio

Tipo

Descripción

smn_notification

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.

Tabla 7 Estructura smn_notification

Parámetro

Obligatorio

Tipo

Descripción

topic_urn

String

URN de un tema SMN

events

List<Integer>

ID de evento. Actualmente, los siguientes ID de evento están disponibles:

  • 1: falló
  • 3: en marcha
  • 7: en relación con
  • 11: pendiente
Tabla 8 Atributos de modelo existentes en additional_properties

Parámetro

Obligatorio

Tipo

Descripción

persistent_volumes

persistentVolume array

Montaje de almacenamiento persistente. Para más detalles, consulte Tabla 9.

log_volume

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.

Tabla 9 Estructura persistentVolume

Parámetro

Obligatorio

Tipo

Descripción

name

String

Nombre de la imagen en la nube

mount_path

String

Ruta de montaje de una imagen de nube en el contenedor

Tabla 10 Estructura logVolume

Parámetro

Obligatorio

Tipo

Descripción

host_path

String

Ruta de registro que se asignará en el host

mount_path

String

Ruta de acceso a los registros del contenedor

Tabla 11 Parámetros custom_spec

Parámetro

Obligatorio

Tipo

Descripción

cpu

Float

Número de CPUs requeridas

memory

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

Tabla 12 describe los parámetros de respuesta.
Tabla 12 Parámetros

Parámetro

Tipo

Descripción

service_id

String

ID de servicio

resource_ids

Array of strings

Matriz de ID de recurso para los ID de recurso generados por el modelo de destino

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.