Créer un cluster Ray sur Vertex AI

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

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.

  1. Dans la console Google Cloud , accédez à la page Ray sur Vertex AI.

    Accéder à la page Ray sur Vertex AI

  2. Cliquez sur Créer un cluster pour ouvrir le panneau Créer un cluster.

  3. 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 :

    1. Dans le champ Nom et région, spécifiez un Nom et choisissez un Emplacement pour votre cluster.

    2. 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.
    3. (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.

  4. 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.

Schéma d'activation de l'interface Private Service Connect

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

  1. 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.

    Spécifier un réseau dans la console

  2. 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.

    Console : créer un réseau

  3. Cliquez sur Créer un rattachement de réseau.

  4. 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.

    Rattachement de réseau

  5. 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 :

  1. Créez un rattachement de réseau d'interface Private Service Connect. (Recommandé)
  2. 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

  1. À 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.

  2. Spécifiez un serveur, un chemin d'accès et un point de montage. Système de fichiers NFS

  3. Cliquez sur Créer. Le cluster Ray est alors créé.

Tableau de bord Ray et shell interactif avec VPC-SC + Appairage de VPC

  1. 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).

  2. 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 .

  3. 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
    }
        
  4. Envoyer une tâche d'entraînement avec l'interface système interactive, VPC-SC et l'appairage de VPC activés.

Étape suivante