為管道設定 Private Service Connect 介面

您可以使用 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 介面的價格,請參閱「所有網路定價」頁面。

事前準備

如要搭配 Vertex AI Pipelines 使用 Private Service Connect 介面,請先為 Vertex AI 資源設定 Private Service Connect 介面

使用 Private Service Connect 介面建立管道執行

如要建立管道執行作業,請先建立管道規格。管道規格是您透過轉換已編譯的管道定義所建立的記憶體內物件。

建立管道規格

請按照下列操作說明建立可供建立管道執行的記憶體內管道規格:

  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 檔案的本機路徑。

建立管道執行作業

使用下列範例,透過 Private Service Connect 介面建立管道執行作業:

Python

如要使用 Python 適用的 Vertex AI SDK,透過 Private Service Connect 介面建立 pipeline 執行作業,請使用 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 網路附件名稱。如要取得網路附件,您必須先完成「事前準備」一節中的步驟。如要進一步瞭解網路附件,請參閱「設定虛擬私有雲網路、子網路和網路附件」。
  • DNS_DOMAIN:設定私人 DNS 對等互連時建立的私有雲 DNS 區域 DNS 名稱。
  • TARGET_PROJECT:代管虛擬私有雲網路的專案。
  • TARGET_NETWORK:虛擬私有雲網路名稱。

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 網路附件名稱。如要取得網路附件,您必須先完成「事前準備」一節中的步驟。如要進一步瞭解網路附件,請參閱「設定虛擬私有雲網路、子網路和網路附件」。
  • DNS_DOMAIN:設定私人 DNS 對等互連時建立的私有雲 DNS 區域 DNS 名稱。
  • TARGET_PROJECT:代管虛擬私有雲網路的專案。
  • TARGET_NETWORK:虛擬私有雲網路名稱。

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