Sie müssen ein Modell auf einem Endpunkt bereitstellen, bevor Sie es für Onlinevorhersagen verwenden können. Durch die Bereitstellung eines Modells werden physische Ressourcen zugeordnet, um Onlinevorhersagen mit niedriger Latenz bereitzustellen.
Auf dieser Seite werden die Schritte beschrieben, die Sie ausführen müssen, um ein Modell mit Online Prediction auf einem Endpunkt bereitzustellen.
Hinweis
Wenn Sie Online-Vorhersagemodelle bereitstellen möchten, wenden Sie sich an Ihren IAM-Projektadministrator, um die Rolle Vertex AI Prediction-Administrator (vertex-ai-prediction-admin) in Ihrem Projektnamespace anzufordern.
Weitere Informationen zu dieser Rolle finden Sie unter IAM-Berechtigungen vorbereiten.
Bevor Sie Ihr Modell auf einem Endpunkt bereitstellen, exportieren Sie Ihre Modellartefakte für die Vorhersage und prüfen Sie, ob Sie alle Voraussetzungen auf dieser Seite erfüllen.
Ressourcenpool erstellen
Mit einer benutzerdefinierten ResourcePool-Ressource können Sie das Verhalten Ihres Modells genau steuern. Sie können unter anderem die folgenden Einstellungen festlegen:
- Autoscaling-Konfigurationen
- Der Maschinentyp, der die CPU- und Arbeitsspeicheranforderungen definiert.
- Beschleunigeroptionen wie GPU-Ressourcen.
Der Maschinentyp ist für die Anfrage zur Knotenpoolspezifikation, die Sie zum Erstellen des Vorhersageclusters senden, von entscheidender Bedeutung.
Für den Ressourcenpool des bereitgestellten Modells bestimmen die Anzahl und der Typ der Beschleuniger die GPU-Nutzung. Der Maschinentyp bestimmt nur die angeforderten CPU- und Arbeitsspeicherressourcen. Wenn Sie GPU-Beschleuniger in die ResourcePool-Spezifikation aufnehmen, steuert das Feld machineType die CPU- und Arbeitsspeicheranforderungen für das Modell, während das Feld acceleratorType die GPU steuert. Außerdem steuert das Feld acceleratorCount die Anzahl der GPU-Slices.
So erstellen Sie eine benutzerdefinierte ResourcePool-Ressource:
Erstellen Sie eine YAML-Datei, in der die benutzerdefinierte Ressource
ResourcePooldefiniert wird. Die folgenden Beispiele enthalten YAML-Dateien für Ressourcenpools mit GPU-Beschleunigern (GPU-basierte Modelle) und ohne GPU-Beschleuniger (CPU-basierte Modelle):GPU-basierte Modelle
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: 10CPU-basierte Modelle
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: 10Ersetzen Sie Folgendes:
RESOURCE_POOL_NAME: der Name, den Sie derResourcePool-Definitionsdatei geben möchten.PROJECT_NAMESPACE: der Name des Projekt-Namespace, der mit dem Vorhersagecluster verknüpft ist.
Ändern Sie die Werte in den
dedicatedResources-Feldern entsprechend Ihren Ressourcenanforderungen und den im Vorhersagecluster verfügbaren Ressourcen.Wenden Sie die Definitionsdatei
ResourcePoolauf den Vorhersagecluster an:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f RESOURCE_POOL_NAME.yamlErsetzen Sie Folgendes:
PREDICTION_CLUSTER_KUBECONFIG: der Pfad zur kubeconfig-Datei im Vorhersagecluster.RESOURCE_POOL_NAME: der Name derResourcePool-Definitionsdatei.
Wenn Sie die benutzerdefinierte Ressource ResourcePool erstellen, validieren die Kubernetes API und der Webhook-Dienst die YAML-Datei und melden Erfolg oder Fehler. Der Vorhersageoperator stellt Ihre Ressourcen aus dem Ressourcenpool bereit und reserviert sie, wenn Sie Ihre Modelle auf einem Endpunkt bereitstellen.
Modell auf einem Endpunkt bereitstellen
Wenn Sie einen Ressourcenpool haben, können Sie mehrere Modelle auf einem Endpunkt bereitstellen und ein Modell auf mehreren Endpunkten bereitstellen. Stellen Sie ein Vorhersagemodell für unterstützte Container bereit. Je nachdem, ob der Endpunkt bereits vorhanden ist oder nicht, wählen Sie eine der folgenden beiden Methoden aus:
Modell auf einem neuen Endpunkt bereitstellen
So stellen Sie ein Vorhersagemodell auf einem neuen Endpunkt bereit:
Erstellen Sie eine YAML-Datei, die eine benutzerdefinierte
DeployedModel-Ressource definiert:TensorFlow
Die folgende YAML-Datei zeigt eine Beispielkonfiguration für ein TensorFlow-Modell:
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-fqn/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-fqn/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-18:latest # For GPU-based models: gcr.io/aiml/prediction/containers/tf2-gpu.2-18:latest imageURI: gcr.io/aiml/prediction/containers/tf2-gpu.2-18:latest ports: - 8080 grpcPorts: - 8500 resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACEErsetzen Sie Folgendes:
DEPLOYED_MODEL_NAME: der Name, den Sie derDeployedModel-Definitionsdatei geben möchten.PROJECT_NAMESPACE: der Name des Projekt-Namespace, der mit dem Vorhersagecluster verknüpft ist.PREDICTION_ENDPOINT: der Name, den Sie dem neuen Endpunkt geben möchten, z. B.my-img-prediction-endpoint.PATH_TO_MODEL: der Pfad zu Ihrem Modell im Storage-Bucket.RESOURCE_POOL_NAME: Der Name, den Sie derResourcePool-Definitionsdatei gegeben haben, als Sie einen Ressourcenpool zum Hosten des Modells erstellt haben.
Ändern Sie die Werte in den übrigen Feldern entsprechend Ihrem Vorhersagemodell.
PyTorch
Die folgende YAML-Datei zeigt eine Beispielkonfiguration für ein PyTorch-Modell:
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 prefix that # includes the model artifacts for the model version. # For example, s3://my-prediction-bucket-fqn/pytorch-model/1 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-1:latest # For GPU-based models: gcr.io/aiml/prediction/containers/pytorch-gpu.2-1:latest imageURI: gcr.io/aiml/prediction/containers/pytorch-cpu.2-1:latest ports: - 8080 grpcPorts: - 7070 sharesResourcePool: false resourcePoolRef: kind: ResourcePool name: RESOURCE_POOL_NAME namespace: PROJECT_NAMESPACEErsetzen Sie Folgendes:
DEPLOYED_MODEL_NAME: der Name, den Sie derDeployedModel-Definitionsdatei geben möchten.PROJECT_NAMESPACE: der Name des Projekt-Namespace, der mit dem Vorhersagecluster verknüpft ist.PREDICTION_ENDPOINT: der Name, den Sie dem neuen Endpunkt geben möchten, z. B.my-img-prediction-endpoint.PATH_TO_MODEL: der Pfad zu Ihrem Modell im Storage-Bucket.RESOURCE_POOL_NAME: Der Name, den Sie derResourcePool-Definitionsdatei gegeben haben, als Sie einen Ressourcenpool zum Hosten des Modells erstellt haben.
Ändern Sie die Werte in den übrigen Feldern entsprechend Ihrem Vorhersagemodell.
Wenden Sie die Definitionsdatei
DeployedModelauf den Vorhersagecluster an:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yamlErsetzen Sie Folgendes:
PREDICTION_CLUSTER_KUBECONFIG: der Pfad zur kubeconfig-Datei im Vorhersagecluster.DEPLOYED_MODEL_NAME: der Name derDeployedModel-Definitionsdatei.
Wenn Sie die benutzerdefinierte Ressource
DeployedModelerstellen, validieren die Kubernetes API und der Webhook-Dienst die YAML-Datei und melden Erfolg oder Fehler. Der Vorhersageoperator gleicht die benutzerdefinierte RessourceDeployedModelab und stellt sie im Vorhersagecluster bereit.Erstellen Sie eine YAML-Datei, in der eine benutzerdefinierte
Endpoint-Ressource definiert wird.Die folgende YAML-Datei zeigt eine Beispielkonfiguration:
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: 8081Ersetzen Sie Folgendes:
ENDPOINT_NAME: der Name, den Sie derEndpoint-Definitionsdatei geben möchten.PROJECT_NAMESPACE: der Name des Projekt-Namespace, der mit dem Vorhersagecluster verknüpft ist.PREDICTION_ENDPOINT: der Name des neuen Endpunkts. Sie haben diesen Namen in der DefinitionsdateiDeployedModeldefiniert.DEPLOYED_MODEL_NAME: der Name, den Sie derDeployedModel-Definitionsdatei gegeben haben.
Sie können ein oder mehrere
serviceRef-Ziele haben. Wenn Sie ein zweitesserviceRef-Objekt haben, fügen Sie es der YAML-Datei im Felddestinationshinzu und ersetzen SieDEPLOYED_MODEL_NAME_2durch den Namen, den Sie der zweiten von Ihnen erstelltenDeployedModel-Definitionsdatei gegeben haben. Fügen Sie je nach Anzahl der bereitzustellenden Modelle weitereserviceRef-Objekte hinzu oder entfernen Sie sie.Legen Sie die
trafficPercentage-Felder so fest, wie Sie den Traffic zwischen den Modellen auf diesem Endpunkt aufteilen möchten. Ändern Sie die Werte in den verbleibenden Feldern entsprechend Ihren Endpunktkonfigurationen.Wenden Sie die Definitionsdatei
Endpointauf den Vorhersagecluster an:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yamlErsetzen Sie
ENDPOINT_NAMEdurch den Namen derEndpoint-Definitionsdatei.
Führen Sie den folgenden Befehl aus, um den Endpunkt-URL-Pfad für das Vorhersagemodell abzurufen:
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
Ersetzen Sie Folgendes:
PREDICTION_CLUSTER_KUBECONFIG: der Pfad zur kubeconfig-Datei im Vorhersagecluster.PREDICTION_ENDPOINT: der Name des neuen Endpunkts.PROJECT_NAMESPACE: der Name des Namespace des Vorhersageprojekts.
Modell auf einem vorhandenen Endpunkt bereitstellen
Sie können ein Modell nur dann auf einem vorhandenen Endpunkt bereitstellen, wenn Sie zuvor ein anderes Modell auf diesem Endpunkt bereitgestellt haben, als er neu war. Das System benötigt diesen vorherigen Schritt, um den Endpunkt zu erstellen.
So stellen Sie ein Vorhersagemodell auf einem vorhandenen Endpunkt bereit:
Erstellen Sie eine YAML-Datei, in der eine benutzerdefinierte
DeployedModel-Ressource definiert wird.Die folgende YAML-Datei zeigt eine Beispielkonfiguration:
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-fqn/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-fqn/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_NAMESPACEErsetzen Sie Folgendes:
DEPLOYED_MODEL_NAME: der Name, den Sie derDeployedModel-Definitionsdatei geben möchten.PROJECT_NAMESPACE: der Name des Projekt-Namespace, der mit dem Vorhersagecluster verknüpft ist.PREDICTION_ENDPOINT: der Name des vorhandenen Endpunkts, z. B.my-img-prediction-endpoint.PATH_TO_MODEL: der Pfad zu Ihrem Modell im Storage-Bucket.RESOURCE_POOL_NAME: Der Name, den Sie der DefinitionsdateiResourcePoolgegeben haben, als Sie einen Ressourcenpool zum Hosten des Modells erstellt haben.
Ändern Sie die Werte in den übrigen Feldern entsprechend Ihrem Vorhersagemodell.
Wenden Sie die Definitionsdatei
DeployedModelauf den Vorhersagecluster an:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yamlErsetzen Sie Folgendes:
PREDICTION_CLUSTER_KUBECONFIG: der Pfad zur kubeconfig-Datei im Vorhersagecluster.DEPLOYED_MODEL_NAME: der Name derDeployedModel-Definitionsdatei.
Wenn Sie die benutzerdefinierte Ressource
DeployedModelerstellen, validieren die Kubernetes API und der Webhook-Dienst die YAML-Datei und melden Erfolg oder Fehler. Der Vorhersageoperator gleicht die benutzerdefinierte RessourceDeployedModelab und stellt sie im Vorhersagecluster bereit.Details der vorhandenen benutzerdefinierten Ressource
Endpointanzeigen:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG describe -f ENDPOINT_NAME.yamlErsetzen Sie
ENDPOINT_NAMEdurch den Namen derEndpoint-Definitionsdatei.Aktualisieren Sie die YAML-Datei der benutzerdefinierten Ressourcendefinition
Endpoint, indem Sie im Felddestinationsein neuesserviceRef-Objekt hinzufügen. Geben Sie für das neue Objekt den entsprechenden Dienstnamen basierend auf der neu erstellten benutzerdefinierten RessourceDeployedModelan.Die folgende YAML-Datei zeigt eine Beispielkonfiguration:
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: 8081Ersetzen Sie Folgendes:
ENDPOINT_NAME: der Name der vorhandenenEndpoint-Definitionsdatei.PROJECT_NAMESPACE: der Name des Projekt-Namespace, der mit dem Vorhersagecluster verknüpft ist.PREDICTION_ENDPOINT: der Name des vorhandenen Endpunkts. Sie haben diesen Namen in der DefinitionsdateiDeployedModelangegeben.DEPLOYED_MODEL_NAME: der Name einer zuvor erstelltenDeployedModel-Definitionsdatei.DEPLOYED_MODEL_NAME_2: der Name, den Sie der neu erstelltenDeployedModel-Definitionsdatei gegeben haben.
Sie können ein oder mehrere
serviceRef-Ziele haben. Wenn Sie ein drittesserviceRef-Objekt haben, fügen Sie es der YAML-Datei im Felddestinationshinzu und ersetzen SieDEPLOYED_MODEL_NAME_3durch den Namen, den Sie der dritten von Ihnen erstelltenDeployedModel-Definitionsdatei gegeben haben. Fügen Sie je nach Anzahl der bereitzustellenden Modelle weitereserviceRef-Objekte hinzu oder entfernen Sie sie.Legen Sie die
trafficPercentage-Felder so fest, wie Sie den Traffic zwischen den Modellen dieses Endpunkts aufteilen möchten. Ändern Sie die Werte in den verbleibenden Feldern entsprechend Ihren Endpunktkonfigurationen.Wenden Sie die Definitionsdatei
Endpointauf den Vorhersagecluster an:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yamlErsetzen Sie
ENDPOINT_NAMEdurch den Namen derEndpoint-Definitionsdatei.
Führen Sie den folgenden Befehl aus, um den Endpunkt-URL-Pfad für das Vorhersagemodell abzurufen:
kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
Ersetzen Sie Folgendes:
PREDICTION_CLUSTER_KUBECONFIG: der Pfad zur kubeconfig-Datei im Vorhersagecluster.PREDICTION_ENDPOINT: der Name des Endpunkts.PROJECT_NAMESPACE: der Name des Namespace des Vorhersageprojekts.