Debes desplegar un modelo en un punto final para poder usarlo y ofrecer predicciones online. Al desplegar un modelo, se asocian recursos físicos para ofrecer predicciones online con baja latencia.
En esta página se describen los pasos que debe seguir para desplegar un modelo en un endpoint mediante la predicción online.
Antes de empezar
Antes de implementar tu modelo en un endpoint, exporta los artefactos del modelo para la predicción y asegúrate de que cumples todos los requisitos previos de esa página.
Crear un grupo de recursos
Un recurso personalizado ResourcePool
te permite tener un control pormenorizado sobre el comportamiento de tu modelo. Puedes definir ajustes como los siguientes:
- Configuraciones de autoescalado.
- El tipo de máquina, que define los requisitos de CPU y memoria.
- Opciones de acelerador, como recursos de GPU.
El tipo de máquina es esencial para la solicitud de especificación del grupo de nodos que envías para crear el clúster de predicción.
En el caso del grupo de recursos del modelo implementado, el número y el tipo de aceleradores determinan el uso de la GPU. El tipo de máquina solo determina los recursos de CPU y memoria solicitados. Por este motivo, al incluir aceleradores de GPU en la especificación ResourcePool
, el campo machineType
controla los requisitos de CPU y memoria del modelo, mientras que el campo acceleratorType
controla la GPU. Además, el campo acceleratorCount
controla el número de porciones de GPU.
Sigue estos pasos para crear un ResourcePool
recurso personalizado:
Crea un archivo YAML que defina el recurso personalizado
ResourcePool
. Los siguientes ejemplos contienen archivos YAML de grupos de recursos con aceleradores de GPU (modelos basados en GPU) y sin aceleradores de GPU (modelos basados en CPU):Modelos basados en GPU
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: ResourcePool metadata: name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE spec: resourcePoolID: RESOURCE_POOL_NAME enableContainerLogging: false dedicatedResources: machineSpec: # The system adds computing overhead to the nodes for mandatory components. # Choose a machineType value that allocates fewer CPU and memory resources # than those used by the nodes in the prediction cluster. machineType: a2-highgpu-1g-gdc acceleratorType: nvidia-a100-80gb # The accelerator count is a slice of the requested virtualized GPUs. # The value corresponds to one-seventh of 80 GB of GPUs for each count. acceleratorCount: 2 autoscaling: minReplica: 2 maxReplica: 10
Modelos basados en CPU
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: ResourcePool metadata: name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE spec: resourcePoolID: RESOURCE_POOL_NAME enableContainerLogging: false dedicatedResources: machineSpec: # The system adds computing overhead to the nodes for mandatory components. # Choose a machineType value that allocates fewer CPU and memory resources # than those used by the nodes in the prediction cluster. machineType: n2-highcpu-8-gdc autoscaling: minReplica: 2 maxReplica: 10
Haz los cambios siguientes:
RESOURCE_POOL_NAME
: el nombre que quieras dar al archivo de definiciónResourcePool
.PROJECT_NAMESPACE
: el nombre del espacio de nombres del proyecto asociado al clúster de predicción.
Modifica los valores de los campos
dedicatedResources
según tus necesidades de recursos y lo que esté disponible en tu clúster de predicción.Aplica el archivo de definición
ResourcePool
al clúster de predicción:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f RESOURCE_POOL_NAME.yaml
Haz los cambios siguientes:
PREDICTION_CLUSTER_KUBECONFIG
: la ruta al archivo kubeconfig del clúster de predicción.RESOURCE_POOL_NAME
: el nombre del archivo de definiciónResourcePool
.
Cuando creas el recurso personalizado ResourcePool
, la API de Kubernetes y el servicio de webhook validan el archivo YAML e informan de si se ha completado correctamente o no. El operador de predicción aprovisiona y reserva tus recursos del grupo de recursos cuando despliegas tus modelos en un endpoint.
Desplegar un modelo en un endpoint
Si tienes un grupo de recursos, puedes desplegar más de un modelo en un endpoint y desplegar un modelo en más de un endpoint. Despliega un modelo de predicción dirigido a contenedores admitidos. En función de si el endpoint ya existe o no, elige uno de los dos métodos siguientes:
Desplegar un modelo en un endpoint nuevo
Sigue estos pasos para desplegar un modelo de predicción en un nuevo endpoint:
Crea un archivo YAML que defina un
DeployedModel
recurso personalizado:TensorFlow
En el siguiente archivo YAML se muestra una configuración de ejemplo para un modelo de TensorFlow:
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: DeployedModel metadata: name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE spec: # The endpoint path structure is endpoints/<endpoint-id> endpointPath: endpoints/PREDICTION_ENDPOINT modelSpec: # The artifactLocation field must be the s3 path to the folder that # contains the various model versions. # For example, s3://my-prediction-bucket/tensorflow artifactLocation: s3://PATH_TO_MODEL # The value in the id field must be unique to each model. id: img-detection-model modelDisplayName: my_img_detection_model # The model resource name structure is models/<model-id>/<model-version-id> modelResourceName: models/img-detection-model/1 # The model version ID must match the name of the first folder in # the artifactLocation bucket, inside the 'tensorflow' folder. # For example, if the bucket path is # s3://my-prediction-bucket/tensorflow/1/, # then the value for the model version ID is "1". modelVersionID: "1" modelContainerSpec: args: - --model_config_file=/models/models.config - --rest_api_port=8080 - --port=8500 - --file_system_poll_wait_seconds=30 - --model_config_file_poll_wait_seconds=30 command: - /bin/tensorflow_model_server # The image URI field must contain one of the following values: # For CPU-based models: gcr.io/aiml/prediction/containers/tf2-cpu.2-14:latest # For GPU-based models: gcr.io/aiml/prediction/containers/tf2-gpu.2-14:latest imageURI: gcr.io/aiml/prediction/containers/tf2-gpu.2-14:latest ports: - 8080 grpcPorts: - 8500 resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE
Haz los cambios siguientes:
DEPLOYED_MODEL_NAME
: el nombre que quieras dar al archivo de definiciónDeployedModel
.PROJECT_NAMESPACE
: el nombre del espacio de nombres del proyecto asociado al clúster de predicción.PREDICTION_ENDPOINT
: el nombre que quieras dar al nuevo endpoint, comomy-img-prediction-endpoint
.PATH_TO_MODEL
: la ruta a tu modelo en el contenedor de almacenamiento.RESOURCE_POOL_NAME
: el nombre que le asignaste al archivo de definiciónResourcePool
cuando creaste un grupo de recursos para alojar el modelo.
Modifica los valores de los campos restantes según tu modelo de predicción.
PyTorch
En el siguiente archivo YAML se muestra una configuración de ejemplo para un modelo de PyTorch:
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: DeployedModel metadata: name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE spec: endpointPath: PREDICTION_ENDPOINT endpointInfo: id: PREDICTION_ENDPOINT modelSpec: # The artifactLocation field must be the s3 path to the folder that # contains the various model versions. # For example, s3://my-prediction-bucket/pytorch artifactLocation: s3://PATH_TO_MODEL # The value in the id field must be unique to each model. id: "pytorch" modelDisplayName: my-pytorch-model # The model resource name structure is models/<model-id>/<model-version-id> modelResourceName: models/pytorch/1 modelVersionID: "1" modelContainerSpec: # The image URI field must contain one of the following values: # For CPU-based models: gcr.io/aiml/prediction/containers/pytorch-cpu.2-4:latest # For GPU-based models: gcr.io/aiml/prediction/containers/pytorch-gpu.2-4:latest imageURI: gcr.io/aiml/prediction/containers/pytorch-cpu.2-4:latest ports: - 8080 grpcPorts: - 7070 sharesResourcePool: false resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE
Haz los cambios siguientes:
DEPLOYED_MODEL_NAME
: el nombre que quieras dar al archivo de definiciónDeployedModel
.PROJECT_NAMESPACE
: el nombre del espacio de nombres del proyecto asociado al clúster de predicción.PREDICTION_ENDPOINT
: el nombre que quieras dar al nuevo endpoint, comomy-img-prediction-endpoint
.PATH_TO_MODEL
: la ruta a tu modelo en el contenedor de almacenamiento.RESOURCE_POOL_NAME
: el nombre que le asignaste al archivo de definiciónResourcePool
cuando creaste un grupo de recursos para alojar el modelo.
Modifica los valores de los campos restantes según tu modelo de predicción.
Aplica el archivo de definición
DeployedModel
al clúster de predicción:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
Haz los cambios siguientes:
PREDICTION_CLUSTER_KUBECONFIG
: la ruta al archivo kubeconfig del clúster de predicción.DEPLOYED_MODEL_NAME
: el nombre del archivo de definiciónDeployedModel
.
Cuando creas el recurso personalizado
DeployedModel
, la API de Kubernetes y el servicio de webhook validan el archivo YAML e informan si se ha completado correctamente o no. El operador de predicción reconcilia el recurso personalizadoDeployedModel
y lo sirve en el clúster de predicción.Crea un archivo YAML que defina un recurso personalizado
Endpoint
.En el siguiente archivo YAML se muestra una configuración de ejemplo:
apiVersion: aiplatform.gdc.goog/v1 kind: Endpoint metadata: name: ENDPOINT_NAME namespace: PROJECT_NAMESPACE spec: createDns: true id: PREDICTION_ENDPOINT destinations: - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE trafficPercentage: 50 grpcPort: 8501 httpPort: 8081 - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME_2 namespace: PROJECT_NAMESPACE trafficPercentage: 50 grpcPort: 8501 httpPort: 8081
Haz los cambios siguientes:
ENDPOINT_NAME
: el nombre que quieras dar al archivo de definición deEndpoint
.PROJECT_NAMESPACE
: el nombre del espacio de nombres del proyecto asociado al clúster de predicción.PREDICTION_ENDPOINT
: el nombre del nuevo endpoint. Has definido este nombre en el archivo de definiciónDeployedModel
.DEPLOYED_MODEL_NAME
: el nombre que le has dado al archivo de definiciónDeployedModel
.
Puedes tener uno o varios
serviceRef
destinos. Si tienes un segundo objetoserviceRef
, añádelo al archivo YAML en el campodestinations
y sustituyeDEPLOYED_MODEL_NAME_2
por el nombre que le hayas dado al segundo archivo de definiciónDeployedModel
que hayas creado. Añade o eliminaserviceRef
objetos según los necesites, en función del número de modelos que vayas a desplegar.Define los campos
trafficPercentage
en función de cómo quieras dividir el tráfico entre los modelos de este endpoint. Modifica los valores de los campos restantes según las configuraciones de tus endpoints.Aplica el archivo de definición
Endpoint
al clúster de predicción:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
Sustituye
ENDPOINT_NAME
por el nombre del archivo de definiciónEndpoint
.
Para obtener la ruta de la URL del punto final del modelo de predicción, ejecuta el siguiente comando:
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
Haz los cambios siguientes:
PREDICTION_CLUSTER_KUBECONFIG
: la ruta al archivo kubeconfig del clúster de predicción.PREDICTION_ENDPOINT
: el nombre del nuevo endpoint.PROJECT_NAMESPACE
: el nombre del espacio de nombres del proyecto de predicción.
Desplegar un modelo en un endpoint
Solo puedes desplegar un modelo en un punto final si ya habías desplegado otro modelo en ese punto final cuando era nuevo. El sistema requiere este paso anterior para crear el endpoint.
Sigue estos pasos para desplegar un modelo de predicción en un endpoint que ya tengas:
Crea un archivo YAML que defina un
DeployedModel
recurso personalizado.En el siguiente archivo YAML se muestra una configuración de ejemplo:
apiVersion: prediction.aiplatform.gdc.goog/v1 kind: DeployedModel metadata: name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE spec: # The endpoint path structure is endpoints/<endpoint-id> endpointPath: endpoints/PREDICTION_ENDPOINT modelSpec: # The artifactLocation field must be the s3 path to the folder that # contains the various model versions. # For example, s3://my-prediction-bucket/tensorflow artifactLocation: s3://PATH_TO_MODEL # The value in the id field must be unique to each model. id: img-detection-model-v2 modelDisplayName: my_img_detection_model # The model resource name structure is models/<model-id>/<model-version-id> modelResourceName: models/img-detection-model/2 # The model version ID must match the name of the first folder in # the artifactLocation bucket, # inside the 'tensorflow' folder. # For example, if the bucket path is # s3://my-prediction-bucket/tensorflow/2/, # then the value for the model version ID is "2". modelVersionID: "2" modelContainerSpec: args: - --model_config_file=/models/models.config - --rest_api_port=8080 - --port=8500 - --file_system_poll_wait_seconds=30 - --model_config_file_poll_wait_seconds=30 command: - /bin/tensorflow_model_server # The image URI field must contain one of the following values: # For CPU-based models: gcr.io/aiml/prediction/containers/tf2-cpu.2-6:latest # For GPU-based models: gcr.io/aiml/prediction/containers/tf2-gpu.2-6:latest imageURI: gcr.io/aiml/prediction/containers/tf2-gpu.2-6:latest ports: - 8080 grpcPorts: - 8500 resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACE
Haz los cambios siguientes:
DEPLOYED_MODEL_NAME
: el nombre que quieras dar al archivo de definiciónDeployedModel
.PROJECT_NAMESPACE
: el nombre del espacio de nombres del proyecto asociado al clúster de predicción.PREDICTION_ENDPOINT
: el nombre del endpoint, comomy-img-prediction-endpoint
.PATH_TO_MODEL
: la ruta a tu modelo en el contenedor de almacenamiento.RESOURCE_POOL_NAME
: el nombre que le has dado al archivo de definición cuando has creado un grupo de recursos para alojar el modelo.ResourcePool
Modifica los valores de los campos restantes según tu modelo de predicción.
Aplica el archivo de definición
DeployedModel
al clúster de predicción:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
Haz los cambios siguientes:
PREDICTION_CLUSTER_KUBECONFIG
: la ruta al archivo kubeconfig del clúster de predicción.DEPLOYED_MODEL_NAME
: el nombre del archivo de definiciónDeployedModel
.
Cuando creas el recurso personalizado
DeployedModel
, la API de Kubernetes y el servicio de webhook validan el archivo YAML e informan si se ha completado correctamente o no. El operador de predicción reconcilia el recurso personalizadoDeployedModel
y lo sirve en el clúster de predicción.Mostrar los detalles del recurso personalizado
Endpoint
:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG describe -f ENDPOINT_NAME.yaml
Sustituye
ENDPOINT_NAME
por el nombre del archivo de definiciónEndpoint
.Actualiza el archivo YAML de la definición de recurso personalizado
Endpoint
añadiendo un nuevo objetoserviceRef
al campodestinations
. En el nuevo objeto, incluye el nombre del servicio adecuado en función del recurso personalizadoDeployedModel
que hayas creado.En el siguiente archivo YAML se muestra una configuración de ejemplo:
apiVersion: aiplatform.gdc.goog/v1 kind: Endpoint metadata: name: ENDPOINT_NAME namespace: PROJECT_NAMESPACE spec: createDns: true id: PREDICTION_ENDPOINT destinations: - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME namespace: PROJECT_NAMESPACE trafficPercentage: 40 grpcPort: 8501 httpPort: 8081 - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME_2 namespace: PROJECT_NAMESPACE trafficPercentage: 50 grpcPort: 8501 httpPort: 8081 - serviceRef: kind: DeployedModel name: DEPLOYED_MODEL_NAME_3 namespace: PROJECT_NAMESPACE trafficPercentage: 10 grpcPort: 8501 httpPort: 8081
Haz los cambios siguientes:
ENDPOINT_NAME
: el nombre del archivo de definiciónEndpoint
.PROJECT_NAMESPACE
: el nombre del espacio de nombres del proyecto asociado al clúster de predicción.PREDICTION_ENDPOINT
: el nombre del endpoint. Has hecho referencia a este nombre en el archivo de definiciónDeployedModel
.DEPLOYED_MODEL_NAME
: el nombre de un archivo de definiciónDeployedModel
creado anteriormente.DEPLOYED_MODEL_NAME_2
: el nombre que le has dado al archivo de definiciónDeployedModel
recién creado.
Puedes tener uno o varios
serviceRef
destinos. Si tienes un tercer objetoserviceRef
, añádelo al archivo YAML en el campodestinations
y sustituyeDEPLOYED_MODEL_NAME_3
por el nombre que le hayas dado al tercer archivo de definiciónDeployedModel
que hayas creado. Añade o eliminaserviceRef
objetos según los necesites, en función del número de modelos que vayas a desplegar.Define los campos
trafficPercentage
en función de cómo quieras dividir el tráfico entre los modelos de este endpoint. Modifica los valores de los campos restantes según las configuraciones de tus endpoints.Aplica el archivo de definición
Endpoint
al clúster de predicción:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
Sustituye
ENDPOINT_NAME
por el nombre del archivo de definiciónEndpoint
.
Para obtener la ruta de la URL del punto final del modelo de predicción, ejecuta el siguiente comando:
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
Haz los cambios siguientes:
PREDICTION_CLUSTER_KUBECONFIG
: la ruta al archivo kubeconfig del clúster de predicción.PREDICTION_ENDPOINT
: el nombre del endpoint.PROJECT_NAMESPACE
: el nombre del espacio de nombres del proyecto de predicción.