Meilleures pratiques pour l’apprentissage profond dans Azure Databricks

Cet article contient des conseils pour le Deep Learning sur Azure Databricks et des informations sur les bibliothèques et outils intégrés conçus pour optimiser les charges de Deep Learning, comme les suivants :

Databricks Machine Learning fournit une infrastructure de Deep Learning prédéfinie avec Databricks Runtime pour le Machine Learning, qui comprend les bibliothèques de Deep Learning les plus courantes comme TensorFlow, PyTorch et Keras. Il offre également une prise en charge intégrée des GPU préconfigurés, notamment des pilotes et des bibliothèques de prise en charge.

Databricks Runtime ML inclut également toutes les fonctionnalités de l’espace de travail Azure Databricks, telles que la création et la gestion de clusters, la gestion de bibliothèques et d’environnements, la gestion de code avec les dossiers Databricks Git, la prise en charge de l’automatisation, y compris les tâches Databricks et les API, ainsi que le MLflow intégré pour le suivi du développement de modèles et le déploiement et la mise à disposition de modèles.

Gestion des ressources et de l’environnement

Azure Databricks vous aide à personnaliser votre environnement d’apprentissage profond et à assurer la cohérence de l’environnement entre les utilisateurs.

Personnalisation de l'environnement de développement

Avec Databricks Runtime, vous pouvez personnaliser votre environnement de développement au niveau du bloc-notes, du cluster et du travail.

Utiliser des stratégies de cluster

Vous pouvez créer des stratégies de cluster pour guider les scientifiques de données vers les bons choix, par exemple l’utilisation d’un cluster à nœud unique pour le développement et l’utilisation d’un cluster de mise à l’échelle automatique pour les travaux de grande taille.

Envisager des GPU A100 pour les charges de travail Deep Learning

Les GPU A100 constituent un choix efficace pour de nombreuses tâches de Deep Learning, telles que l’entraînement et le réglage de modèles de langage volumineux, le traitement du langage naturel, la détection et la classification d’objets et les moteurs de recommandation.

  • Databricks prend en charge les GPU A100 sur tous les clouds. Pour obtenir la liste complète des types de GPU pris en charge, consultez Types d’instances pris en charge.
  • Les GPU A100 ont généralement une disponibilité limitée. Contactez votre fournisseur de cloud pour l’allocation des ressources, ou envisagez de réserver la capacité à l’avance.

Meilleures pratiques pour le chargement des données

Le stockage de données Cloud n’est généralement pas optimisé pour les e/s, ce qui peut être un défi pour les modèles d’apprentissage profond qui requièrent des jeux de données volumineux. Databricks Runtime ML comprend Delta Lake et Petastorm pour optimiser le débit des données pour les applications d’apprentissage approfondi.

Databricks recommande l’utilisation de tables Delta Lake pour le stockage des données. Delta Lake simplifie l’ETL et vous permet d’accéder efficacement aux données. En particulier pour les images, Delta Lake permet d’optimiser l’ingestion pour la formation et l’inférence. La solution de référence pour les applications d’image fournit un exemple d’optimisation de l’ETL pour les images à l’aide de Delta Lake.

Petastorm fournit des API qui vous permettent de préparer des données au format parquet pour une utilisation par TensorFlow, Keras ou PyTorch. L’API SparkConverter fournit une intégration de DataFrame Spark. Petastorm fournit également des partitionnement de données pour le traitement distribué. Pour plus d’informations, consultez Charger des données à l’aide de Petastorm.

Meilleures pratiques pour la formation des modèles d’apprentissage profond

Databricks recommande l’utilisation de Databricks Runtime pour Machine Learning et du suivi MLflow et de l’enregistrement de la journalisation pour toutes les formations de modèle.

Démarrer avec un cluster à nœud unique

Un cluster GPU à nœud unique (pilote uniquement) est généralement plus rapide et plus économique pour le développement de modèles d’apprentissage approfondi. Un nœud avec 4 GPU est susceptible d’être plus rapide pour la formation profonde, avec 4 nœuds Worker avec 1 GPU chacun. Cela est dû au fait que la formation distribuée entraîne une surcharge de communication réseau.

Un cluster à nœud unique est une bonne option lors du développement rapide et itératif et pour des modèles d’apprentissage sur des données de petite ou moyenne taille. Si votre jeu de données est suffisamment grand pour que l’apprentissage soit lent sur un seul ordinateur, envisagez de passer au GPU multiple et même au calcul distribué.

Utiliser TensorBoard et les métriques de cluster pour superviser le processus d’entraînement

TensorBoard est préinstallé dans Databricks Runtime ML. Vous pouvez l’utiliser dans un Notebook ou dans un onglet séparé. Pour plus d’informations, consultez TensorBoard.

Les métriques de cluster sont disponibles dans tous les runtimes Databricks. Vous pouvez examiner l’utilisation du réseau, du processeur et de la mémoire pour vérifier les goulots d’étranglement. Pour plus d’informations, consultez Métriques de cluster.

Optimiser les performances pour l’apprentissage profond

Vous pouvez et devez utiliser des techniques d’optimisation des performances d’apprentissage profond sur Databricks.

Arrêt précoce

L’arrêt précoce analyse la valeur d’une mesure calculée sur le jeu de validation et arrête l’apprentissage lorsque la mesure cesse de s’améliorer. Il s’agit d’une meilleure approche que la recherche d’un bon nombre d’époques à effectuer. Chaque bibliothèque d’apprentissage profond fournit une API native pour un arrêt précoce. par exemple, consultez les API de rappel EarlyStopping pour TensorFlow/keras et pour PyTorch Lightning. Pour obtenir un exemple de notebook, consultez exemple de notebook TensorFlow Keras.

Réglage de la taille des lots

Le réglage de la taille de lot permet d’optimiser l’utilisation du GPU. Si la taille du lot est trop petite, les calculs ne peuvent pas utiliser pleinement les capacités du GPU. Vous pouvez utiliser des métriques de cluster pour afficher les métriques GPU.

Ajustez la taille du lot conjointement avec le taux d’apprentissage. Une bonne règle empirique est, lorsque vous augmentez la taille du lot de n, augmentez le taux d’apprentissage par sqrt (n). Lors du réglage manuel, essayez de modifier la taille du lot en sélectionnant un facteur de 2 ou 0,5. Poursuivez ensuite le paramétrage pour optimiser les performances, soit manuellement, soit en testant une variété d’hyperparamètres à l’aide d’un outil automatisé comme Hyperopt.

Transfer learning

Avec l’apprentissage de transfert, vous commencez avec un modèle déjà formé et vous le modifiez en fonction des besoins de votre application. Le transfert d’apprentissage peut réduire considérablement le temps nécessaire à l’apprentissage et au réglage d’un nouveau modèle. Pour plus d’informations et un exemple, consultez Caractérisation pour l’apprentissage de transfert.

Passer à l’apprentissage distribué

Databricks Runtime ML inclut HorovodRunner, spark-tensorflow-distributor, TorchDistributor et Hyperopt pour faciliter le passage d’un seul nœud à un entraînement distribué.

HorovodRunner

Horovod est un projet open source qui met à l’échelle une formation Deep Learning sur plusieurs GPU ou un calcul distribué. HorovodRunner, créé par Databricks et inclus dans Databricks Runtime ML, est un wrapper Horovod qui fournit la compatibilité Spark. L’API vous permet de mettre à l’échelle du code à nœud unique avec des modifications minimes. HorovodRunner fonctionne avec TensorFlow, keras et PyTorch.

spark-tensorflow-distributor

spark-tensorflow-distributor est un package natif open source dans TensorFlow pour l’entraînement distribué avec TensorFlow sur des clusters Spark. Consultez le bloc-notes exemple.

TorchDistributor

TorchDistributor est un module open source dans PySpark qui facilite l’apprentissage distribué avec PyTorch sur des clusters Spark, ce qui vous permet de lancer des travaux d’entraînement PyTorch en tant que travaux Spark. Consultez Entraînement distribué avec TorchDistributor.

Hyperopt

Hyperopt fournit un paramétrage adaptatif des hyperparamètres pour l’apprentissage automatique. Avec la classe SparkTrials, vous pouvez paramétrer de manière itérative des paramètres pour les modèles d’apprentissage profond en parallèle sur un cluster.

Meilleures pratiques pour l’inférence

Cette section contient des conseils généraux sur l’utilisation de modèles pour l’inférence avec Azure Databricks.

  • Pour réduire les coûts, envisagez les processeurs et les GPU optimisés pour l’inférence tels que la série T4_v3 NC. Il n’existe aucune recommandation claire, car le meilleur choix dépend de la taille du modèle, des dimensions de données et d’autres variables.

  • Utilisez MLflow pour simplifier le déploiement et le service de modèle. MLflow peut consigner n’importe quel modèle d’apprentissage profond, y compris une logique personnalisée de prétraitement et de post-traitement. Les modèles dans Unity Catalog ou les modèles inscrits dans le Registre de modèles d’espace de travail peuvent être déployés pour l’inférence par lots, de diffusion en continu ou en ligne.

Service en ligne

La meilleure option pour le service de faible latence est le service en ligne derrière une API REST. Databricks fournit la mise en service de modèles pour l’inférence en ligne. Le service de modèles fournit une interface unifiée pour déployer, gouverner et interroger des modèles IA, et il prend en charge le service de :

  • Modèles personnalisés. Il s’agit de modèles Python empaquetés au format MLflow. Il peut s’agir notamment de modèles scikit-learn, XGBoost, PyTorch et Hugging Face Transformer.
  • Modèles ouverts de pointe mis à la disposition par les API Foundation Model. Ces modèles sont des architectures de modèle de base curées qui prennent en charge l’inférence optimisée. Par exemple, les modèles de base comme Llama-2-70B-chat, BGE-Large et Mistral-7B sont disponibles pour une utilisation immédiate avec une tarification de paiement par jeton. Pour les charges de travail qui nécessitent des garanties de performances et des variantes de modèle optimisées, vous pouvez les déployer avec un débit provisionné.
  • Modèles externes. Il s’agit de modèles hébergés en dehors de Databricks. Par exemple, des modèles de base comme GPT-4 d’OpenAI, Claude d’Anthropic et d’autres. Les points de terminaison servant ces modèles peuvent être gouvernés de manière centralisée, et les clients peuvent établir pour ceux-ci des limites de débit et des contrôles d’accès.

MLflow fournit aussi des API pour le déploiement sur différents services managés pour l’inférence en ligne ainsi que des API pour la création de conteneurs Docker pour les solutions de service personnalisées.

D’autres services managés courants pour l’inférence en ligne sont les suivants :

Inférence de traitement par lots et streaming

Les scores batch et streaming prennent en charge la notation à haut débit et à faible coût à des latences inférieures à quelques minutes. Pour plus d’informations, consultez Utiliser MLflow pour l’inférence de modèle.

  • Si vous envisagez d’accéder à des données à des fins d’inférence à plusieurs reprises, pensez à créer un travail de prétraitement pour traiter les données dans une table Lake avant d’exécuter la tâche d’inférence. De cette façon, le coût de la réception et de la préparation des données est réparti sur plusieurs lectures des données. La séparation du prétraitement de l’inférence vous permet également de sélectionner un matériel différent pour chaque travail afin d’optimiser les coûts et les performances. Par exemple, vous pouvez utiliser des processeurs pour ETL et des GPU pour l’inférence.
  • Utilisez les fonctions définies par l’utilisateur pandas Spark pour mettre à l’échelle le traitement par lots et la diffusion en continu dans un cluster.