您可以使用 Private Service Connect 接口为流水线运行配置专用连接。Google 建议使用 Vertex AI Private Service Connect 实现专用连接,因为这样可以降低 IP 地址耗尽的几率,并支持传递性对等互连。
Vertex AI Pipelines 使用底层 Private Service Connect 接口基础架构进行训练,以将连接详细信息传递给自定义训练作业。如需详细了解将 Private Service Connect 接口用于自定义训练的限制和价格,请参阅将 Private Service Connect 接口用于 Vertex AI Training。
限制
Private Service Connect 接口不支持外部 IP 地址。
价格
如需了解 Private Service Connect 接口的价格,请参阅所有网络价格页面。
准备工作
如需将 Private Service Connect 接口与 Vertex AI Pipelines 搭配使用,您必须先为 Vertex AI 资源设置 Private Service Connect 接口。
创建具有 Private Service Connect 接口的流水线运行
如需创建流水线运行,您必须先创建流水线规范。流水线规范是一个内存中对象,您可以通过转换已编译的流水线定义来创建该对象。
创建流水线规范
按照以下说明创建内存中的流水线规范,您可以使用该规范来创建流水线运行:
定义流水线并将其编译为 YAML 文件。如需详细了解如何定义和编译流水线,请参阅构建流水线。
使用以下代码示例将已编译的流水线 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 文件的本地路径。
创建流水线运行
使用以下示例通过 Private Service Connect 接口创建流水线运行:
Python
如需使用 Vertex AI SDK for Python 通过 Private Service Connect 接口创建流水线运行,请使用 aiplatform_v1/services/pipeline_service
定义配置运行。
# Import aiplatform and the appropriate API version v1
from google.cloud import aiplatform, aiplatform_v1
# 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_v1.PipelineServiceClient(client_options=client_options)
PSCI_INTERFACE_CONFIG = {
"network_attachment": "NETWORK_ATTACHMENT_NAME",
"dns_peering_configs": [
{
"domain": "DNS_DOMAIN",
"target_project": "TARGET_PROJECT",
"target_network": "TARGET_NETWORK"
}
]
}
# Construct the request
request = aiplatform_v1.CreatePipelineJobRequest(
parent=f"projects/PROJECT_ID/locations/LOCATION",
pipeline_job=aiplatform_v1.PipelineJob(
display_name="DISPLAY_NAME",
pipeline_spec=PIPELINE_SPEC,
runtime_config=aiplatform_v1.PipelineJob.RuntimeConfig(
gcs_output_directory="OUTPUT_DIRECTORY",
),
psc_interface_config=aiplatform_v1.PscInterfaceConfig(
PSCI_INTERFACE_CONFIG
),
)
# 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 网络、子网和网络连接。 - DNS_DOMAIN:您在设置专用 DNS 对等互连时创建的专用 Cloud DNS 区域的 DNS 名称。
- TARGET_PROJECT:托管 VPC 网络的项目。
- TARGET_NETWORK: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 网络、子网和网络连接。 - DNS_DOMAIN:您在设置专用 DNS 对等互连时创建的专用 Cloud DNS 区域的 DNS 名称。
- TARGET_PROJECT:托管 VPC 网络的项目。
- TARGET_NETWORK:VPC 网络名称。
HTTP 方法和网址:
POST https://LOCATION-aiplatform.googleapis.com/v1/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", "dns_peering_configs": [ { "domain": "DNS_DOMAIN", "target_project": "TARGET_PROJECT", "target_network": "TARGET_NETWORK" } ] } }
如需发送请求,请选择以下方式之一:
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/v1/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/v1/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", "dnsPeeringConfigs": [ { "domain": "DNS_DOMAIN", "targetProject": "TARGET_PROJECT", "targetNetwork": "TARGET_NETWORK" } ] } }