使用 Google Cloud 流水线组件

使用 Google Cloud 流水线组件 (GCPC) 时,您可以使用以下 Vertex AI 和 Google Cloud 功能来保护您的组件和工件。

为组件指定服务账号

使用组件时,您可以选择指定服务账号。 您的组件会启动并以此服务账号的权限执行。 例如,您可以使用以下代码指定 ModelDeploy 组件的服务账号:

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")

请替换以下内容:

  • SERVICE_ACCOUNT_ID:服务账号的 ID。
  • PROJECT_ID:项目的 ID。

详细了解如何使用自定义服务账号配置服务账号,以与 Vertex AI Pipelines 搭配使用。

使用 VPC Service Controls 防止数据渗漏

VPC Service Controls 可帮助您降低 Vertex AI Pipelines 中发生数据渗漏的风险。当您使用 VPC Service Controls 创建服务边界时,系统会自动保护由 Vertex AI Pipelines 和 Google Cloud 流水线组件创建的资源和数据。例如,当您使用 VPC Service Controls 保护您的流水线时,以下工件无法离开服务边界:

  • 针对 AutoML 模型训练数据
  • 您创建的模型
  • 批量预测请求的结果

详细了解将 VPC Service Controls 与 Vertex AI 搭配使用

设置 VPC 网络对等互连

您可以通过提供额外参数来配置 Google Cloud 流水线组件,以与 Virtual Private Cloud 建立对等互连。举例来说,您可以使用以下代码为 EndpointCreate 组件指定 VPC 网络:

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

请替换以下内容:

  • PROJECT_ID:项目的 ID。
  • REGION:您在其中使用 Vertex AI 的区域。
  • NETWORK:VPC 网络,例如 "projects/12345/global/networks/myVPC"

详细了解 Vertex AI 中的 VPC 网络对等互连

使用客户管理的加密密钥 (CMEK)

默认情况下,Google Cloud 会使用 Google 管理的加密密钥自动加密静态数据。如果您对保护数据的密钥有特定的合规性或监管要求,则可以将客户管理的加密密钥 (CMEK) 用于资源。 在开始使用客户管理的加密密钥之前,请先了解 CMEK 在 Vertex AI 上的优势以及 CMEK 支持的当前资源

使用 CMEK 配置组件

Cloud Key Management Service 中创建密钥环和密钥并授予密钥的 Vertex AI 加密者和解密者权限后,您可以将您的密钥指定为创建参数之一,以创建支持 CMEK 的新组件。例如,您可以使用以下代码为 ModelBatchPredict 组件指定密钥:

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")

请替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • LOCATION_ID:有效的位置或区域标识符,例如 us-central1
  • KEY_RING_NAME:CMEK 的密钥环名称。如需详细了解密钥环,请参阅 Cloud KMS 资源
  • KEY_NAME:CMEK 密钥名称。

注意:非 Vertex AI 组件的 Google Cloud 组件可能需要其他权限。例如,BigQuery 组件可能需要加密和解密权限。此外,CMEK 密钥的位置必须与组件的位置相同。比方说,如果 BigQuery 组件从位于多区域美国位置的数据集加载数据,则 CMEK 密钥还必须位于多区域美国位置。

在组件中使用或生成工件

Google Cloud 流水线组件 SDK 定义了一组用作组件输入和输出的机器学习元数据工件类型。某些 Google Cloud 流水线组件会将这些工件用作输入或生成为输出。

本页面介绍了如何使用和生成这些工件。

使用机器学习工件

在组件 YAML 中使用工件

工件的元数据可用作组件的输入。如需准备工件以作为输入使用,您必须提取工件并将其放入组件 YAML 文件中。

比方说,ModelUploadOp 组件会生成可供 ModelDeployOp 组件使用的 google.VertexModel 工件。在组件 YAML 文件中使用以下代码,从输入(引用)中检索 Vertex AI Model 资源:

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

如需查看工件元数据的完整架构,请参阅 Kubeflow GitHub 代码库中的 artifact_types.py 文件

在轻量级 Python 组件中使用工件

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"]

如需查看如何使用 Vertex ML Metadata 工件类型的示例,请参阅使用表格数据和 Vertex AI AutoML 来训练分类模型

创建机器学习工件

以下代码示例介绍了如何创建可由 Vertex ML 元数据工件接受作为输入的 GCPC 组件。

使用导入程序节点

以下示例会创建一个导入程序节点,以向 Vertex ML Metadata 注册新的工件条目。导入程序节点将工件的 URI 和元数据作为原语接受,并将其打包到工件中。

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'])

使用基于 Python 函数的组件

以下示例介绍了如何直接从 Python 组件输出 Vertex ML Metadata 工件。

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'])

使用您自己的基于容器的组件

以下示例介绍了如何使用 artifact_types.py 实用程序类从基于容器的组件生成 VertexBatchPredictionJob 工件作为输出。

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])