Modell auf einem Endpunkt bereitstellen

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 der Onlinevorhersage auf einem Endpunkt bereitzustellen.

Hinweis

Bevor Sie Ihr Modell auf einem Endpunkt bereitstellen, exportieren Sie die Modellartefakte für die Vorhersage und prüfen Sie, ob alle Voraussetzungen auf dieser Seite erfüllt sind.

Bitten Sie Ihren Projekt-IAM-Administrator, Ihnen die Rolle „Vertex AI Prediction Admin“ (vertex-ai-prediction-Admin) zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Bereitstellen von Onlinevorhersagemodellen benötigen. Informationen zu dieser Rolle finden Sie unter IAM-Berechtigungen vorbereiten.

Ressourcenpool erstellen

Mit einer benutzerdefinierten ResourcePool-Ressource können Sie das Verhalten Ihres Modells detailliert steuern. Sie können beispielsweise folgende Einstellungen definieren:

  • Autoscaling-Konfigurationen
  • Den Maschinentyp, der die CPU- und Arbeitsspeicheranforderungen definiert
  • Beschleunigeroptionen wie GPU-Ressourcen

Der Maschinentyp ist für die Anforderung der Knotenpoolspezifikation, die Sie senden zum Erstellen des Vorhersageclusters unerlässlich.

Für den Ressourcenpool des bereitgestellten Modells bestimmen die Anzahl und der Typ des Beschleunigers die GPU-Nutzung. Der Maschinentyp gibt nur die angeforderten CPU- und Arbeitsspeicherressourcen vor. Wenn Sie GPU-Beschleuniger in die ResourcePool-Spezifikation einbeziehen, 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:

  1. Erstellen Sie eine YAML-Datei, in der die benutzerdefinierte ResourcePool-Ressource definiert ist. 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: 10
    

    CPU-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: 10
    

    Ersetzen Sie Folgendes:

    • RESOURCE_POOL_NAME: der Name, den Sie der ResourcePool-Definitionsdatei geben möchten.
    • PROJECT_NAMESPACE: der Name des Projektnamespaces, der mit dem Vorhersagecluster verknüpft ist.

    Ändern Sie die Werte in den Feldern dedicatedResources entsprechend Ihren Ressourcenanforderungen und den verfügbaren Ressourcen in Ihrem Vorhersagecluster.

  2. Wenden Sie die ResourcePool-Definitionsdatei auf den Vorhersagecluster an:

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f RESOURCE_POOL_NAME.yaml
    

    Ersetzen Sie Folgendes:

    • PREDICTION_CLUSTER_KUBECONFIG: der Pfad zur kubeconfig-Datei im Vorhersagecluster.
    • RESOURCE_POOL_NAME: der Name der ResourcePool-Definitionsdatei.

Wenn Sie die benutzerdefinierte ResourcePool-Ressource erstellen, werden die YAML-Datei und der Webhook-Dienst von der Kubernetes API validiert und es wird gemeldet, ob der Vorgang erfolgreich war. Der Vorhersageoperator stellt Ihre Ressourcen aus dem Ressourcen pool 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. Wählen Sie je nachdem, ob der Endpunkt bereits vorhanden ist oder nicht, eine der folgenden beiden Methoden aus:

Modell auf einem neuen Endpunkt bereitstellen

So stellen Sie ein Vorhersagemodell auf einem neuen Endpunkt bereit:

  1. Erstellen Sie eine YAML-Datei, in der eine benutzerdefinierte DeployedModel-Ressource definiert ist:

    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_NAMESPACE
    

    Ersetzen Sie Folgendes:

    • DEPLOYED_MODEL_NAME: der Name, den Sie der DeployedModel-Definitionsdatei geben möchten.
    • PROJECT_NAMESPACE: der Name des Projektnamespaces, 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 Speicher-Bucket.
    • RESOURCE_POOL_NAME: der Name, den Sie der ResourcePool Definitionsdatei gegeben haben, als Sie einen Ressourcenpool erstellt haben zum Hosten des Modells.

    Ä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_NAMESPACE
    

    Ersetzen Sie Folgendes:

    • DEPLOYED_MODEL_NAME: der Name, den Sie der DeployedModel-Definitionsdatei geben möchten.
    • PROJECT_NAMESPACE: der Name des Projektnamespaces, 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 Speicher-Bucket.
    • RESOURCE_POOL_NAME: der Name, den Sie der ResourcePool Definitionsdatei gegeben haben, als Sie einen Ressourcenpool erstellt haben zum Hosten des Modells.

    Ändern Sie die Werte in den übrigen Feldern entsprechend Ihrem Vorhersagemodell.

  2. Wenden Sie die DeployedModel-Definitionsdatei auf den Vorhersagecluster an:

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
    

    Ersetzen Sie Folgendes:

    • PREDICTION_CLUSTER_KUBECONFIG: der Pfad zur kubeconfig-Datei im Vorhersagecluster.
    • DEPLOYED_MODEL_NAME: der Name der DeployedModel-Definitionsdatei.

    Wenn Sie die benutzerdefinierte DeployedModel-Ressource erstellen, werden die YAML-Datei und der Webhook-Dienst von der Kubernetes API validiert und es wird gemeldet, ob der Vorgang erfolgreich war. Der Vorhersageoperator gleicht die benutzerdefinierte DeployedModel-Ressource ab und stellt sie im Vorhersagecluster bereit.

  3. Erstellen Sie eine YAML-Datei, in der eine benutzerdefinierte Endpoint-Ressource definiert ist.

    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: 8081
    

    Ersetzen Sie Folgendes:

    • ENDPOINT_NAME: der Name, den Sie der Endpoint-Definitionsdatei geben möchten.
    • PROJECT_NAMESPACE: der Name des Projektnamespaces, der mit dem Vorhersagecluster verknüpft ist.
    • PREDICTION_ENDPOINT: der Name des neuen Endpunkts. Sie haben diesen Namen in der DeployedModel-Definitionsdatei definiert.
    • DEPLOYED_MODEL_NAME: der Name, den Sie der DeployedModel-Definitionsdatei gegeben haben.

    Sie können ein oder mehrere serviceRef-Ziele haben. Wenn Sie ein zweites serviceRef-Objekt haben, fügen Sie es in der YAML-Datei im Feld destinations hinzu und ersetzen Sie DEPLOYED_MODEL_NAME_2 durch den Namen, den Sie der zweiten erstellten DeployedModel-Definitionsdatei gegeben haben. Fügen Sie nach Bedarf serviceRef-Objekte hinzu oder entfernen Sie sie, je nachdem, wie viele Modelle Sie bereitstellen.

    Legen Sie die Felder trafficPercentage entsprechend der gewünschten Aufteilung des Traffics zwischen den Modellen auf diesem Endpunkt fest. Ändern Sie die Werte in den übrigen Feldern entsprechend Ihren Endpunktkonfigurationen.

  4. Wenden Sie die Endpoint-Definitionsdatei auf den Vorhersagecluster an:

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
    

    Ersetzen Sie ENDPOINT_NAME durch den Namen der Endpoint-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 Projektnamespaces für die Vorhersage.

Modell auf einem vorhandenen Endpunkt bereitstellen

Sie können ein Modell nur auf einem vorhandenen Endpunkt bereitstellen, wenn Sie zuvor ein anderes Modell auf diesem Endpunkt bereitgestellt haben, als er neu war. Dieser vorherige Schritt ist erforderlich, um den Endpunkt zu erstellen.

So stellen Sie ein Vorhersagemodell auf einem vorhandenen Endpunkt bereit:

  1. Erstellen Sie eine YAML-Datei, in der eine benutzerdefinierte DeployedModel-Ressource definiert ist:

    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_NAMESPACE
    

    Ersetzen Sie Folgendes:

    • DEPLOYED_MODEL_NAME: der Name, den Sie der DeployedModel-Definitionsdatei geben möchten.
    • PROJECT_NAMESPACE: der Name des Projektnamespaces, 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 Speicher-Bucket.
    • RESOURCE_POOL_NAME: der Name, den Sie der ResourcePool Definitionsdatei gegeben haben, als Sie einen Ressourcenpool erstellt haben zum Hosten des Modells.

    Ändern Sie die Werte in den übrigen Feldern entsprechend Ihrem Vorhersagemodell.

  2. Wenden Sie die DeployedModel-Definitionsdatei auf den Vorhersagecluster an:

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f DEPLOYED_MODEL_NAME.yaml
    

    Ersetzen Sie Folgendes:

    • PREDICTION_CLUSTER_KUBECONFIG: der Pfad zur kubeconfig-Datei im Vorhersagecluster.
    • DEPLOYED_MODEL_NAME: der Name der DeployedModel-Definitionsdatei.

    Wenn Sie die benutzerdefinierte DeployedModel-Ressource erstellen, werden die YAML-Datei und der Webhook-Dienst von der Kubernetes API validiert und es wird gemeldet, ob der Vorgang erfolgreich war. Der Vorhersageoperator gleicht die benutzerdefinierte DeployedModel-Ressource ab und stellt sie im Vorhersagecluster bereit.

  3. Details der vorhandenen benutzerdefinierten Endpoint-Ressource anzeigen:

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG describe -f ENDPOINT_NAME.yaml
    

    Ersetzen Sie ENDPOINT_NAME durch den Namen der Endpoint-Definitionsdatei.

  4. Aktualisieren Sie die YAML-Datei der benutzerdefinierten Endpoint-Ressourcendefinition, indem Sie im Feld destinations ein neues serviceRef-Objekt hinzufügen. Fügen Sie dem neuen Objekt den entsprechenden Dienstnamen basierend auf der neu erstellten benutzerdefinierten DeployedModel-Ressource hinzu.

    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: 8081
    

    Ersetzen Sie Folgendes:

    • ENDPOINT_NAME: der Name der vorhandenen Endpoint-Definitionsdatei.
    • PROJECT_NAMESPACE: der Name des Projektnamespaces, der mit dem Vorhersagecluster verknüpft ist.
    • PREDICTION_ENDPOINT: der Name des vorhandenen Endpunkts. Sie haben diesen Namen in der DeployedModel-Definitionsdatei angegeben.
    • DEPLOYED_MODEL_NAME: der Name einer zuvor erstellten DeployedModel-Definitionsdatei.
    • DEPLOYED_MODEL_NAME_2: der Name, den Sie der neu erstellten DeployedModel-Definitionsdatei gegeben haben.

    Sie können ein oder mehrere serviceRef-Ziele haben. Wenn Sie ein drittes serviceRef-Objekt haben, fügen Sie es in der YAML-Datei im Feld destinations hinzu und ersetzen Sie DEPLOYED_MODEL_NAME_3 durch den Namen, den Sie der dritten erstellten DeployedModel-Definitionsdatei gegeben haben. Fügen Sie nach Bedarf serviceRef-Objekte hinzu oder entfernen Sie sie, je nachdem, wie viele Modelle Sie bereitstellen.

    Legen Sie die Felder trafficPercentage entsprechend der gewünschten Aufteilung des Traffics zwischen den Modellen auf diesem Endpunkt fest. Ändern Sie die Werte in den übrigen Feldern entsprechend Ihren Endpunktkonfigurationen.

  5. Wenden Sie die Endpoint-Definitionsdatei auf den Vorhersagecluster an:

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG apply -f ENDPOINT_NAME.yaml
    

    Ersetzen Sie ENDPOINT_NAME durch den Namen der Endpoint-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 Projektnamespaces für die Vorhersage.