Debes implementar un modelo en un extremo antes de que se pueda usar para entregar predicciones en línea. La implementación de un modelo asocia recursos físicos para entregar predicciones en línea con baja latencia.
En esta página, se describen los pasos que debes seguir para implementar un modelo en un extremo con la predicción en línea.
Antes de comenzar
Antes de implementar tu modelo en un extremo, exporta los artefactos del modelo para la predicción y asegúrate de cumplir con todos los requisitos previos de esa página.
Crea un grupo de recursos
Un recurso personalizado ResourcePool
te permite tener un control detallado sobre el comportamiento de tu modelo. Puedes definir parámetros de configuración como los siguientes:
- Son las configuraciones del ajuste de escala automático.
- El tipo de máquina, que define los requisitos de CPU y memoria
- Opciones de aceleradores, 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.
Para el grupo de recursos del modelo implementado, el recuento y el tipo de acelerador determinan el uso de la GPU. El tipo de máquina solo indica los recursos de CPU y memoria solicitados. Por este motivo, cuando se incluyen aceleradores de GPU en la especificación de 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 la cantidad de segmentos de GPU.
Sigue estos pasos para crear un recurso personalizado ResourcePool
:
Crea un archivo YAML que defina el recurso personalizado
ResourcePool
. En los siguientes ejemplos, se incluyen archivos YAML para 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 la 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
Reemplaza lo siguiente:
RESOURCE_POOL_NAME
: Es el nombre que deseas asignar al archivo de definición deResourcePool
.PROJECT_NAMESPACE
: Es el nombre del espacio de nombres del proyecto asociado con el clúster de predicción.
Modifica los valores en los campos
dedicatedResources
según las necesidades de tus 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
Reemplaza lo siguiente:
PREDICTION_CLUSTER_KUBECONFIG
: Es la ruta de acceso al archivo kubeconfig en el clúster de predicción.RESOURCE_POOL_NAME
: Es el nombre del archivo de definición deResourcePool
.
Cuando creas el recurso personalizado ResourcePool
, la API de Kubernetes y el servicio de webhook validan el archivo YAML y registran el éxito o el error. El operador de predicción aprovisiona y reserva tus recursos del grupo de recursos cuando implementas tus modelos en un extremo.
Implementa tu modelo en un extremo
Si tienes un grupo de recursos, puedes implementar más de un modelo en un extremo y puedes implementar un modelo en más de un extremo. Implementa un modelo de predicción que se dirija a contenedores compatibles. Según si el extremo ya existe o no, elige uno de los siguientes dos métodos:
Implementa un modelo en un extremo nuevo
Sigue estos pasos para implementar un modelo de predicción en un extremo nuevo:
Crea un archivo YAML que defina un recurso personalizado
DeployedModel
:TensorFlow
En el siguiente archivo YAML, se muestra una configuración de muestra 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
Reemplaza lo siguiente:
DEPLOYED_MODEL_NAME
: Es el nombre que deseas asignar al archivo de definición deDeployedModel
.PROJECT_NAMESPACE
: Es el nombre del espacio de nombres del proyecto asociado con el clúster de predicción.PREDICTION_ENDPOINT
: Es el nombre que quieres asignarle al extremo nuevo, comomy-img-prediction-endpoint
.PATH_TO_MODEL
: Es la ruta de acceso a tu modelo en el bucket de almacenamiento.RESOURCE_POOL_NAME
: Es el nombre que le diste al archivo de definición deResourcePool
cuando creaste un grupo de recursos para alojar el modelo.
Modifica los valores en los campos restantes según tu modelo de predicción.
PyTorch
En el siguiente archivo YAML, se muestra una configuración de muestra 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
Reemplaza lo siguiente:
DEPLOYED_MODEL_NAME
: Es el nombre que deseas asignar al archivo de definición deDeployedModel
.PROJECT_NAMESPACE
: Es el nombre del espacio de nombres del proyecto asociado con el clúster de predicción.PREDICTION_ENDPOINT
: Es el nombre que quieres asignarle al extremo nuevo, comomy-img-prediction-endpoint
.PATH_TO_MODEL
: Es la ruta de acceso a tu modelo en el bucket de almacenamiento.RESOURCE_POOL_NAME
: Es el nombre que le diste al archivo de definición deResourcePool
cuando creaste un grupo de recursos para alojar el modelo.
Modifica los valores en 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
Reemplaza lo siguiente:
PREDICTION_CLUSTER_KUBECONFIG
: Es la ruta de acceso al archivo kubeconfig en el clúster de predicción.DEPLOYED_MODEL_NAME
: Es el nombre del archivo de definición deDeployedModel
.
Cuando creas el recurso personalizado
DeployedModel
, la API de Kubernetes y el servicio de webhook validan el archivo YAML y registran el éxito o el error. El operador de predicción reconcilia el recurso personalizadoDeployedModel
y lo publica 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 muestra:
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
Reemplaza lo siguiente:
ENDPOINT_NAME
: Es el nombre que deseas asignar al archivo de definición deEndpoint
.PROJECT_NAMESPACE
: Es el nombre del espacio de nombres del proyecto asociado con el clúster de predicción.PREDICTION_ENDPOINT
: Es el nombre del extremo nuevo. Definiste este nombre en el archivo de definiciónDeployedModel
.DEPLOYED_MODEL_NAME
: Es el nombre que le asignaste al archivo de definición deDeployedModel
.
Puedes tener uno o más destinos
serviceRef
. Si tienes un segundo objetoserviceRef
, agrégalo al archivo YAML en el campodestinations
y reemplazaDEPLOYED_MODEL_NAME_2
por el nombre que le asignaste al segundo archivo de definiciónDeployedModel
que creaste. Sigue agregando o quitando objetosserviceRef
según los necesites, en función de la cantidad de modelos que implementes.Establece los campos
trafficPercentage
según cómo quieras dividir el tráfico entre los modelos de este extremo. Modifica los valores en los campos restantes según la configuración de tu extremo.Aplica el archivo de definición
Endpoint
al clúster de predicción:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
Reemplaza
ENDPOINT_NAME
por el nombre del archivo de definición deEndpoint
.
Para obtener la ruta de URL del extremo 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}'
Reemplaza lo siguiente:
PREDICTION_CLUSTER_KUBECONFIG
: Es la ruta de acceso al archivo kubeconfig en el clúster de predicción.PREDICTION_ENDPOINT
: Es el nombre del extremo nuevo.PROJECT_NAMESPACE
: Es el nombre del espacio de nombres del proyecto de predicción.
Implementa un modelo en un extremo existente
Solo puedes implementar un modelo en un extremo existente si implementaste otro modelo en ese extremo cuando era nuevo. El sistema requiere este paso anterior para crear el extremo.
Sigue estos pasos para implementar un modelo de predicción en un extremo existente:
Crea un archivo YAML que defina un recurso personalizado
DeployedModel
.En el siguiente archivo YAML, se muestra una configuración de muestra:
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
Reemplaza lo siguiente:
DEPLOYED_MODEL_NAME
: Es el nombre que deseas asignar al archivo de definición deDeployedModel
.PROJECT_NAMESPACE
: Es el nombre del espacio de nombres del proyecto asociado con el clúster de predicción.PREDICTION_ENDPOINT
: Es el nombre del extremo existente, comomy-img-prediction-endpoint
.PATH_TO_MODEL
: Es la ruta de acceso a tu modelo en el bucket de almacenamiento.RESOURCE_POOL_NAME
: Es el nombre que le diste al archivo de definición deResourcePool
cuando creaste un grupo de recursos para alojar el modelo.
Modifica los valores en 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
Reemplaza lo siguiente:
PREDICTION_CLUSTER_KUBECONFIG
: Es la ruta de acceso al archivo kubeconfig en el clúster de predicción.DEPLOYED_MODEL_NAME
: Es el nombre del archivo de definición deDeployedModel
.
Cuando creas el recurso personalizado
DeployedModel
, la API de Kubernetes y el servicio de webhook validan el archivo YAML y registran el éxito o el error. El operador de predicción reconcilia el recurso personalizadoDeployedModel
y lo publica en el clúster de predicción.Muestra los detalles del recurso personalizado
Endpoint
existente:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG describe -f ENDPOINT_NAME.yaml
Reemplaza
ENDPOINT_NAME
por el nombre del archivo de definición deEndpoint
.Actualiza el archivo YAML de la definición del recurso personalizado
Endpoint
agregando un nuevo objetoserviceRef
en el campodestinations
. En el objeto nuevo, incluye el nombre del servicio adecuado según el recurso personalizadoDeployedModel
que creaste recientemente.En el siguiente archivo YAML, se muestra una configuración de muestra:
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
Reemplaza lo siguiente:
ENDPOINT_NAME
: Es el nombre del archivo de definición deEndpoint
existente.PROJECT_NAMESPACE
: Es el nombre del espacio de nombres del proyecto asociado con el clúster de predicción.PREDICTION_ENDPOINT
: Es el nombre del extremo existente. Hiciste referencia a este nombre en el archivo de definiciónDeployedModel
.DEPLOYED_MODEL_NAME
: Es el nombre de un archivo de definiciónDeployedModel
creado anteriormente.DEPLOYED_MODEL_NAME_2
: Es el nombre que le asignaste al archivo de definiciónDeployedModel
recién creado.
Puedes tener uno o más destinos
serviceRef
. Si tienes un tercer objetoserviceRef
, agrégalo al archivo YAML en el campodestinations
y reemplazaDEPLOYED_MODEL_NAME_3
por el nombre que le diste al tercer archivo de definiciónDeployedModel
que creaste. Sigue agregando o quitando objetosserviceRef
según los necesites, en función de la cantidad de modelos que implementes.Establece los campos
trafficPercentage
según cómo desees dividir el tráfico entre los modelos de este extremo. Modifica los valores en los campos restantes según la configuración de tu extremo.Aplica el archivo de definición
Endpoint
al clúster de predicción:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
Reemplaza
ENDPOINT_NAME
por el nombre del archivo de definición deEndpoint
.
Para obtener la ruta de URL del extremo 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}'
Reemplaza lo siguiente:
PREDICTION_CLUSTER_KUBECONFIG
: Es la ruta de acceso al archivo kubeconfig en el clúster de predicción.PREDICTION_ENDPOINT
: El nombre del extremo.PROJECT_NAMESPACE
: Es el nombre del espacio de nombres del proyecto de predicción.