使用 Private Service Connect 介面進行 Vertex AI 訓練

建議使用 Private Service Connect 介面進行私人連線,因為這樣可降低 IP 位址耗盡的機率,並允許傳輸對等互連。

Vertex AI 自訂工作和持續性資源支援 Private Service Connect 介面。

總覽

Vertex AI Training 自訂工作和持續性資源支援 Private Service Connect 介面。如要使用 Private Service Connect 介面,您需要在使用者專案中設定虛擬私有雲網路、子網路和網路連結。請參閱「設定 Private Service Connect 介面」。如要啟用 Private Service Connect 介面,建立自訂作業或持續性資源的要求中必須包含網路連結名稱。

Vertex AI Private Service Connect 輸出連線至其他網路

Vertex AI 已整合 Private Service Connect 支援的輸出網路連線 (請參閱「連線至其他網路中的工作負載」),並具有下列架構行為。

連線至 Google API 和僅供內部使用的服務

Vertex AI 將流量傳送至 Google API 時,會在生產者環境中進行本機解析,不會使用消費者虛擬私有雲網路的 Private Google Access 設定或路由。

注意:

  • 虛擬私有雲身分識別規定:由於本機解析會略過用戶虛擬私有雲網路路徑,因此流量不會攜帶虛擬私有雲網路的身分識別。這會導致對僅限內部使用的 Google 服務 (例如設定內部 Ingress 的 Cloud Run 服務) 的要求失敗,並顯示 404 或 403 錯誤。
  • Private Service Connect 端點解決方案:如要私下連線至這些內部服務,您必須在虛擬私有雲網路中,為 Google API 設定 Private Service Connect 端點。
  • DNS 設定:您必須確保服務網域 (例如 *.run.app) 會解析為 Private Service Connect 端點的內部 IP 位址,確保流量維持在純私有路徑上。

網際網路輸出和 Cloud NAT

根據預設,Vertex AI 會使用 Google 管理的網際網路閘道處理輸出流量,而不是虛擬私有雲網路的路徑。只有在專案屬於 VPC Service Control 範圍時,才會使用消費者的 Cloud NAT 閘道輸出。

這個安全防護範圍會封鎖預設網際網路存取權,強制流量通過 Private Service Connect 介面和虛擬私有雲網路的路由規則。如果您未使用 VPC Service Control,連出網際網路的流量會完全略過虛擬私有雲網路和 Cloud NAT 閘道。

限制

如要瞭解 Private Service Connect 介面的功能和限制,請參閱透過 Private Service Connect 介面存取 Vertex AI 服務

定價

如要瞭解 Private Service Connect 介面的定價,請參閱「使用 Private Service Connect 介面存取供應商或用戶虛擬私有雲網路」一節,該節位於「所有網路定價」頁面。

事前準備

在使用者專案中設定 Private Service Connect 介面的資源

使用 Private Service Connect 介面建立 Vertex AI 無伺服器訓練工作

您可以使用 Vertex AI SDK for Python 或 REST API,透過 Private Service Connect 介面建立無伺服器訓練工作。

Python

如要使用 Python 適用的 Vertex AI SDK,透過 PSC-I 建立無伺服器訓練工作,請使用 aiplatform_v1/services/job_service 定義設定工作。

Python

from google.cloud import aiplatform


def create_custom_job_psci_sample(
    project: str,
    location: str,
    bucket: str,
    display_name: str,
    machine_type: str,
    replica_count: int,
    image_uri: str,
    network_attachment: str,
    domain: str,
    target_project: str,
    target_network: str,
):
    """Custom training job sample with PSC Interface Config."""
    aiplatform.init(project=project, location=location, staging_bucket=bucket)

    worker_pool_specs = [{
        "machine_spec": {
            "machine_type": machine_type,
        },
        "replica_count": replica_count,
        "container_spec": {
            "image_uri": image_uri,
            "command": [],
            "args": [],
        },
    }]
    psc_interface_config = {
        "network_attachment": network_attachment,
        "dns_peering_configs": [
            {
                "domain": domain,
                "target_project": target_project,
                "target_network": target_network,
            },
        ],
    }
    job = aiplatform.CustomJob(
        display_name=display_name,
        worker_pool_specs=worker_pool_specs,
    )

    job.run(psc_interface_config=psc_interface_config)

  • project:。您可以在 Google Cloud 控制台的歡迎頁面找到這些 ID。
  • location:請參閱可用位置清單
  • bucket:將 bucket 替換為您有權存取的值區名稱。
  • display_name:持續性資源的顯示名稱。
  • machine_type指定運算資源
  • replica_count:每次試驗要使用的工作站備用資源數量。
  • service_attachment:服務連結資源的名稱。如果已啟用 Private Service Connect,則會填入這個欄位。
  • image_uri:Docker 容器映像檔的 URI,內含訓練程式碼。瞭解如何建立自訂容器映像檔
  • network_attachment:設定 Private Service Connect 資源時建立的網路連結名稱或完整路徑。
  • domain:設定私人 DNS 對等互連時建立的私人 Cloud DNS 區域 DNS 名稱。
  • target_project:託管虛擬私有雲網路的專案。
  • target_network:虛擬私有雲網路名稱。

REST

如要建立無伺服器訓練工作,請使用 customJobs.create 方法傳送 POST 要求。

使用任何要求資料之前,請先修改下列項目的值:

  • LOCATION:要執行容器或 Python 套件的區域。
  • PROJECT_ID:您的專案 ID
  • JOB_NAMECustomJob 的顯示名稱。
  • REPLICA_COUNT:要使用的 worker 副本數量。在大多數情況下,請將此值設為 1,以用於第一個工作站集區
  • 如果訓練應用程式是在自訂容器中執行,請指定下列項目:
    • IMAGE_URI:Docker 容器映像檔的 URI,內含訓練程式碼。瞭解如何建立自訂容器映像檔
    • NETWORK_ATTACHMENT:您在設定 Private Service Connect 介面時建立的網路連結名稱或完整路徑。
    • 如需私人 DNS 對等互連,請務必填寫「dns_peering_configs」欄位。這個清單中的每個項目都包含:
      • DOMAIN_SUFFIX:設定私人 DNS 對等互連時建立的私人 Cloud DNS 區域 DNS 名稱。
      • TARGET_PROJECT:託管虛擬私有雲網路的專案。
      • TARGET_NETWORK:虛擬私有雲網路名稱。

HTTP 方法和網址:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

JSON 要求內文:

"display_name": JOB_NAME,
"job_spec": {
    "worker_pool_specs": [
      {
        "machine_spec": {
          "machine_type": "n2-standard-4",
        },
        "replica_count": REPLICA_COUNT,
        "container_spec": {
          "image_uri": IMAGE_URI,
        },
      },
    ],
    "psc_interface_config": {
      "network_attachment": NETWORK_ATTACHMENT,
      "dns_peering_configs": [
         {
          "domain": DOMAIN_SUFFIX,
          "target_project": TARGET_PROJECT,
          "target_network": TARGET_NETWORK
         }
      ],
    },
    "enable_web_access": 1
}

如要傳送要求,請選擇以下其中一個選項:

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/customJobs"

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/customJobs" | Select-Object -Expand Content

您應該會收到類似如下的 JSON 回應: