您可以使用 Private Service Connect 接口为流水线运行配置专用连接。Google 建议使用 Vertex AI Private Service Connect 进行专用连接,因为这样可以降低 IP 耗尽的几率,并支持传递对等互连。
Vertex AI Pipelines 会使用用于训练的底层 Private Service Connect 接口基础架构,将连接详细信息传递给自定义训练作业。如需详细了解将 Private Service Connect 接口与自定义训练搭配使用时的限制和价格,请参阅将 Private Service Connect 接口用于 Vertex AI 训练。
限制
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_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" } }