在 Vertex AI 上建立 Ray 叢集

本文將說明如何在 Vertex AI 上設定 Ray 叢集,以滿足各種需求。舉例來說,如要建構映像檔,請參閱「自訂映像檔」。部分企業可使用私人網路。本文涵蓋 Vertex AI 上的 Ray 適用的 Private Service Connect 介面。另一個用途是存取遠端檔案,就像存取本機檔案一樣 (請參閱 Ray on Vertex AI Network File System)。

總覽

本頁面涵蓋的主題包括:

建立 Ray 叢集

您可以使用 Google Cloud 控制台或 Python 適用的 Vertex AI SDK 建立 Ray 叢集。每個叢集最多可有 2,000 個節點。一個工作站集區最多只能有 1,000 個節點。工作站集區數量沒有限制,但如果工作站集區數量過多 (例如 1,000 個工作站集區,每個集區有一個節點),可能會對叢集效能造成負面影響。

開始前,請先閱讀 Vertex AI 上的 Ray 總覽,並設定所有必要工具。

在 Vertex AI 上建立 Ray 叢集後,可能需要 10 到 20 分鐘才能啟動。

控制台

根據 OSS Ray 最佳做法建議,系統會強制將 Ray 頭部節點的邏輯 CPU 數量設為 0,避免在頭部節點上執行任何工作負載。

  1. 前往 Google Cloud 控制台的「Ray on Vertex AI」頁面。

    前往「Ray on Vertex AI」頁面

  2. 按一下「建立叢集」,開啟「建立叢集」面板。

  3. 在「建立叢集」面板中,針對每個步驟檢查或取代預設叢集資訊。按一下「繼續」完成每個步驟:

    1. 在「名稱和區域」部分,指定「名稱」,然後為叢集選擇「位置」

    2. 在「運算設定」中,指定 Vertex AI 首要節點上 Ray 叢集的設定,包括機器類型、加速器類型和數量、磁碟類型和大小,以及副本數量。(選用) 新增自訂映像檔 URI,指定自訂容器映像檔,以新增預設容器映像檔未提供的 Python 依附元件。請參閱「自訂映像檔」。

      在「進階選項」下方,你可以:

      • 指定自己的加密金鑰。
      • 指定自訂服務帳戶
      • 如果不需要在訓練期間監控工作負載的資源統計資料,請停用指標收集功能。
    3. (選用) 如要為叢集部署私人端點,建議使用 Private Service Connect。詳情請參閱「Vertex AI 上的 Ray 的 Private Service Connect 介面」。

  4. 點選「建立」

Ray on Vertex AI SDK

根據 OSS Ray 最佳做法建議,系統會強制將 Ray 頭部節點的邏輯 CPU 數量設為 0,避免在頭部節點上執行任何工作負載。

在 Python 互動式環境中,使用下列指令在 Vertex AI 上建立 Ray 叢集:

import ray
import vertex_ray
from google.cloud import aiplatform
from vertex_ray import Resources
from vertex_ray.util.resources import NfsMount

# Define a default CPU cluster, machine_type is n1-standard-16, 1 head node and 1 worker node
head_node_type = Resources()
worker_node_types = [Resources()]

# Or define a GPU cluster.
head_node_type = Resources(
  machine_type="n1-standard-16",
  node_count=1,
  custom_image="us-docker.pkg.dev/my-project/ray-custom.2-9.py310:latest",  # Optional. When not specified, a prebuilt image is used.
)

worker_node_types = [Resources(
  machine_type="n1-standard-16",
  node_count=2,  # Must be >= 1
  accelerator_type="NVIDIA_TESLA_T4",
  accelerator_count=1,
  custom_image="us-docker.pkg.dev/my-project/ray-custom.2-9.py310:latest",  # When not specified, a prebuilt image is used.
)]
# Optional. Create cluster with Network File System (NFS) setup.
nfs_mount = NfsMount(
    server="10.10.10.10",
    path="nfs_path",
    mount_point="nfs_mount_point",
)
aiplatform.init()
# Initialize Vertex AI to retrieve projects for downstream operations.
# Create the Ray cluster on Vertex AI
CLUSTER_RESOURCE_NAME = vertex_ray.create_ray_cluster(
  head_node_type=head_node_type,
  network=NETWORK, #Optional
  worker_node_types=worker_node_types,
  python_version="3.10",  # Optional
  ray_version="2.47",  # Optional
  cluster_name=CLUSTER_NAME, # Optional
  service_account=SERVICE_ACCOUNT,  # Optional
  enable_metrics_collection=True,  # Optional. Enable metrics collection for monitoring.
  labels=LABELS,  # Optional.
  nfs_mounts=[nfs_mount],  # Optional.

)

其中:

  • CLUSTER_NAME:Vertex AI 上的 Ray 叢集名稱,在專案中不得重複。

  • NETWORK:(選用) 虛擬私有雲網路的完整名稱,格式為 projects/PROJECT_ID/global/networks/VPC_NAME。如要為叢集設定私人端點 (而非公開端點),請指定要搭配 Vertex AI 上的 Ray 使用的虛擬私有雲網路。詳情請參閱「私人與公開連線」。

  • VPC_NAME:選用:虛擬機器運作所在的虛擬私有雲。

  • PROJECT_ID:您的 Google Cloud 專案 ID。您可以在 Google Cloud 控制台歡迎頁面找到專案 ID。

  • SERVICE_ACCOUNT:選用:在叢集上執行 Ray 應用程式的服務帳戶。授予必要角色

  • LABELS:(選用) 含有使用者定義中繼資料的標籤,用於整理 Ray 叢集。標籤鍵與值的長度不得超過 64 個字元 (Unicode 碼位),只能使用小寫英文字母、數字、底線和破折號。可以使用國際字元。如需標籤的詳細資訊和範例,請參閱 https://goo.gl/xmQnxf

狀態變更為 RUNNING 前,您應該會看到下列輸出內容:

[Ray on Vertex AI]: Cluster State = State.PROVISIONING
Waiting for cluster provisioning; attempt 1; sleeping for 0:02:30 seconds
...
[Ray on Vertex AI]: Cluster State = State.RUNNING

注意事項:

  • 第一個節點是主要節點。

  • 不支援 TPU 機器類型。

生命週期管理

在 Vertex AI 上的 Ray 叢集生命週期中,每個動作都會與一個狀態建立關聯。下表摘要列出各個狀態的帳單狀態和管理選項。如要瞭解每個狀態的定義,請參閱參考說明文件

動作 狀態 已結算? 是否可刪除動作? 是否可取消動作?
使用者建立叢集 佈建中
使用者手動放大或縮小 更新中 是,根據即時大小
叢集執行 執行中 不適用 - 你可以刪除
叢集會自動向上或向下擴充 更新中 是,根據即時大小
使用者刪除叢集 停止中 不適用 - 已經停止
叢集進入「錯誤」狀態 錯誤 不適用 - 你可以刪除
不適用 STATE_UNSPECIFIED 不適用

自訂圖片 (選用)

預先建構的圖片適用於大多數用途。如要建構映像檔,請使用 Vertex AI 上的 Ray 預建映像檔做為基本映像檔。如要瞭解如何從基本映像檔建構映像檔,請參閱 Docker 說明文件

這些基礎映像檔包含 Python、Ubuntu 和 Ray 的安裝項目。也包括以下依附元件:

  • python-json-logger
  • google-cloud-resource-manager
  • ca-certificates-java
  • libatlas-base-dev
  • liblapack-dev
  • g++、libio-all-perl
  • libyaml-0-2。

私人和公開連線

根據預設,Ray on Vertex AI 會建立公開的安全端點,供您在 Vertex AI 的 Ray 叢集上,使用 Ray Client 進行互動式開發。開發或暫時性用途可使用公開連線。這個公開端點可透過網際網路存取。只有在 Ray 叢集的使用者專案中,具備至少 Vertex AI 使用者角色權限的授權使用者,才能存取叢集。

如果您需要叢集的私人連線,或是使用 VPC Service Controls,Vertex AI 上的 Ray 叢集支援 VPC 對等互連。只有在與 Vertex AI 對等互連的 VPC 網路中,才能從用戶端存取具有私密端點的叢集。

如要透過虛擬私有雲對等互連為 Vertex AI 上的 Ray 設定私人連線,請在建立叢集時選取虛擬私有雲網路。虛擬私有雲網路必須在虛擬私有雲網路與 Vertex AI 之間建立私人服務連線。如果您在主控台中使用 Ray on Vertex AI,可以在建立叢集時設定私人服務存取連線。

如要在 Vertex AI 上搭配使用 VPC Service Controls 和 VPC 對等互連與 Ray 叢集,必須額外設定才能使用 Ray 資訊主頁和互動式殼層。請按照「Ray 資訊主頁和互動式殼層 (搭配 VPC-SC + VPC 對等互連)」一文中的操作說明,在使用者專案中設定互動式殼層,並搭配 VPC-SC 和 VPC 對等互連。

在 Vertex AI 上建立 Ray 叢集後,您可以使用 Python 適用的 Vertex AI SDK 連線至頭部節點。連線環境 (例如 Compute Engine VM 或 Vertex AI Workbench 執行個體) 必須位於與 Vertex AI 對等互連的 VPC 網路中。請注意,私人服務連線的 IP 位址數量有限,可能會導致 IP 位址耗盡。因此,建議您為長時間執行的叢集使用私人連線。

Vertex AI 上的 Ray 適用的 Private Service Connect 介面

Vertex AI 上的 Ray 叢集支援 Private Service Connect 介面輸出和 Private Service Connect 介面輸入。

如要使用 Private Service Connect 介面輸出,請按照下列說明操作。如果未啟用 VPC Service Controls,具有 Private Service Connect 介面輸出功能的叢集會使用安全的公開端點,透過 Ray Client 進行輸入。

如果啟用 VPC Service Controls,系統預設會使用 Private Service Connect 介面輸入,搭配 Private Service Connect 介面輸出。如要透過 Ray Client 連線或從筆記本提交作業至具有 Private Service Connect 介面連入功能的叢集,請確認筆記本位於使用者專案的虛擬私有雲和子網路中。如要進一步瞭解如何設定 VPC Service Controls,請參閱「搭配 Vertex AI 使用 VPC Service Controls」。

啟用 Private Service Connect 介面的圖表

啟用 Private Service Connect 介面

請按照設定資源指南操作,設定 Private Service Connect 介面。設定資源後,即可在 Vertex AI 上的 Ray 叢集啟用 Private Service Connect 介面。

控制台

  1. 建立叢集時,指定「名稱和區域」和「運算設定」後,系統會顯示「網路」選項。

    透過控制台指定網路

  2. 透過下列任一方式設定網路連結:

    • 使用您在設定 Private Service Connect 資源時指定的 NETWORK_ATTACHMENT_NAME 名稱。
    • 按一下下拉式選單中顯示的「建立網路連結」按鈕,建立新的網路連結。

    管理中心建立新電視網

  3. 按一下「Create network attachment」(建立網路連結)

  4. 在顯示的子工作中,指定新網路連結的名稱、網路和子網路。

    網路連結

  5. 點選「建立」

Ray on Vertex AI SDK

Ray on Vertex AI SDK 是 Python 適用的 Vertex AI SDK 的一部分。如要瞭解如何安裝或更新 Python 適用的 Vertex AI SDK,請參閱「安裝 Vertex AI SDK for Python」。詳情請參閱 Vertex AI SDK for Python API 參考資料說明文件。

from google.cloud import aiplatform
import vertex_ray

# Initialization
aiplatform.init()

# Create a default cluster with network attachment configuration

psc_config = vertex_ray.PscIConfig(network_attachment=NETWORK_ATTACHMENT_NAME)
cluster_resource_name = vertex_ray.create_ray_cluster(
   psc_interface_config=psc_config,
)

其中:

  • NETWORK_ATTACHMENT_NAME:在使用者專案中設定 Private Service Connect 資源時指定的名稱。

Ray on Vertex AI 網路檔案系統 (NFS)

如要讓叢集使用遠端檔案,請掛接網路檔案系統 (NFS) 共用區。這樣一來,作業就能存取遠端檔案,就像存取本機檔案一樣,進而實現高處理量和低延遲。

虛擬私有雲設定

設定 VPC 的方式有兩種:

  1. 建立 Private Service Connect 介面網路連結。(建議選項)
  2. 設定虛擬私有雲網路對等互連

設定 NFS 執行個體

如要進一步瞭解如何建立 Filestore 執行個體,請參閱「建立執行個體」。如果您使用 Private Service Connect 介面方法,建立 Filestore 時就不必選取私人服務存取模式。

使用網路檔案系統 (NFS)

如要使用網路檔案系統,請指定網路網路連結 (建議)。

控制台

  1. 在建立頁面的「網路」步驟中,指定網路網路連結後,如要這麼做,請按一下「網路檔案系統 (NFS)」部分下方的「新增 NFS 掛接點」,然後指定 NFS 掛接點 (伺服器、路徑和掛接點)。

    欄位 說明
    server NFS 伺服器的 IP 位址。必須是 VPC 中的私人位址。
    path NFS 共用區路徑。這必須是以 / 開頭的絕對路徑。
    mountPoint 本機掛接點。這必須是有效的 UNIX 目錄名稱。舉例來說,如果本機掛接點是 sourceData,請從訓練 VM 執行個體指定 /mnt/nfs/ sourceData 路徑。

    詳情請參閱「指定運算資源的位置」。

  2. 指定伺服器、路徑和掛接點。 NFS 檔案系統

  3. 點選「建立」。這樣就會建立 Ray 叢集。

搭配 VPC-SC + 虛擬私有雲對等互連的 Ray 資訊主頁和互動式 Shell

  1. 設定「peered-dns-domains」。

    {
      VPC_NAME=NETWORK_NAME
      REGION=LOCATION
      gcloud services peered-dns-domains create training-cloud \
      --network=$VPC_NAME \
      --dns-suffix=$REGION.aiplatform-training.cloud.google.com.
    
      # Verify
      gcloud beta services peered-dns-domains list --network $VPC_NAME;
    }
        
    • NETWORK_NAME:變更為對等互連網路。

    • LOCATION:所需位置 (例如 us-central1)。

  2. 設定「DNS managed zone」。

    {
      PROJECT_ID=PROJECT_ID
      ZONE_NAME=$PROJECT_ID-aiplatform-training-cloud-google-com
      DNS_NAME=aiplatform-training.cloud.google.com
      DESCRIPTION=aiplatform-training.cloud.google.com
    
      gcloud dns managed-zones create $ZONE_NAME  \
      --visibility=private  \
      --networks=https://www.googleapis.com/compute/v1/projects/$PROJECT_ID/global/networks/$VPC_NAME  \
      --dns-name=$DNS_NAME  \
      --description="Training $DESCRIPTION"
    }
        
    • PROJECT_ID:您的專案 ID。您可以在 Google Cloud 控制台 歡迎頁面中找到這些 ID。

  3. 記錄 DNS 交易。

    {
      gcloud dns record-sets transaction start --zone=$ZONE_NAME
    
      gcloud dns record-sets transaction add \
      --name=$DNS_NAME. \
      --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
      --zone=$ZONE_NAME \
      --ttl=300
    
      gcloud dns record-sets transaction add \
      --name=*.$DNS_NAME. \
      --type=CNAME $DNS_NAME. \
      --zone=$ZONE_NAME \
      --ttl=300
    
      gcloud dns record-sets transaction execute --zone=$ZONE_NAME
    }
        
  4. 提交訓練工作,並啟用互動式殼層 + VPC-SC + 虛擬私有雲對等互連。

後續步驟