Déployer Ray accéléré par GPU pour les charges de travail d'IA sur GKE


Cette page vous explique comment configurer et exécuter un cluster Ray compatible avec les GPU sur Google Kubernetes Engine (GKE) pour mettre à l'échelle vos charges de travail d'IA/de ML.

Pourquoi utiliser Ray ?

L'utilisation de Ray sur GKE, facilitée par KubeRay, vous permet de mettre à l'échelle les applications Python et d'IA. Ray gère le scaling des applications, tandis que GKE gère les serveurs et les ressources sous-jacents.

Cette combinaison facilite la gestion des ressources, l'ajustement automatique de la capacité, la fiabilité et le déploiement de vos applications dans différents environnements. En connectant vos applications Ray distribuées à votre infrastructure et outils cloud existants sur GKE, vous pouvez simplifier les opérations et provisionner une plate-forme robuste et évolutive pour les tâches complexes à l'aide des méthodes Kubernetes standards.

Pour en savoir plus, consultez l'article de blog Pourquoi utiliser GKE pour vos charges de travail Ray AI ?.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the GKE API.

    Enable the API

  4. Install the Google Cloud CLI.

  5. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. Installez kubectl : kubectl est le principal outil de ligne de commande permettant d'interagir avec les clusters GKE. Si vous utilisez Cloud Shell, kubectl est déjà installé. Sinon, installez-le dans votre terminal en exécutant la commande gcloud components install kubectl.

    Pour vérifier votre installation, exécutez la commande suivante : kubectl version --client

  8. Installer Ray : nous vous recommandons vivement de créer et d'accéder à un environnement virtuel Python (venv) avant d'installer Ray afin d'isoler ses dépendances.
    1. Installez Python.
    2. Créez et activez un nouvel environnement virtuel.
    3. Installez la dernière version stable de Ray en exécutant cette commande dans votre environnement virtuel : pip install -U "ray[default]".
    4. Pour vérifier votre installation, exécutez la commande suivante : ray --version. Notez la version de Ray (par exemple, 2.44.1) dans le résultat.
  9. Assurez-vous que votre projet Google Cloud dispose d'un quota suffisant pour les GPU L4. Pour en savoir plus, consultez À propos des GPU et Quotas d'allocation.

Créer un cluster GKE

Vous pouvez déployer votre charge de travail dans un cluster GKE Autopilot ou GKE Standard. Nous vous recommandons d'utiliser un cluster Autopilot pour une expérience Kubernetes entièrement gérée. Pour choisir le mode de fonctionnement GKE le mieux adapté à vos charges de travail, consultez la section Choisir un mode de fonctionnement GKE.

Autopilot

En mode Autopilot, Google gère la configuration de votre cluster, y compris le scaling, la sécurité et d'autres paramètres préconfigurés. Les clusters Autopilot sont optimisés pour exécuter la plupart des charges de travail de production et provisionner des ressources de calcul en fonction de vos fichiers manifestes Kubernetes.

  1. Dans le terminal, exécutez la commande gcloud container clusters create-auto suivante :

    gcloud container clusters create-auto my-ray-enabled-cluster \
        --enable-ray-operator \
        --enable-ray-cluster-monitoring \
        --enable-ray-cluster-logging \
        --location=us-central1
    

    Cette commande Google Cloud CLI crée un cluster Autopilot nommé my-ray-enabled-cluster, avec les paramètres suivants :

    • --enable-ray-operator : installe l'opérateur Ray sur le cluster, ce qui simplifie la gestion des clusters Ray dans Kubernetes.
    • --enable-ray-cluster-monitoring : configure l'intégration à Cloud Monitoring pour les métriques des clusters Ray.
    • --enable-ray-cluster-logging : configure l'intégration à Cloud Logging pour collecter les journaux de votre cluster Ray.
    • --location=us-central1 : spécifie la région géographique dans laquelle le cluster GKE sera créé. Notez que la disponibilité des accélérateurs et les types compatibles varient selon la zone géographique. Pour en savoir plus, consultez Régions et zones de GPU.

    Les clusters Autopilot provisionnent et mettent à l'échelle automatiquement les nœuds (y compris ceux compatibles avec les GPU qui utilisent des classes de calcul) en fonction des besoins des charges de travail, ce qui permet d'optimiser à la fois l'utilisation et les coûts. Ce provisionnement et ce scaling automatiques des ressources dans les clusters Autopilot simplifient la gestion des ressources et vous permettent de vous concentrer sur vos modèles plutôt que sur l'infrastructure.

    Si vous utilisez un cluster GKE Standard, les indicateurs et les paramètres permettant d'activer Ray peuvent être différents. Pour en savoir plus, consultez Activer l'opérateur Ray sur GKE.

  2. Configurez kubectl de manière à communiquer avec votre cluster :

    gcloud container clusters get-credentials my-ray-enabled-cluster \
        --region=us-central1
    

Standard

En mode Standard, vous avez plus de contrôle sur l'infrastructure sous-jacente de votre cluster GKE. Vous gérez directement les pools de nœuds, les tailles de nœuds et d'autres configurations, ce qui permet une plus grande personnalisation. Les clusters standards conviennent aux charges de travail qui nécessitent des configurations spécifiques ou un contrôle strict des ressources.

  1. Dans le terminal, exécutez la commande gcloud container clusters create suivante :

    gcloud container clusters create my-ray-enabled-cluster \
        --addons=RayOperator \
        --enable-ray-cluster-monitoring \
        --enable-ray-cluster-logging \
        --region=us-central1 \
        --enable-autoprovisioning \
        --max-cpu=10 \
        --max-memory=64
    

    Cette commande Google Cloud CLI crée un cluster Standard nommé my-ray-enabled-cluster, avec les paramètres suivants :

    • --addons=RayOperator : installe l'opérateur Ray sur le cluster, ce qui simplifie la gestion des clusters Ray dans Kubernetes.
    • --enable-ray-cluster-monitoring : configure l'intégration à Cloud Monitoring pour les métriques des clusters Ray.
    • --enable-ray-cluster-logging : configure l'intégration à Cloud Logging pour collecter les journaux de votre cluster Ray.
    • --region=us-central1 : spécifie la région géographique dans laquelle le cluster GKE sera créé. Notez que la disponibilité des accélérateurs et les types compatibles varient selon la zone géographique. Pour en savoir plus, consultez Régions et zones de GPU.
    • --enable-autoprovisioning : crée et supprime automatiquement des pools de nœuds, et met à l'échelle les nœuds de ces pools en fonction des exigences de votre charge de travail.
    • --max-cpu : nombre maximal de cœurs auxquels le cluster peut être mis à l'échelle.
    • --max-memory : quantité maximale de mémoire (en gigaoctets) à laquelle le cluster peut évoluer.
  2. Configurez kubectl de manière à communiquer avec votre cluster :

    gcloud container clusters get-credentials my-ray-enabled-cluster \
        --region=us-central1
    

Installer le plug-in kubectl ray KubeRay

Le plug-in kubectl ray simplifie les workflows Ray sur Kubernetes courants. Pour obtenir les dernières instructions d'installation, consultez la documentation de KubeRay.

  1. Accédez à la page des versions et téléchargez le fichier binaire pour votre plate-forme. Par exemple, pour installer le plug-in kubectl ray version 1.3.2 sur Linux amd64, exécutez les commandes suivantes :

    curl -LO https://github.com/ray-project/kuberay/releases/download/v1.3.2/kubectl-ray_v1.3.2_linux_amd64.tar.gz
    tar -xvf kubectl-ray_v1.3.2_linux_amd64.tar.gz
    cp kubectl-ray ~/.local/bin
    

    Remplacez ~/.local/bin par le répertoire de votre PATH.

  2. Vérifiez votre installation :

    kubectl ray version
    

    Si un avertissement tel que KubeRay operator installation cannot be found: no KubeRay operator deployments found in any namespace. s'affiche, vous pouvez l'ignorer sans problème. Si l'installation a réussi, la sortie correspond à la version du plug-in kubectl ray.

Créez la classe de calcul personnalisée dans votre cluster.

Dans GKE, une classe de calcul personnalisée vous permet de définir des exigences matérielles spécifiques, comme le type et le nombre de GPU, par priorité. GKE utilise cette priorité lors du provisionnement des nœuds pour vos charges de travail.

Pour créer l'exemple de classe de calcul personnalisée pour ce guide, procédez comme suit :

  1. Enregistrez la spécification de classe de calcul suivante sous nvidia-l4-compute-class.yaml :

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: gpu-compute-class
    spec:
      priorities:
      - gpu:
          type: nvidia-l4
          count: 1
        spot: true
      - gpu:
          type: nvidia-l4
          count: 1
        spot: false
      nodePoolAutoCreation:
        enabled: true
      whenUnsatisfiable: DoNotScaleUp
    
  2. Créez la classe de calcul en exécutant la commande suivante :

    kubectl apply -f nvidia-l4-compute-class.yaml
    

    Que se passe-t-il une fois que vous avez appliqué la classe de calcul personnalisée ? Après avoir appliqué le fichier YAML de la classe de calcul, GKE provisionnera automatiquement des nœuds avec un GPU NVIDIA L4 lorsque votre cluster Ray les demandera. Il donnera la priorité aux Spot VM, comme défini dans votre fichier manifeste. Le paramètre whenUnsatisfiable: DoNotScaleUp indique à GKE de ne pas créer de nœuds qui ne répondent pas aux exigences spécifiées.

Créer et valider le cluster Ray

Vous pouvez maintenant créer votre cluster Ray sur votre cluster GKE.

  1. Créez le cluster Ray. Utilisez la commande kubectl ray create cluster pour définir et créer votre cluster Ray. Cette commande simplifie le processus en gérant la création des ressources Kubernetes sous-jacentes.

      kubectl ray create cluster my-ray-cluster \
          --worker-replicas=1 \
          --worker-cpu=2 \
          --worker-memory=4Gi \
          --worker-gpu=1 \
          --worker-node-selectors="cloud.google.com/compute-class=gpu-compute-class"
    

    La commande kubectl ray create cluster utilise le plug-in KubeRay pour traduire vos spécifications en définition de ressource personnalisée RayCluster et l'envoie à l'API Kubernetes pour créer l'objet RayCluster. Cet objet sert de plan, indiquant à l'opérateur Ray comment provisionner et gérer les composants réels du cluster Ray (nœuds principaux et de calcul) dans GKE. Par défaut, GKE planifie le pod principal sur un nœud de la série de machines E2.

    L'exemple de commande utilise les paramètres suivants :

    • kubectl ray create cluster my-ray-cluster : spécifie le nom du cluster Ray que vous souhaitez créer.
    • --worker-node-selectors : indique à Kubernetes de planifier les pods de nœuds de calcul sur les nœuds portant le libellé cloud.google.com/compute-class=gpu-compute-class.
  2. Vérifiez l'état du cluster Ray. Utilisez ces commandes pour vérifier que votre cluster Ray est opérationnel.

    • Vérifiez la ressource RayCluster en exécutant la commande suivante :

      kubectl ray get cluster
      

      Cette commande liste tous les clusters Ray de votre espace de noms Kubernetes. Vous devriez voir my-ray-cluster dans la liste. L'initialisation du cluster peut prendre quelques minutes.

    • Vérifiez les pods Kubernetes en exécutant cette commande :

      kubectl get pods
      

      Cette commande liste tous les pods en cours d'exécution dans votre espace de noms Kubernetes. Vous devriez voir les pods associés à votre cluster Ray :

      • Un pod pour le nœud principal Ray, avec un nom tel que my-ray-cluster-head-0.
      • Un ou plusieurs pods pour les nœuds de calcul Ray, avec des noms tels que my-ray-cluster-worker-group-0-xxxxx. Le nombre de pods de nœuds de calcul dépend de la configuration initiale de votre cluster Ray et de tout autoscaling qui a pu se produire.

Envoyer un job Ray

Une fois votre cluster Ray prêt, vous pouvez envoyer un job Ray à votre cluster Ray en cours d'exécution sur GKE.

Pour ce faire, utilisez la commande kubectl ray session afin de démarrer une session interactive, et la commande ray job submit pour lancer l'exécution du job.

  1. Démarrez une session interactive Ray. Pour établir une connexion locale à votre cluster Ray, exécutez cette commande :

      kubectl ray session my-ray-cluster
    

    Cette commande lance le transfert de port entre votre machine locale et le nœud de tête Ray de votre cluster GKE. Notez que votre terminal sera occupé pendant que cette session est active. Pour continuer, ouvrez une instance de terminal distincte.

  2. Créez l'exemple de code à exécuter. Enregistrez l'exemple de code suivant dans un fichier nommé sample_code.py.

      import ray
      import os
      import requests
    
      ray.init()
    
      @ray.remote
      class Counter:
          def __init__(self):
              # Used to verify runtimeEnv
              self.name = os.getenv("counter_name")
              assert self.name == "test_counter"
              self.counter = 0
    
          def inc(self):
              self.counter += 1
    
          def get_counter(self):
              return "{} got {}".format(self.name, self.counter)
    
      counter = Counter.remote()
    
      for _ in range(5):
              ray.get(counter.inc.remote())
              print(ray.get(counter.get_counter.remote()))
    
      # Verify that the correct runtime env was used for the job.
      assert requests.__version__ == "2.26.0"
    
  3. Ouvrez un nouveau terminal et envoyez le job Ray.

    1. Ouvrez un nouveau terminal sur votre machine locale. Si vous avez créé un environnement virtuel pour votre installation Ray, assurez-vous de l'activer également dans ce nouveau terminal.
    2. Accédez au répertoire dans lequel vous avez enregistré le fichier sample_code.py.
    3. Exécutez la commande suivante :

        ray job submit \
            --working-dir=. \
            --runtime-env-json='{"pip": ["requests==2.26.0"], "env_vars": {"counter_name": "test_counter"}}' \
            --address http://localhost:8265 python sample_code.py
      

      L'exemple de commande utilise les paramètres suivants :

      • --working-dir=. : spécifie le répertoire actuel comme répertoire de travail à mettre à la disposition du job Ray sur le cluster. Idéalement, ce répertoire ne contient que le code source de l'application que vous souhaitez exécuter sur Ray. Dans notre exemple, il s'agit du fichier sample_code.py.
      • --runtime-env-json='{"pip": ["requests==2.26.0"], "env_vars": {"counter_name": "test_counter"}}' : définit l'environnement d'exécution du job. Il spécifie la version requise de la bibliothèque Python (requests==2.26.0) et définit une variable d'environnement (counter_name) pour l'exécution du job.
  4. Affichez le job Ray. Vous pouvez surveiller le job de l'une des manières suivantes :

    • Tableau de bord Ray : ouvrez votre navigateur Web et accédez à http://localhost:8265. Cette URL ouvre le tableau de bord Ray, où vous pouvez consulter des informations sur votre job en cours d'exécution, y compris son état, ses journaux et son utilisation des ressources.
    • Explorateur de métriques : utilisez les tableaux de bord de métriques prédéfinis dans la consoleGoogle Cloud . Pour en savoir plus, consultez Collecter et afficher les journaux et les métriques des clusters Ray sur GKE.
  5. Mettez fin à la session Ray. Une fois que vous avez terminé d'interagir avec le cluster Ray ou de surveiller votre job, vous pouvez mettre fin à la session interactive en appuyant sur Ctrl+C dans le terminal où vous avez exécuté la commande kubectl ray session.

Effectuer un nettoyage

Pour éviter que les ressources utilisées sur cette page soient facturées sur votre compte Google Cloud , procédez comme suit :

Si vous avez déployé le démarrage rapide dans un nouveau projet Google Cloud et que vous n'avez plus besoin du projet, supprimez-le en procédant comme suit :

  1. Dans la console Google Cloud , accédez à la page Gérer les ressources.
  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Si vous n'avez pas créé de projet Google Cloud et que vous n'avez plus besoin du cluster GKE, vous pouvez le supprimer en exécutant la commande suivante :

gcloud container clusters delete my-ray-enabled-cluster \
    --location=us-central1

Étapes suivantes

  • Découvrez d'autres exemples, bonnes pratiques et outils pour Ray sur GKE : pour en savoir plus, consultez le dépôt ai-on-gke GitHub.
  • En savoir plus sur l'utilisation des accélérateurs sur GKE : utilisez des GPU pour le traitement parallèle dans les tâches de machine learning et d'analyse de données. Utilisez des TPU pour accélérer l'entraînement et l'inférence de modèles de deep learning à grande échelle.
  • En savoir plus sur l'opérateur Ray : pour savoir comment utiliser l'opérateur Ray afin de gérer les déploiements Ray, y compris les tâches Ray, consultez À propos de Ray sur GKE.
  • Utiliser Kueue pour la mise en file d'attente des jobs : découvrez comment Kueue, un système de mise en file d'attente des jobs Kubernetes natif, peut vous aider à gérer et à hiérarchiser vos charges de travail d'IA/de ML, ce qui peut améliorer l'utilisation des ressources. Pour en savoir plus, consultez Optimiser l'utilisation des ressources GKE pour les charges de travail mixtes d'entraînement et d'inférence d'IA/ML.