Google Cloud-Pipeline-Komponenten verwenden

Wenn Sie Google Cloud-Pipeline-Komponenten (GCPC, Google Cloud Pipeline Components) verwenden, können Sie Ihre Komponenten und Artefakte mit folgenden Vertex AI- und Google Cloud-Features sichern.

Dienstkonto für eine Komponente angeben

Wenn Sie eine Komponente verwenden, können Sie optional ein Dienstkonto angeben. Ihre Komponente wird gestartet und verfügt über die Berechtigungen dieses Dienstkontos. Sie können mit dem folgenden Code beispielsweise das Dienstkonto einer ModelDeploy-Komponente angeben:

model_deploy_op = ModelDeployOp(model=training_job_run_op.outputs["model"],
    endpoint=endpoint_op.outputs["endpoint"],
    automatic_resources_min_replica_count=1,
    automatic_resources_max_replica_count=1,
    service_account="SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com")

Dabei gilt:

  • SERVICE_ACCOUNT_ID: Die ID für das Dienstkonto.
  • PROJECT_ID: ID des Projekts

Weitere Informationen zur Verwendung eines benutzerdefinierten Dienstkontos und zum Konfigurieren eines Dienstkontos für die Verwendung mit Vertex AI-Pipelines

Mit VPC Service Controls Daten-Exfiltration verhindern

Mit VPC Service Controls können Sie das Risiko einer Daten-Exfiltration aus Vertex AI-Pipelines reduzieren. Wenn Sie VPC Service Controls zum Erstellen eines Dienstperimeters verwenden, werden Ressourcen und Daten, die von Vertex AI-Pipelines und den Google Cloud-Pipeline-Komponenten erstellt werden, automatisch geschützt. Wenn Sie beispielsweise VPC Service Controls zum Schutz von Vertex AI verwenden, können die folgenden Artefakte Ihren Dienstperimeter nicht verlassen:

  • Trainingsdaten für ein AutoML-Modell
  • Von Ihnen erstellte Modelle
  • Ergebnisse einer Batchvorhersageanfrage

Weitere Informationen zu VPC Service Controls mit Vertex AI

VPC-Netzwerk-Peering einrichten

Um Google Cloud-Pipeline-Komponenten für das Peering mit einer Virtual Private Cloud zu konfigurieren, müssen Sie zusätzliche Parameter angeben. Sie können mit dem folgenden Code beispielsweise ein VPC-Netzwerk für eine EndpointCreate-Komponente angeben:

endpoint_create_op = EndpointCreateOp(
    project="PROJECT_ID",
    location="REGION",
    display_name="endpoint-display-name",
    network="NETWORK")

Dabei gilt:

  • PROJECT_ID: ID des Projekts
  • REGION: Die Region, in der Sie Vertex AI verwenden.
  • NETWORK: Das VPC-Netzwerk, z. B. "projects/12345/global/networks/myVPC".

Weitere Informationen zum VPC-Netzwerk-Peering in Vertex AI

Vom Kunden verwaltete Verschlüsselungsschlüssel (Customer Managed Encryption Keys, CMEK) verwenden

Standardmäßig verschlüsselt Google Cloud Daten im inaktiven Zustand automatisch mit von Google verwalteten Verschlüsselungsschlüsseln. Wenn Sie bestimmte Compliance- oder behördlichen Anforderungen in Bezug auf die Schlüssel zum Schutz Ihrer Daten haben, können Sie für Ihre Ressourcen vom Kunden verwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK) verwenden. Bevor Sie vom Kunden verwaltete Verschlüsselungsschlüssel verwenden, sollten Sie sich mit den Vorteilen von CMEK in Vertex AI und mit den aktuellen von CMEK unterstützten Ressourcen vertraut machen.

Komponente mit CMEK konfigurieren

Nachdem Sie einen Schlüsselbund und einen Schlüssel in Cloud Key Management Service erstellt und Vertex AI-Berechtigungen zum Verschlüsseln und Entschlüsseln Ihres Schlüssels gewährt haben, können Sie einen neuen von CMEK unterstützten Dienst durch Angabe Ihres Schlüssels als einem der Erstellungsparameter erstellen. Mit dem folgenden Code können Sie beispielsweise einen Schlüssel für eine ModelBatchPredict-Komponente angeben:

model_batch_predict_op = ModelBatchPredictOp(project="PROJECT_ID",
    model=model_upload_op.outputs["model"],
    encryption_spec_key_name="projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME")

Dabei gilt:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • LOCATION_ID: Eine gültige Standort- oder Regions-ID, z. B. us-central1.
  • KEY_RING_NAME: Der Name des Schlüsselbunds für Ihren CMEK. Weitere Informationen zu Schlüsselbunden finden Sie unter Cloud KMS-Ressourcen.
  • KEY_NAME: Der Name des CMEK-Schlüssels.

Hinweis: Für Google Cloud-Komponenten, die keine Vertex AI-Komponenten sind, sind möglicherweise zusätzliche Berechtigungen erforderlich. Beispielsweise kann eine BigQuery-Komponente die Berechtigung zum Verschlüsseln und Entschlüsseln erfordern. Darüber hinaus muss der Standort des CMEK-Schlüssels mit dem Standort der Komponente übereinstimmen. Wenn eine BigQuery-Komponente beispielsweise Daten aus einem Dataset lädt, das sich am multiregionalen Standort „US“ befindet, muss sich der CMEK-Schlüssel ebenfalls am multiregionalen Standort „US“ befinden.

Artefakte in Ihrer Komponente nutzen oder erstellen

Das Google Cloud Pipeline Components SDK definiert eine Reihe von ML-Metadaten-Artefakttypen, die als Komponenteneingabe und -ausgabe dienen. Einige Google Cloud-Pipeline-Komponenten nutzen diese Artefakte als Eingabe oder erstellen sie als Ausgabe.

Auf dieser Seite wird gezeigt, wie Sie diese Artefakte nutzen und erstellen.

ML-Artefakt nutzen

Artefakt in Komponenten-YAML verwenden

Die Metadaten des Artefakts können als Eingabe für eine Komponente verwendet werden. Um das Artefakt für die Nutzung als Eingabe vorzubereiten, müssen Sie es extrahieren und in eine YAML-Komponentendatei einfügen.

Beispielsweise generiert die Komponente ModelUploadOp ein google.VertexModel-Artefakt, das von einer ModelDeployOp-Komponente genutzt werden kann. Verwenden Sie den folgenden Code in einer YAML-Komponentendatei, um eine Vertex AI-Model-Ressource aus den Eingaben (Referenz) abzurufen:

"model": "',"{{$.inputs.artifacts['model'].metadata['resourceName']}}", '"'

Das vollständige Schema der Artefaktmetadaten finden Sie im Kubeflow-GitHub-Repository in der Datei artifact_types.py.

Artefakt in einer einfachen Python-Komponente verwenden

from kfp.dsl import Artifact, Input

@dsl.component
def classification_model_eval_metrics(
    project: str,
    location: str,  # "us-central1",
    model: Input[Artifact],
) :
   # Consumes the `resourceName` metadata
   model_resource_path = model.metadata["resourceName"]

Ein Beispiel für die Nutzung der Vertex ML-Metadatenartefakte finden Sie unter Klassifizierungsmodell mit Tabellendaten und Vertex AI AutoML trainieren.

ML-Artefakt erstellen

Die folgenden Codebeispiele zeigen, wie Sie ein Vertex ML-Metadatenartefakt erstellen, das von einer GCPC-Komponente als Eingabe akzeptiert wird.

Importer-Knoten verwenden

Im folgenden Beispiel wird ein Importer-Knoten erstellt, der einen neuen Artefakteintrag in Vertex ML Metadata registriert. Der Importer-Knoten verwenden den URI und die Metadaten des Artefakts als Primitive und verpackt sie in einem Artefakt.

from google_cloud_pipeline_components import v1
from google_cloud_pipeline_components.types import artifact_types
from kfp.components import importer_node
from kfp import dsl

@dsl.pipeline(name=_PIPELINE_NAME)
def pipeline():
  # Using importer and UnmanagedContainerModel artifact for model upload
  # component.
  importer_spec = importer_node.importer(
      artifact_uri='gs://managed-pipeline-gcpc-e2e-test/automl-tabular/model',
      artifact_class=artifact_types.UnmanagedContainerModel,
      metadata={
          'containerSpec': {
              'imageUri':
                  'us-docker.pkg.dev/vertex-ai/automl-tabular/prediction-server:prod'
          }
      })

  # Consuming the UnmanagedContainerModel artifact for the previous step
  model_upload_with_artifact_op = v1.model.ModelUploadOp(
      project=_GCP_PROJECT_ID,
      location=_GCP_REGION,
      display_name=_MODEL_DISPLAY_NAME,
      unmanaged_container_model=importer_spec.outputs['artifact'])

Funktionsbasierte Python-Komponenten verwenden

Im folgenden Beispiel wird gezeigt, wie ein Vertex ML-Metadatenartefakt direkt aus einer Python-Komponente ausgegeben wird.

from google_cloud_pipeline_components import v1
from kfp.components import importer_node
from kfp import dsl

@dsl.component(
    base_image='python:3.9',
    packages_to_install=['google-cloud-aiplatform'],
)
# Note currently KFP SDK doesn't support outputting artifacts in `google` namespace.
# Use the base type dsl.Artifact instead.
def return_unmanaged_model(model: dsl.Output[dsl.Artifact]):
  model.metadata['containerSpec'] = {
      'imageUri':
          'us-docker.pkg.dev/vertex-ai/automl-tabular/prediction-server:prod'
  }
  model.uri = f'gs://automl-tabular-pipeline/automl-tabular/model'

@dsl.pipeline(name=_PIPELINE_NAME)
def pipeline():

  unmanaged_model_op = return_unmanaged_model()

  # Consuming the UnmanagedContainerModel artifact for the previous step
  model_upload_with_artifact_op = v1.model.ModelUploadOp(
      project=_GCP_PROJECT_ID,
      location=_GCP_REGION,
      display_name=_MODEL_DISPLAY_NAME,
      unmanaged_container_model=unmanaged_model_op.outputs['model'])

Eigene containerbasierte Komponente verwenden

Das folgende Beispiel zeigt, wie Sie mithilfe der Dienstprogrammklasse artifact_types.py ein Artefakt VertexBatchPredictionJob als Ausgabe aus einer containerbasierten Komponente generieren.

bp_job_artifact = VertexBatchPredictionJob(
    'batchpredictionjob', vertex_uri_prefix + get_job_response.name,
    get_job_response.name, get_job_response.output_info.bigquery_output_table,
    get_job_response.output_info.bigquery_output_dataset,
    get_job_response.output_info.gcs_output_directory)

    output_artifacts = executor_input_json.get('outputs', {}).get('artifacts', {})
    executor_output['artifacts'] = bp_job_artifact.to_executor_output_artifact(output_artifacts[bp_job_artifact.name])