为流水线配置 Private Service Connect 接口

您可以使用 Private Service Connect 接口 (PSC-I) 为流水线运行配置专用连接。我们建议您使用 Vertex AI Private Service Connect 进行专用连接,因为这样可以降低 IP 耗尽的几率,并支持传递对等互连。

Vertex AI Pipelines 使用用于训练的基础 PSC-I 基础架构将连接详细信息传递给自定义训练作业。如需详细了解将 PSC-I 与自定义训练搭配使用时的限制和价格,请参阅使用 Private Service Connect 接口进行 Vertex AI 训练

限制

Private Service Connect 接口不支持外部 IP 地址。

价格

如需了解 Private Service Connect 接口的价格,请参阅所有网络价格页面。

准备工作

如需将 PSC-I 与 Vertex AI Pipelines 搭配使用,您必须先为 Vertex AI 资源设置 Private Service Connect 接口

使用 PSC-I 创建流水线作业

如需创建流水线作业,您必须先创建流水线规范。流水线规范是通过转换已编译的流水线定义创建的内存中对象。

创建流水线规范

按照以下说明创建可用于创建流水线作业的内存中流水线规范:

  1. 定义流水线并将其编译为 YAML 文件。如需详细了解如何定义和编译流水线,请参阅构建流水线

  2. 使用以下代码示例将已编译的流水线 YAML 文件转换为内存中流水线规范。

    import yaml
    with open("COMPILED_PIPELINE_PATH", "r") as stream:
      try:
        pipeline_spec = yaml.safe_load(stream)
        print(pipeline_spec)
      except yaml.YAMLError as exc:
        print(exc)
    

    COMPILED_PIPELINE_PATH 替换为已编译的流水线 YAML 文件的本地路径。

创建流水线运行

使用以下示例使用 PSC-I 创建流水线作业:

Python

如需使用 Vertex AI SDK for Python 创建包含 PSC-I 的流水线作业,请使用 aiplatform_v1beta1/services/pipeline_service 定义配置作业。

# Import aiplatform and the appropriate API version v1beta1
from google.cloud import aiplatform, aiplatform_v1beta1

# Initialize the Vertex SDK using PROJECT_ID and LOCATION
aiplatform.init(project="PROJECT_ID", location="LOCATION")

# Create the API endpoint
client_options = {
"api_endpoint": f"LOCATION-aiplatform.googleapis.com"
}

# Initialize the PipelineServiceClient
client = aiplatform_v1beta1.PipelineServiceClient(client_options=client_options)

# Construct the request
request = aiplatform_v1beta1.CreatePipelineJobRequest(
parent=f"projects/PROJECT_ID/locations/LOCATION",
pipeline_job=aiplatform_v1beta1.PipelineJob(
    display_name="DISPLAY_NAME",
    pipeline_spec=PIPELINE_SPEC,
    runtime_config=aiplatform_v1beta1.PipelineJob.RuntimeConfig(
        gcs_output_directory="OUTPUT_DIRECTORY",
    ),
    psc_interface_config=aiplatform_v1beta1.PscInterfaceConfig(
        network_attachment="NETWORK_ATTACHMENT_NAME"
    ),
)

# Make the API call
response = client.create_pipeline_job(request=request)

# Print the response
print(response)

替换以下内容:

  • PROJECT_ID:您要在其中创建流水线作业的项目的 ID。
  • LOCATION:您要在其中创建流水线作业的区域。
  • DISPLAY_NAME:流水线作业的名称。显示名称的长度不得超过 128 个 UTF-8 字符。
  • PIPELINE_SPEC:您在创建流水线规范中创建的流水线规范。
  • OUTPUT_DIRECTORY:用于存储输出工件的 Cloud Storage 存储桶的 URI。此路径是流水线的根输出目录,用于生成输出工件的路径。
  • NETWORK_ATTACHMENT_NAME:要附加到 PipelineJob 资源的 Compute Engine 网络附加项的名称。如需获取网络附件,您必须已完成准备工作部分中的步骤。如需详细了解网络连接,请参阅设置 VPC 网络、子网和网络连接

REST

如需创建流水线作业,请使用 pipelineJobs.create 方法发送 POST 请求。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您要在其中创建流水线作业的项目的 ID。
  • LOCATION:您要在其中创建流水线作业的区域。
  • DISPLAY_NAME:流水线作业的名称。显示名称的长度不得超过 128 个 UTF-8 字符。
  • PIPELINE_SPEC:您在创建流水线规范中创建的流水线规范。
  • OUTPUT_DIRECTORY:用于存储输出工件的 Cloud Storage 存储桶的 URI。此路径是流水线的根输出目录,用于生成输出工件的路径。
  • NETWORK_ATTACHMENT_NAME:要附加到 PipelineJob 资源的 Compute Engine 网络附加项的名称。如需获取网络附件,您必须已完成准备工作部分中的步骤。如需详细了解网络连接,请参阅设置 VPC 网络、子网和网络连接

HTTP 方法和网址:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs

请求 JSON 正文:

{
  "display_name": "DISPLAY_NAME",
  "pipeline_spec": "PIPELINE_SPEC",
  "runtime_config": {
       "gcs_output_directory": "OUTPUT_DIRECTORY",
   },
   "psc_interface_config": {
       "network_attachment": "NETWORK_ATTACHMENT_NAME"
   }
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs" | Select-Object -Expand Content

您应该会看到类似如下所示的输出。PIPELINE_JOB_ID 表示流水线运行的 ID,SERVICE_ACCOUNT_NAME 表示用于运行流水线的服务账号。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/pipelineJobs/PIPELINE_JOB_ID",
  "displayName": "DISPLAY_NAME",
  "createTime": "20xx-01-01T00:00:00.000000Z",
  "updateTime": "20xx-01-01T00:00:00.000000Z",
  "pipelineSpec": PIPELINE_SPEC,
  "state": "PIPELINE_STATE_PENDING",
  "labels": {
    "vertex-ai-pipelines-run-billing-id": "VERTEX_AI_PIPELINES_RUN_BILLING_ID"
  },
  "runtimeConfig": {
    "gcsOutputDirectory": "OUTPUT_DIRECTORY"
  },
  "serviceAccount": "SERVICE_ACCOUNT_NAME"
  "pscInterfaceConfig": {
    "networkAttachment": "NETWORK_ATTACHMENT_NAME"
  }
}