Ray sur l’environnement d’exécution IA

Remarque

Si vous utilisez Ray sur Databricks Classic Compute avec Databricks Runtime ML, voyez Ray sur Databricks.

Ray est un framework open source permettant de faire passer à l’échelle des charges de travail Python. Vous pouvez faire tourner Ray en temps d’exécution AI sans provisionner ni gérer l’infrastructure GPU sous-jacente.

Pourquoi utiliser Ray avec AI Runtime

Ray est couramment utilisé pour distribuer des charges de travail Python telles que l’entraînement de modèles, l’inférence par lots, le traitement de données et l’ajustement des hyperparamètres. Sur AI Runtime, Ray peut accéder aux données dans les volumes du catalogue Unity, suivre des expériences avec MLflow et les exécuter dans le cadre de workflows de production.

Vous pouvez utiliser des bibliothèques Ray courantes telles que Ray Core, Ray Data, Ray Train et Ray Tune sur AI Runtime. Les charges de travail Ray existantes peuvent continuer à utiliser les API standard des bibliothèques.

Comment Ray fonctionne avec l’environnement d’exécution de l’IA

Chaque application Ray s’exécute sur un cluster Ray, qui peut contenir un ou plusieurs nœuds. AI Runtime fournit les nœuds, et Ray planifie les tâches et acteurs sur leurs ressources CPU et GPU disponibles. La façon dont vous démarrez Ray dépend de l’interface d’exécution :

Interface Nœuds Démarrer Ray
Notebook Le nœud unique attaché au carnet Appel ray_init() depuis le SDK d’exécution IA (databricks.air)
Interface CLI de Databricks Un ensemble fixe d’un ou plusieurs nœuds Démarrez le nœud principal sur le nœud 0, puis joignez les nœuds restants comme nœuds de calcul à l’aide d’un script d’amorçage réutilisable

Utiliser Ray dans les carnets

Lorsque votre notebook est connecté au calcul GPU AI Runtime, utilisez ray_init() depuis le SDK Databricks AI Runtime pour lancer Ray sur le nœud attaché :

from databricks.air import ray_init

ray_init()

ray_init() appelle l’API standard ray.init() , configure le tableau de bord Ray pour l’accès via le proxy du pilote Databricks, et imprime l’URL du tableau de bord dans la sortie du carnet. Utilisez le tableau de bord pour inspecter les jobs, tâches, acteurs, journaux et utilisation des ressources Ray pendant que votre code s’exécute.

Remarque

ray_init() nécessite la version 5 de l’environnement ou supérieure. Dans la version 5, importez-le depuis serverless_gpu au lieu de databricks.air. Databricks AI v6 inclut Ray. Si vous utilisez la Standard v6, installez Ray avant d’appeler ray_init(). Consultez Configurer votre environnement.

Exemples de Notebook

Exemple Description
Ray Core, bonjour au monde Soumettez des tâches GPU asynchrones sur le calcul associé, inspectez la planification dans le tableau de bord Ray, et récupérez les résultats.
Réglage des hyperparamètres CIFAR-10 avec Ray Tune Effectuez des essais simultanés sur GPU fractionnaire pour un classificateur d’images PyTorch et utilisez l’algorithme asynchrone de réduction successive de moitié (ASHA) pour stopper les configurations sous-performantes dès le début.
Inférence par lots avec Qwen2.5-32B, Ray Data et vLLM Exécutez une inférence batch multilingue avec huit répliques vLLM persistantes sur 8 GPU H100 et enregistrez les résultats sous forme de Parquet dans un volume du catalogue Unity.

Utilisez Ray avec l’interface de ligne de commande Databricks

Les commandes CLI Databricks pour AI Runtime prennent en charge les charges de travail Ray à nœud unique et multinœud. Dans la configuration de la charge de travail, spécifiez un fixe accelerator_type et le total num_accelerators. La recette de démarrage de Ray Core inclut un script bootstrap réutilisable. Dans le command de la charge de travail, définissez RAY_ENTRYPOINT sur le chemin d’accès de votre fichier Python et exécutez le script de démarrage. Le script bootstrap fait ce qui suit :

  • Au nœud 0, il démarre la tête Ray et exécute le point d’entrée configuré.
  • Sur chaque autre nœud, il lance un travailleur Rayon et le maintient connecté pendant que le point d’entrée fonctionne.
  • Après la fin du point d’entrée, il arrête les processus Ray.

Dans l’application, connectez-vous au cluster avec ray.init(address="auto").

Avec l’environnement Standard, ajoutez ray ou l’élément supplémentaire requis, comme ray[data], ray[train], ou ray[tune], aux dépendances de charge de travail. Databricks AI v6 inclut Ray.

Commencez avec Ray

Les exemples minimes suivants introduisent les bibliothèques principales Ray et partagent le même motif de démarrage de cluster.

Exemple Description
Ray Core Lance un cluster Ray sur deux GPU A10 et planifie une tâche Ray Core par GPU.
Faisceau de rayons Entraînez un petit perceptron multicouche sur des données synthétiques avec un worker Ray Train par GPU.
Données Ray Exécutez un pipeline de traitement de données synthétiques à travers un cluster Ray.
Ray Tune Ajustez un petit perceptron multicouche sur des données synthétiques avec un essai par GPU.

Exemples supplémentaires de CLI

Exemple Description
Réglage fin du ResNet-50 avec Ray Train Ajustez ResNet-50 avec un worker DistributedDataParallel (DDP) par GPU A10 sur deux nœuds.
Réglage fin Qwen2.5-3B avec Ray Train Ajustez Qwen2.5-3B avec un worker DDP par GPU sur un nœud H100 8x.
Inférence par lots avec Ray Data et vLLM Générez des réponses avec Qwen2.5-7B-Instruct et écrivez les résultats dans un volume du catalogue Unity sous la forme Parquet.
Recherche d’hyperparamètres LoRA avec Ray Tune Recherchez les configurations LoRA pour Qwen2.5-0.5B sur quatre GPU A10 et arrêtez les essais sous-performants avec le planificateur ASHA.
Recherche d’hyperparamètres XGBoost avec Ray Tune Recherchez les hyperparamètres XGBoost sur quatre GPU A10, enregistrez la meilleure configuration dans MLflow, et enregistrez le modèle dans le catalogue Unity.

Travail avec les données et fonctionnalités Databricks

Les charges de travail Ray peuvent accéder aux données dans les volumes d’Unity Catalog, consigner les exécutions avec MLflow et être exécutées en tant que tâches de Lakeflow Jobs définies à l’aide de Bundles d’automatisation déclarative.

Accès aux données dans le catalogue Unity

Pour les données tabulaires dans une table Unity Catalog, utilisez ray.data.read_databricks_tables() pour lire une table ou exécuter une requête SQL via un entrepôt SQL Databricks. Spécifiez l’ID de l’entrepôt, le catalogue et le schéma car l’exécution d’IA ne fournit pas de session Spark locale. Vous pouvez utiliser SQL pour effectuer des jointures, des agrégations et des filtres avant que Ray ne traite les résultats.

Pour les données basées sur des fichiers et non structurées, utilisez un volume Unity Catalog. Les workers Ray peuvent accéder aux fichiers à l’aide de leurs chemins /Volumes/<catalog>/<schema>/<volume>/.... Par exemple, Ray Data peut lire des fichiers Parquet avec ray.data.read_parquet() et écrire des résultats avec Dataset.write_parquet().

Suivre et orchestrer les charges de travail

Utilisez MLflow pour enregistrer les paramètres, métriques et artefacts d’une charge de travail Ray. Voir Suivi et observabilité de l’expérience.

Pour planifier la charge de travail ou la composer avec des tâches de préparation des données CPU, utilisez Lakeflow Jobs et Declarative Automation Bundles. Voir Planifier les charges de travail GPU et créer des tâches.

Migrer une charge de travail Ray existante

La migration d’une charge de travail Ray autogérée implique de remplacer la configuration de son infrastructure et ses intégrations de services par le modèle d’exécution IA Runtime.

Évaluer votre charge de travail

Avant de migrer, examinez les limitations. Confirmez que la charge de travail peut fonctionner sur un cluster de taille fixe avec un seul type d’accélérateur.

Migrer la charge de travail

Pour migrer une charge de travail Ray autogérée :

  1. Choisissez un notebook pour le développement interactif à nœud unique ou la CLI Databricks pour les tâches à nœud unique ou multinœud.
  2. Associez les ressources existantes du cluster à un type d’accélérateur de runtime d’IA ainsi qu’à un nombre d’accélérateurs. Consultez Matériel.
  3. Remplacez le démarrage de cluster existant par ray_init() dans un notebook, ou par le bootstrap documenté du nœud principal et worker dans une charge de travail d’interface de ligne de commande Databricks.
  4. Déclarez les dépendances Python de la charge de travail et mettez à jour ses données, point de contrôle, modèle et chemins de sortie.
  5. Validez la charge de travail sur la plus petite configuration applicable. Confirmez son accès aux données, ses demandes de ressources et ses sorties avant de tester la topologie fixe prévue.

Limitations

Ray on AI Runtime présente les limitations suivantes :

  • Le cluster Ray a un nombre de nœuds fixe pendant toute la durée d’une charge de travail. La mise à l’échelle automatique des clusters Ray n’est pas prise en charge.
  • Tous les nœuds d’une charge de travail utilisent le même accelerator_type. Un cluster Ray ne peut pas contenir de groupes de workers distincts, l’un dédié uniquement au CPU et l’autre au GPU, ni faire évoluer indépendamment les capacités CPU et GPU.
  • Un notebook démarre Ray sur le nœud unique qui lui est associé. Utilisez l’interface de ligne de commande Databricks pour un cluster Ray multinœud.
  • L’accès au tableau de bord Ray via le proxy du pilote Databricks est actuellement disponible uniquement pour les charges de travail des ordinateurs portables.

Tip

Si la préparation du processeur et le traitement GPU peuvent fonctionner en étapes séparées, utilisez un Lakeflow Job multi-tâches et passez les données entre les tâches via un volume Unity Catalog.