Faire évoluer des clusters Ray sur Vertex AI

Il existe deux options de scaling les clusters Ray sur Vertex AI : l'autoscaling et le scaling manuel. L'autoscaling permet au cluster d'ajuster automatiquement le nombre de nœuds de calcul en fonction des ressources requises par les tâches et les acteurs Ray, par exemple. L'autoscaling est recommandé si vous exécutez une charge de travail importante et que vous n'êtes pas sûr des ressources nécessaires. Le scaling manuel permet aux utilisateurs de contrôler plus précisément les nœuds.

L'autoscaling peut réduire les coûts liés à la charge de travail, mais ajoute des frais généraux de lancement de nœuds et peut être difficile à configurer. Si vous débutez avec Ray, nous vous recommandons de commencer par des clusters sans autoscaling et d'utiliser la fonctionnalité de scaling manuel.

Autoscaling

Vous pouvez activer la fonctionnalité d'autoscaling d'un cluster Ray en spécifiant le nombre minimal de réplicas (min_replica_count) et le nombre maximal de réplicas (max_replica_count) d'un pool de nœuds de calcul.

Remarques :

  • Vous devez configurer la spécification d'autoscaling de tous les pools de nœuds de calcul.
  • min_replica_count doit être supérieur ou égal à 1.
  • La vitesse d'upscaling et de downscaling personnalisée n'est pas prise en charge. Pour connaître les valeurs par défaut, consultez la section Vitesse d'upscaling et de downscaling dans la documentation de Ray.

Définir la spécification d'autoscaling du pool de nœuds de calcul

Vous pouvez utiliser la console Google Cloud ou le SDK Vertex AI pour Python pour activer la fonctionnalité d'autoscaling d'un cluster Ray.

SDK Ray sur Vertex AI

from google.cloud import aiplatform
import vertex_ray
from vertex_ray import AutoscalingSpec

autoscaling_spec = AutoscalingSpec(
 min_replica_count=1,
 max_replica_count=3,
)

head_node_type = Resources(
 machine_type="n1-standard-16",
 node_count=1,
)

worker_node_types = [Resources(
 machine_type="n1-standard-16",
 accelerator_type="NVIDIA_TESLA_T4",
 accelerator_count=1,
 autoscaling_spec=autoscaling_spec,
)]

# Create the Ray cluster on Vertex AI
CLUSTER_RESOURCE_NAME = vertex_ray.create_ray_cluster(
head_node_type=head_node_type,
worker_node_types=worker_node_types,
...
)

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, 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. Pour créer un cluster avec un pool de nœuds de calcul à autoscaling, indiquez une valeur pour le nombre maximal d'instances répliquées du pool de nœuds de calcul.autoscaling-compute-settings

  4. Cliquez sur Créer.

Scaling manuel

Lorsque vos charges de travail augmentent ou diminuent sur vos clusters Ray sur Vertex AI, vous pouvez ajuster manuellement le nombre d'instances répliquées pour répondre à la demande. Par exemple, si vous disposez d'une capacité excédentaire, vous pouvez réduire la taille de vos pools de nœuds de calcul pour réduire les coûts.

Limites

Lorsque vous effectuez le scaling de clusters, vous ne pouvez modifier que le nombre d'instances dupliquées de vos pools de nœuds de calcul existants. Par exemple, vous ne pouvez pas ajouter ou supprimer de pools de nœuds de calcul dans votre cluster, ni modifier le type de machine de vos pools de nœuds de calcul. En outre, le nombre d'instances dupliquées de vos pools de nœuds de calcul ne peut pas être inférieur à 1.

Si vous utilisez une connexion d'appairage de VPC pour vous connecter à vos clusters, le nombre maximal de nœuds est limité. Le nombre maximal de nœuds dépend du nombre de nœuds du cluster lors de sa création. Pour en savoir plus, consultez la section Calcul du nombre maximal de nœuds. Ce nombre maximal inclut non seulement vos pools de nœuds de calcul, mais également votre nœud principal. Si vous utilisez la configuration réseau par défaut, le nombre de nœuds ne peut pas dépasser les limites supérieures décrites dans la documentation sur la création de clusters.

Calcul du nombre maximal de nœuds

Si vous utilisez l'accès aux services privés (appairage VPC) pour vous connecter à vos nœuds, utilisez les formules suivantes pour vérifier que vous ne dépassez pas le nombre maximal de nœuds (M), en supposant f(x) = min(29, (32 - ceiling(log2(x))) :

  • f(2 * M) = f(2 * N)
  • f(64 * M) = f(64 * N)
  • f(max(32, 16 + M)) = f(max(32, 16 + N))

Le nombre total maximal de nœuds dans le cluster Ray sur Vertex AI que vous pouvez faire évoluer (M) dépend du nombre total initial de nœuds que vous avez configurés (N). Après avoir créé le cluster Ray sur Vertex AI, vous pouvez adapter le nombre total de nœuds à une valeur comprise entre P et M inclus, où P correspond au nombre de pools de votre cluster.

Le nombre total initial de nœuds dans le cluster et le nombre cible de scaling à la hausse doivent se trouver dans le même bloc de couleur.

number-of-nodes

Mettre à jour le nombre d'instances répliquées

Vous pouvez utiliser la console Google Cloud ou le SDK Vertex AI pour Python pour mettre à jour le nombre d'instances dupliquées de votre pool de nœuds de calcul. Si votre cluster comprend plusieurs pools de nœuds de calcul, vous pouvez modifier individuellement le nombre d'instances répliquées de chacun d'eux dans une seule requête.

SDK Ray sur Vertex AI

import vertexai
import vertex_ray

vertexai.init()
cluster = vertex_ray.get_ray_cluster("CLUSTER_NAME")

# Get the resource name.
cluster_resource_name = cluster.cluster_resource_name

# Create the new worker pools
new_worker_node_types = []
for worker_node_type in cluster.worker_node_types:
 worker_node_type.node_count = REPLICA_COUNT # new worker pool size
 new_worker_node_types.append(worker_node_type)

# Make update call
updated_cluster_resource_name = vertex_ray.update_ray_cluster(
 cluster_resource_name=cluster_resource_name,
 worker_node_types=new_worker_node_types,
)

Console

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

    Accéder à la page Ray sur Vertex AI

  2. Dans la liste des clusters, cliquez sur celui que vous souhaitez modifier.

  3. Sur la page Détails du cluster, cliquez sur Modifier le cluster.

  4. Dans le volet Modifier le cluster, sélectionnez le pool de nœuds de calcul à mettre à jour, puis modifiez le nombre d'instances dupliquées.

  5. Cliquez sur Mettre à jour.

    Patientez quelques minutes que votre cluster soit mis à jour. Une fois la mise à jour terminée, vous pouvez consulter le nombre d'instances répliquées mis à jour sur la page Détails du cluster.

  6. Cliquez sur Créer.