Ce document explique comment configurer un cluster Ray sur Vertex AI pour répondre à différents besoins. Par exemple, pour créer votre image, consultez Image personnalisée. Certaines entreprises peuvent utiliser la mise en réseau privé. Ce document traite de l'interface Private Service Connect pour Ray sur Vertex AI. Un autre cas d'utilisation consiste à accéder à des fichiers distants comme s'ils étaient locaux (voir Ray sur le système de fichiers réseau Vertex AI).
Présentation
Voici les thèmes abordés :
- créer un cluster Ray sur Vertex AI ;
- gérer le cycle de vie d'un cluster Ray
- créer une image personnalisée
- Configurer la connectivité privée et publique (VPC)
- utiliser l'interface Private Service Connect pour Ray sur Vertex AI
- Configurer Ray sur le système de fichiers réseau (NFS) Vertex AI
- Configurer un tableau de bord Ray et un shell interactif avec VPC-SC et l'appairage de VPC
Créer un cluster Ray
Vous pouvez utiliser la console Google Cloud ou le SDK Vertex AI pour Python pour créer un cluster Ray. Un cluster peut contenir jusqu'à 2 000 nœuds. Il existe une limite supérieure de 1 000 nœuds dans un pool de nœuds de calcul. Il n'y a pas de limite au nombre de pools de nœuds de calcul. Toutefois, en créer un grand nombre (par exemple, disposer de 1 000 pools de nœuds de calcul avec un nœud chacun) peut avoir un impact négatif sur les performances du cluster.
Avant de commencer, lisez la présentation de Ray sur Vertex AI et configurez tous les outils prérequis.
Une fois créé, un cluster Ray sur Vertex AI peut prendre entre 10 et 20 minutes pour démarrer.
Console
Conformément aux bonnes pratiques OSS Ray, le nombre de processeurs logiques est défini sur 0 sur le nœud principal de Ray afin d'éviter toute exécution de charge de travail sur ce nœud.
Dans la console Google Cloud , accédez à la page Ray sur Vertex AI.
Cliquez sur Créer un cluster pour ouvrir le panneau Créer un cluster.
Pour chaque étape du panneau Créer un cluster, vérifiez ou remplacez les informations du cluster par défaut. Cliquez sur Continuer à chaque étape :
Dans le champ Nom et région, spécifiez un Nom et choisissez un Emplacement pour votre cluster.
Pour les paramètres de calcul, spécifiez la configuration du cluster Ray sur le nœud principal de Vertex AI, y compris le type de machine, le type et le nombre d'accélérateurs, le type et la taille du disque et le nombre d'instances répliquées. Vous pouvez éventuellement ajouter un URI d'image personnalisée pour spécifier une image de conteneur personnalisée afin d'ajouter des dépendances Python non fournies par l'image de conteneur par défaut. Consultez la section Image personnalisée.
Sous Options avancées, vous pouvez :
- Spécifier votre propre clé de chiffrement.
- Spécifiez un compte de service personnalisé.
- Désactivez la collecte de métriques si vous n'avez pas besoin de surveiller les statistiques de ressources de votre charge de travail pendant l'entraînement.
(Facultatif) Pour déployer un point de terminaison privé pour votre cluster, la méthode recommandée consiste à utiliser Private Service Connect. Pour en savoir plus, consultez Interface Private Service Connect pour Ray sur Vertex AI.
Cliquez sur Créer.
SDK Ray sur Vertex AI
Conformément aux bonnes pratiques OSS Ray, le nombre de processeurs logiques est défini sur 0 sur le nœud principal de Ray afin d'éviter toute exécution de charge de travail sur ce nœud.
Dans un environnement Python interactif, utilisez les éléments suivants pour créer le cluster Ray sur Vertex AI :
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. )
Où :
CLUSTER_NAME : nom du cluster Ray sur Vertex AI qui doit être unique dans votre projet.
NETWORK : (facultatif) nom complet de votre réseau VPC, au format
projects/PROJECT_ID/global/networks/VPC_NAME
. Pour définir un point de terminaison privé au lieu d'un point de terminaison public pour votre cluster, spécifiez un réseau VPC à utiliser avec Ray sur Vertex AI. Pour en savoir plus, consultez Connectivité privée et publique.VPC_NAME : facultatif : VPC sur lequel la VM fonctionne.
PROJECT_ID : ID de votre projet Google Cloud . Vous pouvez trouver l'ID du projet sur la page d'accueil de la console Google Cloud .
SERVICE_ACCOUNT : (facultatif) compte de service permettant d'exécuter les applications Ray sur le cluster. Attribuez les rôles requis.
LABELS : (facultatif) libellés avec des métadonnées définies par l'utilisateur utilisées pour organiser les clusters Ray. Les clés et les valeurs des libellés ne peuvent pas dépasser 64 caractères (points de code Unicode) et ne peuvent contenir que des lettres minuscules, des chiffres, des traits de soulignement et des tirets. Les caractères internationaux sont acceptés. Pour en savoir plus et obtenir des exemples de libellés, consultez https://goo.gl/xmQnxf.
Le résultat suivant doit s'afficher jusqu'à ce que l'état passe à 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
Veuillez noter les points suivants :
Le premier nœud est le nœud principal.
Les types de machines TPU ne sont pas compatibles.
Gestion du cycle de vie
Au cours du cycle de vie d'un cluster Ray sur Vertex AI, chaque action est associée à un état. Le tableau suivant récapitule l'état de facturation et l'option de gestion pour chaque état. La documentation de référence fournit une définition pour chacun de ces états.
Action | État | Facturé ? | Action "Supprimer" disponible ? | Action "Annuler" disponible ? |
---|---|---|---|---|
L'utilisateur crée un cluster | PROVISIONNEMENT | Non | Non | Non |
L'utilisateur effectue un scaling à la hausse ou à la baisse manuellement | UPDATING | Oui, en fonction de la taille en temps réel | Oui | Non |
Le cluster s'exécute | RUNNING | Oui | Oui | Non applicable : vous pouvez supprimer |
Le cluster effectue un scaling à la hausse ou à la baisse | UPDATING | Oui, en fonction de la taille en temps réel | Oui | Non |
L'utilisateur supprime le cluster | ARRÊT… | Non | Non | Non applicable : l'arrêt est déjà en cours |
Le cluster passe à l'état d'erreur | ERREUR | Non | Oui | Non applicable : vous pouvez supprimer |
Non applicable | STATE_UNSPECIFIED | Non | Oui | Non applicable |
Image personnalisée (facultatif)
Les images prédéfinies conviennent à la plupart des cas d'utilisation. Si vous souhaitez créer votre image, utilisez les images prédéfinies Ray sur Vertex AI comme image de base. Consultez la documentation Docker pour savoir comment créer vos images à partir d'une image de base.
Ces images de base incluent une installation de Python, Ubuntu et Ray. Elles incluent également des dépendances telles que :
- python-json-logger
- google-cloud-resource-manager
- ca-certificates-java
- libatlas-base-dev
- liblapack-dev
- g++, libio-all-perl
- libyaml-0-2.
Connectivité privée et publique
Par défaut, Ray sur Vertex AI crée un point de terminaison public et sécurisé pour le développement interactif avec le client Ray sur les clusters Ray sur Vertex AI. Utilisez la connectivité publique pour les cas d'utilisation de développement ou éphémères. Ce point de terminaison public est accessible sur Internet. Seuls les utilisateurs autorisés disposant au minimum des autorisations de rôle utilisateur Vertex AI sur le projet utilisateur du cluster Ray peuvent y accéder.
Si vous avez besoin d'une connexion privée à votre cluster ou si vous utilisez VPC Service Controls, l'appairage de VPC est compatible avec les clusters Ray sur Vertex AI. Les clusters avec un point de terminaison privé ne sont accessibles qu'à partir d'un client situé dans un réseau VPC appairé avec Vertex AI.
Pour configurer une connectivité privée avec l'appairage de réseaux VPC pour Ray sur Vertex AI, sélectionnez un réseau VPC lorsque vous créez votre cluster. Le réseau VPC nécessite une connexion aux services privés entre votre réseau VPC et Vertex AI. Si vous utilisez Ray sur Vertex AI dans la console, vous pouvez configurer votre connexion d'accès aux services privés lors de la création du cluster.
Si vous souhaitez utiliser VPC Service Controls et l'appairage de VPC avec des clusters Ray sur Vertex AI, une configuration supplémentaire est requise pour utiliser le tableau de bord Ray et le shell interactif. Suivez les instructions de la section Tableau de bord Ray et shell interactif avec VPC-SC et appairage de VPC pour configurer le shell interactif avec VPC-SC et l'appairage de VPC dans votre projet utilisateur.
Après avoir créé votre cluster Ray sur Vertex AI, vous pouvez vous connecter au nœud principal à l'aide du SDK Vertex AI pour Python. L'environnement de connexion, tel qu'une VM Compute Engine ou une instance Vertex AI Workbench, doit se trouver dans le réseau VPC appairé à Vertex AI. Notez qu'une connexion privée aux services dispose d'un nombre limité d'adresses IP, ce qui peut entraîner un épuisement des adresses IP. Nous vous recommandons donc d'utiliser des connexions privées pour les clusters de longue durée.
Interface Private Service Connect pour Ray sur Vertex AI
Les interfaces Private Service Connect de sortie et d'entrée sont compatibles avec les clusters Ray sur Vertex AI.
Pour utiliser la sortie d'interface Private Service Connect, suivez les instructions ci-dessous. Si VPC Service Controls n'est pas activé, les clusters avec sortie d'interface Private Service Connect utilisent le point de terminaison public sécurisé pour l'entrée avec Ray Client.
Si VPC Service Controls est activé, l'entrée d'interface Private Service Connect est utilisée par défaut avec la sortie d'interface Private Service Connect. Pour vous connecter au client Ray ou envoyer des jobs depuis un notebook pour un cluster avec une interface Private Service Connect, assurez-vous que le notebook se trouve dans le VPC et le sous-réseau du projet utilisateur. Pour savoir comment configurer VPC Service Controls, consultez VPC Service Controls avec Vertex AI.
Activer l'interface Private Service Connect
Suivez le guide Configurer vos ressources pour configurer votre interface Private Service Connect. Une fois vos ressources configurées, vous pouvez activer l'interface Private Service Connect sur votre cluster Ray sur Vertex AI.
Console
L'option Mise en réseau s'affiche lorsque vous créez votre cluster et après avoir spécifié Nom et région et Paramètres de calcul.
Configurez un rattachement réseau en procédant de l'une des manières suivantes :
- Utilisez le nom NETWORK_ATTACHMENT_NAME que vous avez spécifié lors de la configuration de vos ressources pour Private Service Connect.
- Créez un rattachement de réseau en cliquant sur le bouton Créer un rattachement de réseau qui s'affiche dans le menu déroulant.
Cliquez sur Créer un rattachement de réseau.
Dans la sous-tâche qui s'affiche, spécifiez un nom, un réseau et un sous-réseau pour le nouveau rattachement de réseau.
Cliquez sur Créer.
SDK Ray sur Vertex AI
Le SDK Ray sur Vertex AI fait partie du SDK Vertex AI pour Python. Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API SDK Vertex AI pour Python.
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, )
Où :
- NETWORK_ATTACHMENT_NAME : nom que vous avez spécifié lors de la configuration de vos ressources pour Private Service Connect dans votre projet utilisateur.
Ray sur Vertex AI Network File System (NFS)
Pour rendre les fichiers distants disponibles pour votre cluster, installez des partages NFS (Network File System). Vos jobs peuvent ainsi accéder à des fichiers distants comme s'ils étaient locaux, ce qui permet un débit élevé et une faible latence.
Configurer un VPC
Deux options s'offrent à vous pour configurer un VPC :
- Créez un rattachement de réseau d'interface Private Service Connect. (Recommandé)
- Configurer l'appairage de réseaux VPC
Configurer votre instance NFS
Pour savoir comment créer une instance Filestore, consultez Créer une instance. Si vous utilisez la méthode d'interface Private Service Connect, vous n'avez pas besoin de sélectionner le mode d'accès privé aux services lorsque vous créez le filestore.
Utiliser le système de fichiers réseau (NFS)
Pour utiliser le système de fichiers réseau, spécifiez un réseau ou un rattachement de réseau (recommandé).
Console
À l'étape "Mise en réseau" de la page de création, après avoir spécifié un réseau ou un rattachement réseau. Pour ce faire, cliquez sur Ajouter un montage NFS dans la section "Système de fichiers réseau (NFS)", puis spécifiez un montage NFS (serveur, chemin d'accès et point de montage).
Champ Description server
Adresse IP de votre serveur NFS. Il doit s'agir d'une adresse privée dans votre VPC. path
Chemin d'accès au partage NFS. Il doit s'agir d'un chemin absolu commençant par /
.mountPoint
Point d'installation local. Il doit s'agir d'un nom de répertoire UNIX valide. Par exemple, si le point d'installation local est sourceData
, spécifiez le chemin d'accès/mnt/nfs/ sourceData
à partir de votre instance de VM d'entraînement.Pour en savoir plus, consultez la section Où spécifier les ressources de calcul.
Spécifiez un serveur, un chemin d'accès et un point de montage.
Cliquez sur Créer. Le cluster Ray est alors créé.
Tableau de bord Ray et shell interactif avec VPC-SC + Appairage de VPC
-
configurer
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 : passer à un réseau appairé.
-
LOCATION : emplacement souhaité (par exemple,
us-central1
).
-
-
configurer
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 de votre projet Vous pouvez trouver cet ID sur la page d'accueil de la console Google Cloud .
-
-
Transaction d'enregistrement 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 }
-
Envoyer une tâche d'entraînement avec l'interface système interactive, VPC-SC et l'appairage de VPC activés.