Ray クラスタを作成するには、Google Cloud コンソールまたは Vertex AI SDK for Python を使用します。クラスタには最大 2,000 個のノードを配置できます。1 つのワーカープール内のノード数の上限は 1,000 です。ワーカープールの数に上限はありませんが、1 ノードあたり 1,000 個のワーカープールなど、ワーカープールの数が多くなると、クラスタのパフォーマンスに影響する可能性があります。
始める前に、Ray on Vertex AI の概要を読み、前提条件となるすべてのツールを設定してください。
Vertex AI の Ray クラスタを作成してから起動するまでに 10~20 分ほどかかる場合があります。
コンソール
OSS Ray のベスト プラクティスの推奨事項に従い、ヘッドノードでワークロードを実行しないように、Ray ヘッドノードで論理 CPU 数を 0 に設定します。
Google Cloud コンソールで、[Vertex AI での Ray] ページに移動します。
[クラスタを作成] をクリックして [クラスタの作成] パネルを開きます。
[クラスタの作成] パネルの各ステップで、デフォルトのクラスタ情報を確認または置き換えます。[続行] をクリックして、各手順を完了します。
[名前とリージョン] で名前を指定し、クラスタのリージョンを選択します。
[コンピューティング設定] で、マシンタイプ、アクセラレータ タイプと数、ディスクタイプとサイズ、レプリカ数など、Vertex AI のヘッドノードの Ray クラスタの構成を指定します。必要に応じて、カスタム イメージ URI を追加してカスタム コンテナ イメージを指定し、デフォルトのコンテナ イメージでは提供されていない Python の依存関係を追加できます。カスタム イメージをご覧ください。
[詳細オプション] で、次の操作を行います。
- 独自の暗号鍵を指定します。
- カスタム サービス アカウントを指定します。
- トレーニング中にワークロードのリソース統計情報をモニタリングする必要がない場合は、指標の収集を無効にします。
(省略可)クラスタのパブリック エンドポイントの代わりにプライベート エンドポイントを設定するには、Ray on Vertex AI に使用する VPC ネットワークを指定します。詳細については、プライベート接続とパブリック接続をご覧ください。
VPC ネットワークの接続をまだ設定していない場合は、[接続を設定] をクリックします。[プライベート サービス アクセス接続の作成] パネルで、次の各ステップを完了して [続行] をクリックします。
Service Networking API を有効にします。
[IP 範囲を割り振る] で、IP 範囲を選択または作成できます。また、IP 範囲が自動的に割り振られるように設定することもできます。
[接続を作成する] で、[ネットワーク] と [割り振られている IP 範囲] の情報を確認します。
[接続を作成] をクリックします。
[作成] をクリックします。
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 # 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. )] 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.33", # Optional cluster_name=CLUSTER_NAME, # Optional service_account=SERVICE_ACCOUNT, # Optional enable_metrics_collection=True, # Optional. Enable metrics collection for monitoring. labels=LABELS, # Optional. )
ここで
CLUSTER_NAME: Vertex AI の Ray クラスタの名前。プロジェクト全体で一意にする必要があります。
NETWORK:(省略可)VPC ネットワークの完全な名前(
projects/PROJECT_ID/global/networks/VPC_NAME
形式)。クラスタのパブリック エンドポイントではなくプライベート エンドポイントを設定するには、Ray on Vertex AI で使用する VPC ネットワークを指定します。詳細については、プライベート接続とパブリック接続をご覧ください。VPC_NAME:(省略可)VM が動作している VPC。
PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は、Google Cloud コンソールの [ようこそ] ページで確認できます。
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 クラスタのライフサイクル中に、各アクションは状態に関連付けられます。次の表に、各状態の課金ステータスと管理オプションの概要を示します。各状態の定義については、リファレンス ドキュメントをご覧ください。
アクション | 状態 | 課金対象か | 削除アクションは可能か | キャンセル アクションは可能か |
---|---|---|---|---|
ユーザーがクラスタを作成している | PROVISIONING | いいえ | いいえ | いいえ |
ユーザーが手動でスケールアップまたはスケールダウンしている | UPDATING | はい、リアルタイムのサイズに基づきます | はい | いいえ |
クラスタを実行しています | RUNNING | はい | はい | 該当なし。削除可能です |
クラスタが自動的にスケールアップまたはスケールダウンしている | UPDATING | はい、リアルタイムのサイズに基づきます | はい | いいえ |
ユーザーがクラスタを削除している | STOPPING | いいえ | いいえ | 該当なし。すでに停止しています |
クラスタがエラー状態になる | ERROR | いいえ | はい | 該当なし。削除可能です |
該当なし | STATE_UNSPECIFIED | いいえ | ○ | 該当なし |
カスタム イメージ(省略可)
ビルド済みイメージは、ほとんどのユースケースに対応しています。独自のイメージをビルドする場合は、Ray on Vertex のビルド済みイメージをベースイメージとして使用することをおすすめします。ベースイメージからイメージを作成する方法については、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.
- rsync
Google のベースイメージを使用せずに独自のイメージをビルドする場合(上級者向け)は、イメージに以下が含まれていることを確認してください。
- Ray 2.33.0 または 2.9.3
- Python 3.10
- python-json-logger==2.0.7
プライベート接続とパブリック接続
デフォルトでは、Ray on Vertex AI は、Vertex AI の Ray クラスタで Ray クライアントを使用してインタラクティブな開発を行うための、安全なパブリック エンドポイントを作成します。開発や一時的なユースケースには、パブリック接続を使用することをおすすめします。このパブリック エンドポイントには、インターネット経由でアクセスできます。クラスタにアクセスできるのは、Ray クラスタのユーザー プロジェクトに対する Vertex AI ユーザーロール権限が付与されている承認済みユーザーのみです。
クラスタへのプライベート接続が必要な場合や、VPC Service Controls を使用している場合は、Vertex AI の Ray クラスタで VPC ピアリングがサポートされています。プライベート エンドポイントを使用するクラスタには、Vertex AI とピアリングされている VPC ネットワーク内のクライアントからのみアクセスできます。
Ray on Vertex AI の VPC ピアリングを使用してプライベート接続を設定するには、クラスタの作成時に VPC ネットワークを選択します。VPC ネットワークには、VPC ネットワークと Vertex AI の間に限定公開サービス接続が必要です。コンソールで Ray on Vertex AI を使用する場合は、クラスタを作成するときに限定公開サービス アクセス接続を設定できます。
Vertex AI の Ray クラスタで VPC Service Controls と VPC ピアリングを使用する場合は、Ray ダッシュボードとインタラクティブ シェルを使用するために追加の設定が必要になります。VPC-SC と VPC ピアリングを使用した Ray ダッシュボードとインタラクティブ シェルの手順に沿って、ユーザー プロジェクトで VPC-SC と VPC ピアリングを使用してインタラクティブ シェルの設定を構成します。
Vertex AI に Ray クラスタを作成したら、Vertex AI SDK for Python を使用してヘッドノードに接続できます。接続環境(Compute Engine VM や Vertex AI Workbench インスタンスなど)は、Vertex AI とピアリングされている VPC ネットワークに存在する必要があります。限定公開サービス接続の IP アドレスの数には上限があるため、IP アドレスが枯渇する可能性があります。そのため、長時間実行されるクラスタにはプライベート接続を使用することをおすすめします。
VPC-SC と VPC ピアリングを使用した Ray ダッシュボードとインタラクティブ シェル
-
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
)。
-
-
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。これらの ID は、Google Cloud コンソールの [ようこそ] ページで確認できます。
-
-
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 }
-
インタラクティブ シェル、VPC-SC、VPC ピアリングを有効にしてトレーニング ジョブを送信します。