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 ResourcePoolrecurso 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: 10Modelos 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: 10Haz 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
dedicatedResourcessegún tus necesidades de recursos y lo que esté disponible en tu clúster de predicción.Aplica el archivo de definición
ResourcePoolal clúster de predicción:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f RESOURCE_POOL_NAME.yamlHaz 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
DeployedModelrecurso 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_NAMESPACEHaz 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ónResourcePoolcuando 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_NAMESPACEHaz 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ónResourcePoolcuando 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
DeployedModelal clúster de predicción:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yamlHaz 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 personalizadoDeployedModely 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: 8081Haz 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
serviceRefdestinos. Si tienes un segundo objetoserviceRef, añádelo al archivo YAML en el campodestinationsy sustituyeDEPLOYED_MODEL_NAME_2por el nombre que le hayas dado al segundo archivo de definiciónDeployedModelque hayas creado. Añade o eliminaserviceRefobjetos según los necesites, en función del número de modelos que vayas a desplegar.Define los campos
trafficPercentageen 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
Endpointal clúster de predicción:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yamlSustituye
ENDPOINT_NAMEpor 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
DeployedModelrecurso 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_NAMESPACEHaz 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
DeployedModelal clúster de predicción:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yamlHaz 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 personalizadoDeployedModely 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.yamlSustituye
ENDPOINT_NAMEpor el nombre del archivo de definiciónEndpoint.Actualiza el archivo YAML de la definición de recurso personalizado
Endpointañadiendo un nuevo objetoserviceRefal campodestinations. En el nuevo objeto, incluye el nombre del servicio adecuado en función del recurso personalizadoDeployedModelque 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: 8081Haz 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ónDeployedModelcreado anteriormente.DEPLOYED_MODEL_NAME_2: el nombre que le has dado al archivo de definiciónDeployedModelrecién creado.
Puedes tener uno o varios
serviceRefdestinos. Si tienes un tercer objetoserviceRef, añádelo al archivo YAML en el campodestinationsy sustituyeDEPLOYED_MODEL_NAME_3por el nombre que le hayas dado al tercer archivo de definiciónDeployedModelque hayas creado. Añade o eliminaserviceRefobjetos según los necesites, en función del número de modelos que vayas a desplegar.Define los campos
trafficPercentageen 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
Endpointal clúster de predicción:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yamlSustituye
ENDPOINT_NAMEpor 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.