Calcul avec GPU
Remarque
Certains types d’instances avec GPU sont en version bêta et marqués comme tels dans la liste déroulante lorsque vous sélectionnez les types de pilotes et de Workers lors de la création du calcul.
Vue d’ensemble
Azure Databricks prend en charge le calcul accéléré avec des processeurs graphiques (GPU). Cet article explique comment créer un calcul à l’aide d’instances avec GPU et décrit les pilotes et bibliothèques GPU installés sur ces instances.
Pour en savoir plus concernant le Deep Learning sur un calcul avec GPU, consultez Deep Learning.
Créer un calcul GPU
La création d’un calcul GPU est similaire à la création de tout calcul. Gardez à l’esprit les points suivants :
- La version de Databricks Runtime doit être une version compatible avec GPU, par exemple Runtime 13.3 LTS ML (GPU, Scala 2.12.15, Spark 3.4.1).
- Le Type de Worker et le Type de pilote doivent être des types d’instances GPU.
Types d’instances pris en charge
Azure Databricks prend en charge les types d’instances suivants :
- Série de types d’instances NC : Standard_NC12, Standard_NC24
- Série de types d’instances NC v3 : Standard_NC6s_v3, Standard_NC12s_v3, Standard_NC24s_v3
- Série de types d’instances NC T4 v3 : Standard_NC4as_T4_v3, Standard_NC8as_T4_v3, Standard_NC16as_T4_v3, Standard_NC64as_T4_v3
- Séries de types d’instance NC A100 v4 : Standard_NC24ads_A100_v4, Standard_NC48ads_A100_v4, Standard_NC96ads_A100_v4
- Série de types d’instances NCads H100 v5 : Standard_NC40ads_H100_v5, Standard_NC80adis_H100_v5
- Série de types d’instances ND A100 v4 : Standard_ND96asr_v4
- Séries de types d’instance NV A10 v5 : Standard_NV36ads_A10_v5, Standard_NV36adms_A10_v5, Standard_NV72ads_A10_v5
Pour obtenir une liste à jour des types d’instances GPU pris en charge et de leurs régions de disponibilité, consultez Tarifs Azure Databricks. Votre déploiement d’Azure Databricks doit résider dans une région prise en charge pour lancer un calcul avec GPU.
Planification de GPU
La planification de GPU distribue efficacement les tâches Spark sur un grand nombre de GPU.
Databricks Runtime prend en charge la planification compatible GPU à partir d’Apache Spark 3.0. Azure Databricks le préconfigure sur un calcul GPU.
Remarque
La planification GPU n’est pas activée sur un calcul mononœud.
La planification de GPU définie par l’utilisateur est disponible uniquement pour Databricks Runtime 7.1 et versions ultérieures. Pour les versions antérieures de Databricks Runtime, Databricks configure automatiquement le calcul GPU afin qu’il existe au maximum une tâche en cours d’exécution par nœud. Ainsi, la tâche peut utiliser toutes les GPU sur le nœud sans entrer en conflit avec d’autres tâches.
Planification de GPU pour l’IA et le ML
spark.task.resource.gpu.amount
est la seule configuration Spark relative à la planification compatible GPU que vous devrez peut-être configurer.
La configuration par défaut utilise un GPU par tâche, ce qui est une bonne base de référence pour des charges de travail d’inférence distribuées et un apprentissage distribué si vous utilisez tous les nœuds GPU.
Pour réduire la surcharge de communication pendant la formation distribuée, Databricks recommande de définir spark.task.resource.gpu.amount
sur le nombre de GPU par nœud Worker dans la configuration Spark du calcul. Cela crée une seule tâche Spark pour chaque Worker Spark et affecte toutes les GPU de ce nœud Worker à la même tâche.
Pour augmenter la parallélisation pour l’inférence de Deep Learning distribué, vous pouvez définir spark.task.resource.gpu.amount
sur des valeurs fractionnaires telles que 1/2, 1/3, 1/4, etc. 1/N. Cela crée plus de tâches Spark qu’il existe de GPU, ce qui permet à des tâches plus simultanées de gérer les demandes d’inférence en parallèle. Par exemple, si vous définissez spark.task.resource.gpu.amount
sur 0.5
, 0.33
ou 0.25
, les GPU disponibles sont répartis entre deux, trois ou quatre fois le nombre de tâches.
Indices GPU
Pour les tâches PySpark, Azure Databricks remappe automatiquement les GPU affectés aux index de base zéro. Pour la configuration par défaut qui utilise un GPU par tâche, vous pouvez utiliser le GPU par défaut sans vérifier le GPU affecté à la tâche.
Si vous définissez plusieurs GPU par tâche, par exemple 4, les index des GPU affectés sont toujours 0, 1, 2 et 3. Si vous avez besoin des index physiques des GPU attribués, vous pouvez les récupérer à partir de la variable d’environnement CUDA_VISIBLE_DEVICES
.
Si vous utilisez Scala, vous pouvez récupérer les index des GPU affectés à la tâche à partir de TaskContext.resources().get("gpu")
.
Pilote GPU NVIDIA, CUDA et cuDNN
Azure Databricks installe le pilote et les bibliothèques NVIDIA nécessaires à l’utilisation des GPU sur le pilote et les instances Worker de Spark :
- CUDA Toolkit, installé sous
/usr/local/cuda
. - cuDNN : bibliothèque de réseau neuronal profond NVIDIA CUDA.
- NCCL : bibliothèque de communications collectives NVIDIA.
La version du pilote NVIDIA incluse est 535.54.03. Elle prend en charge CUDA 11.0. Pour la série de type d’instance NV A10 v5, la version du pilote NVIDIA incluse est 535.154.05
.
Pour les versions des bibliothèques incluses, consultez les notes de publication correspondant à la version de Databricks Runtime que vous utilisez.
Notes
Ce logiciel contient le code source fourni par NVIDIA Corporation. Plus précisément, pour prendre en charge les GPU, Azure Databricks comprend du code extrait d’exemples CUDA.
Contrat de Licence Utilisateur Final (CLUF) NVIDIA
Lorsque vous sélectionnez une « version de Databricks Runtime » avec GPU dans Azure Databricks, vous acceptez implicitement les conditions générales décrites dans le CLUF NVIDIA en ce qui concerne les bibliothèques CUDA, cuDNN et Tesla, ainsi que le Contrat de licence utilisateur final NVIDIA (avec supplément NCCL) pour la bibliothèque NCCL.
Databricks Container Services sur un calcul GPU
Important
Cette fonctionnalité est disponible en préversion publique.
Vous pouvez utiliser Databricks Container Services sur un calcul avec des GPU pour créer des environnements de Deep Learning portables avec des bibliothèques personnalisées. Pour obtenir des instructions, consultez Personnaliser des conteneurs avec Databricks Container Services.
Pour créer des images personnalisées pour un calcul GPU, vous devez sélectionner une version du runtime standard au lieu de Databricks Runtime ML pour GPU. Lorsque vous sélectionnez Utiliser votre propre conteneur Docker, vous pouvez choisir un calcul GPU avec une version du runtime standard. Les images personnalisées pour GPU sont basées sur les conteneurs CUDA officiels, ce qui est différent de Databricks Runtime ML pour GPU.
Lorsque vous créez des images personnalisées pour le calcul GPU, vous ne pouvez pas modifier la version du pilote NVIDIA, car celle-ci doit correspondre à la version du pilote sur la machine hôte.
Le databricksruntime
Docker Hub contient des exemples d’images de base avec une fonctionnalité de GPU. Les fichiers Dockerfiles utilisés pour générer ces images se trouvent dans le dépôt GitHub d’exemples de conteneurs, qui contient également des détails sur les exemples d’images à fournir et sur la manière de les personnaliser.