Vous devez déployer un modèle sur un point de terminaison avant de pouvoir l'utiliser pour diffuser des prédictions en ligne. Le déploiement d'un modèle associe des ressources physiques pour diffuser des prédictions en ligne avec une faible latence.
Cette page décrit la procédure à suivre pour déployer un modèle sur un point de terminaison à l'aide de la prédiction en ligne.
Avant de commencer
Avant de déployer votre modèle sur un point de terminaison, exportez vos artefacts de modèle pour la prédiction et assurez-vous de remplir tous les prérequis de cette page.
Créer un pool de ressources
Une ressource personnalisée ResourcePool
vous permet de contrôler précisément le comportement de votre modèle. Vous pouvez définir des paramètres tels que les suivants :
- Configurations de l'autoscaling.
- Le type de machine, qui définit les exigences en termes de processeur et de mémoire.
- Options d'accélérateur telles que les ressources GPU.
Le type de machine est essentiel pour la requête de spécification du pool de nœuds que vous envoyez pour créer le cluster de prédiction.
Pour le pool de ressources du modèle déployé, le nombre et le type d'accélérateurs déterminent l'utilisation du GPU. Le type de machine ne détermine que les ressources de processeur et de mémoire demandées. Pour cette raison, lorsque vous incluez des accélérateurs GPU dans la spécification ResourcePool
, le champ machineType
contrôle les exigences en termes de processeur et de mémoire pour le modèle, tandis que le champ acceleratorType
contrôle le GPU. De plus, le champ acceleratorCount
contrôle le nombre de tranches de GPU.
Pour créer une ressource personnalisée ResourcePool
:
Créez un fichier YAML définissant la ressource personnalisée
ResourcePool
. Les exemples suivants contiennent des fichiers YAML pour les pools de ressources avec des accélérateurs GPU (modèles basés sur GPU) et sans accélérateurs GPU (modèles basés sur CPU) :Modèles basés sur des 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
Modèles basés sur le processeur
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
Remplacez les éléments suivants :
RESOURCE_POOL_NAME
: nom que vous souhaitez donner au fichier de définitionResourcePool
.PROJECT_NAMESPACE
: nom de l'espace de noms du projet associé au cluster de prédiction.
Modifiez les valeurs des champs
dedicatedResources
en fonction de vos besoins en ressources et de ce qui est disponible dans votre cluster de prédiction.Appliquez le fichier de définition
ResourcePool
au cluster de prédiction :kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f RESOURCE_POOL_NAME.yaml
Remplacez les éléments suivants :
PREDICTION_CLUSTER_KUBECONFIG
: chemin d'accès au fichier kubeconfig dans le cluster de prédiction.RESOURCE_POOL_NAME
: nom du fichier de définitionResourcePool
.
Lorsque vous créez la ressource personnalisée ResourcePool
, l'API Kubernetes et le service de webhook valident le fichier YAML et signalent la réussite ou l'échec de l'opération. L'opérateur de prédiction provisionne et réserve vos ressources à partir du pool de ressources lorsque vous déployez vos modèles sur un point de terminaison.
Déployer votre modèle sur un point de terminaison
Si vous disposez d'un pool de ressources, vous pouvez déployer plusieurs modèles sur un point de terminaison et un modèle sur plusieurs points de terminaison. Déployez un modèle de prédiction ciblant les conteneurs compatibles. Selon que le point de terminaison existe déjà ou non, choisissez l'une des deux méthodes suivantes :
- Déployer un modèle sur un nouveau point de terminaison
- Déployer un modèle sur un point de terminaison existant
Déployer un modèle sur un nouveau point de terminaison
Pour déployer un modèle de prédiction sur un nouveau point de terminaison, procédez comme suit :
Créez un fichier YAML définissant une ressource personnalisée
DeployedModel
:TensorFlow
Le fichier YAML suivant montre un exemple de configuration pour un modèle 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
Remplacez les éléments suivants :
DEPLOYED_MODEL_NAME
: nom que vous souhaitez donner au fichier de définitionDeployedModel
.PROJECT_NAMESPACE
: nom de l'espace de noms du projet associé au cluster de prédiction.PREDICTION_ENDPOINT
: nom que vous souhaitez attribuer au nouveau point de terminaison, par exemplemy-img-prediction-endpoint
.PATH_TO_MODEL
: chemin d'accès à votre modèle dans le bucket de stockage.RESOURCE_POOL_NAME
: nom que vous avez attribué au fichier de définitionResourcePool
lorsque vous avez créé un pool de ressources pour héberger le modèle.
Modifiez les valeurs des autres champs en fonction de votre modèle de prédiction.
PyTorch
Le fichier YAML suivant montre un exemple de configuration pour un modèle 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
Remplacez les éléments suivants :
DEPLOYED_MODEL_NAME
: nom que vous souhaitez donner au fichier de définitionDeployedModel
.PROJECT_NAMESPACE
: nom de l'espace de noms du projet associé au cluster de prédiction.PREDICTION_ENDPOINT
: nom que vous souhaitez attribuer au nouveau point de terminaison, par exemplemy-img-prediction-endpoint
.PATH_TO_MODEL
: chemin d'accès à votre modèle dans le bucket de stockage.RESOURCE_POOL_NAME
: nom que vous avez attribué au fichier de définitionResourcePool
lorsque vous avez créé un pool de ressources pour héberger le modèle.
Modifiez les valeurs des autres champs en fonction de votre modèle de prédiction.
Appliquez le fichier de définition
DeployedModel
au cluster de prédiction :kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
Remplacez les éléments suivants :
PREDICTION_CLUSTER_KUBECONFIG
: chemin d'accès au fichier kubeconfig dans le cluster de prédiction.DEPLOYED_MODEL_NAME
: nom du fichier de définitionDeployedModel
.
Lorsque vous créez la ressource personnalisée
DeployedModel
, l'API Kubernetes et le service de webhook valident le fichier YAML et indiquent si l'opération a réussi ou échoué. L'opérateur de prédiction réconcilie la ressource personnaliséeDeployedModel
et la diffuse dans le cluster de prédiction.Créez un fichier YAML définissant une ressource personnalisée
Endpoint
.Le fichier YAML suivant montre un exemple de configuration :
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
Remplacez les éléments suivants :
ENDPOINT_NAME
: nom que vous souhaitez attribuer au fichier de définitionEndpoint
.PROJECT_NAMESPACE
: nom de l'espace de noms du projet associé au cluster de prédiction.PREDICTION_ENDPOINT
: nom du nouveau point de terminaison. Vous avez défini ce nom dans le fichier de définitionDeployedModel
.DEPLOYED_MODEL_NAME
: nom que vous avez donné au fichier de définitionDeployedModel
.
Vous pouvez définir une ou plusieurs destinations
serviceRef
. Si vous avez un deuxième objetserviceRef
, ajoutez-le au fichier YAML dans le champdestinations
et remplacezDEPLOYED_MODEL_NAME_2
par le nom que vous avez donné au deuxième fichier de définitionDeployedModel
que vous avez créé. Continuez à ajouter ou à supprimer des objetsserviceRef
selon vos besoins, en fonction du nombre de modèles que vous déployez.Définissez les champs
trafficPercentage
en fonction de la façon dont vous souhaitez répartir le trafic entre les modèles de ce point de terminaison. Modifiez les valeurs des champs restants en fonction de la configuration de vos points de terminaison.Appliquez le fichier de définition
Endpoint
au cluster de prédiction :kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
Remplacez
ENDPOINT_NAME
par le nom du fichier de définitionEndpoint
.
Pour obtenir le chemin d'URL du point de terminaison du modèle de prédiction, exécutez la commande suivante :
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
Remplacez les éléments suivants :
PREDICTION_CLUSTER_KUBECONFIG
: chemin d'accès au fichier kubeconfig dans le cluster de prédiction.PREDICTION_ENDPOINT
: nom du nouveau point de terminaison.PROJECT_NAMESPACE
: nom de l'espace de noms du projet de prédiction.
Déployer un modèle sur un point de terminaison existant
Vous ne pouvez déployer un modèle sur un point de terminaison existant que si vous avez déjà déployé un autre modèle sur ce point de terminaison lorsqu'il était nouveau. Le système a besoin de cette étape précédente pour créer le point de terminaison.
Pour déployer un modèle de prédiction sur un point de terminaison existant, procédez comme suit :
Créez un fichier YAML définissant une ressource personnalisée
DeployedModel
.Le fichier YAML suivant montre un exemple de configuration :
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
Remplacez les éléments suivants :
DEPLOYED_MODEL_NAME
: nom que vous souhaitez donner au fichier de définitionDeployedModel
.PROJECT_NAMESPACE
: nom de l'espace de noms du projet associé au cluster de prédiction.PREDICTION_ENDPOINT
: nom du point de terminaison existant, tel quemy-img-prediction-endpoint
.PATH_TO_MODEL
: chemin d'accès à votre modèle dans le bucket de stockage.RESOURCE_POOL_NAME
: nom que vous avez attribué au fichier de définitionResourcePool
lorsque vous avez créé un pool de ressources pour héberger le modèle.
Modifiez les valeurs des champs restants en fonction de votre modèle de prédiction.
Appliquez le fichier de définition
DeployedModel
au cluster de prédiction :kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
Remplacez les éléments suivants :
PREDICTION_CLUSTER_KUBECONFIG
: chemin d'accès au fichier kubeconfig dans le cluster de prédiction.DEPLOYED_MODEL_NAME
: nom du fichier de définitionDeployedModel
.
Lorsque vous créez la ressource personnalisée
DeployedModel
, l'API Kubernetes et le service de webhook valident le fichier YAML et indiquent si l'opération a réussi ou échoué. L'opérateur de prédiction réconcilie la ressource personnaliséeDeployedModel
et la diffuse dans le cluster de prédiction.Affichez les détails de la ressource personnalisée
Endpoint
existante :kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG describe -f ENDPOINT_NAME.yaml
Remplacez
ENDPOINT_NAME
par le nom du fichier de définitionEndpoint
.Mettez à jour le fichier YAML de la définition de ressource personnalisée
Endpoint
en ajoutant un nouvel objetserviceRef
au champdestinations
. Sur le nouvel objet, incluez le nom de service approprié en fonction de la ressource personnaliséeDeployedModel
que vous venez de créer.Le fichier YAML suivant montre un exemple de configuration :
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
Remplacez les éléments suivants :
ENDPOINT_NAME
: nom du fichier de définitionEndpoint
existant.PROJECT_NAMESPACE
: nom de l'espace de noms du projet associé au cluster de prédiction.PREDICTION_ENDPOINT
: nom du point de terminaison existant. Vous avez fait référence à ce nom dans le fichier de définitionDeployedModel
.DEPLOYED_MODEL_NAME
: nom d'un fichier de définitionDeployedModel
créé précédemment.DEPLOYED_MODEL_NAME_2
: nom que vous avez donné au fichier de définitionDeployedModel
nouvellement créé.
Vous pouvez définir une ou plusieurs destinations
serviceRef
. Si vous avez un troisième objetserviceRef
, ajoutez-le au fichier YAML dans le champdestinations
et remplacezDEPLOYED_MODEL_NAME_3
par le nom que vous avez donné au troisième fichier de définitionDeployedModel
que vous avez créé. Continuez à ajouter ou à supprimer des objetsserviceRef
selon vos besoins, en fonction du nombre de modèles que vous déployez.Définissez les champs
trafficPercentage
en fonction de la façon dont vous souhaitez répartir le trafic entre les modèles de ce point de terminaison. Modifiez les valeurs des champs restants en fonction de la configuration de vos points de terminaison.Appliquez le fichier de définition
Endpoint
au cluster de prédiction :kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
Remplacez
ENDPOINT_NAME
par le nom du fichier de définitionEndpoint
.
Pour obtenir le chemin d'URL du point de terminaison du modèle de prédiction, exécutez la commande suivante :
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
Remplacez les éléments suivants :
PREDICTION_CLUSTER_KUBECONFIG
: chemin d'accès au fichier kubeconfig dans le cluster de prédiction.PREDICTION_ENDPOINT
: nom du point de terminaison.PROJECT_NAMESPACE
: nom de l'espace de noms du projet de prédiction.