La bibliothèque de chargement de données NVIDIA (DALI) est une bibliothèque accélérée par GPU pour le chargement et le prétraitement des données afin d'accélérer les applications d'apprentissage en profondeur. Il fournit une collection de blocs de construction hautement optimisés pour le chargement et le traitement des données image, vidéo et audio. Il peut être utilisé comme remplacement portable pour les chargeurs de données et les itérateurs de données intégrés dans les frameworks d'apprentissage en profondeur populaires.
Les applications d'apprentissage profond nécessitent des pipelines de traitement de données complexes à plusieurs étapes qui incluent le chargement, le décodage, le recadrage, le redimensionnement et de nombreuses autres augmentations. Ces pipelines de traitement de données, qui sont actuellement exécutés sur le CPU, sont devenus un goulot d'étranglement, limitant les performances et l'évolutivité de la formation et de l'inférence.
DALI résout le problème du goulot d'étranglement du processeur en déchargeant le prétraitement des données sur le GPU. De plus, DALI s'appuie sur son propre moteur d'exécution, conçu pour maximiser le débit du pipeline d'entrée. Les fonctionnalités telles que la prélecture, l'exécution parallèle et le traitement par lots sont gérées de manière transparente pour l'utilisateur.
De plus, les cadres d'apprentissage profond disposent de plusieurs implémentations de prétraitement des données, ce qui entraîne des défis tels que la portabilité des flux de travail de formation et d'inférence, ainsi que la maintenabilité du code. Les pipelines de traitement de données implémentés à l'aide de DALI sont portables car ils peuvent facilement être reciblés vers TensorFlow, PyTorch et PaddlePaddle.
DALI en action :
from nvidia.dali.pipeline import pipeline_defimport nvidia.dali.types as typesimport nvidia.dali.fn as fnfrom nvidia.dali.plugin.pytorch import DALIGenericIteratorimport os# Pour exécuter avec des données différentes, consultez la documentation de nvidia.dali.fn.readers. file# pointe vers https://github.com/NVIDIA/DALI_extradata_root_dir = os.environ['DALI_EXTRA_PATH']images_dir = os.path.join(data_root_dir, 'db', 'single', 'jpeg')def loss_func(pred , y):passdef model(x):passdef forward(loss, model):pass@pipeline_def(num_threads=4, device_id=0)def get_dali_pipeline():images, labels = fn.readers.file(file_root=images_dir, random_shuffle =True, name="Reader")# décode les données sur le GPUimages = fn.decoders.image_random_crop(images, device="mixed", output_type=types.RGB)# le reste du traitement se produit également sur le GPUimages = fn. resize(images, resize_x=256, resize_y=256)images = fn.crop_mirror_normalize(images,crop_h=224,crop_w=224,mean=[0,485 * 255, 0,456 * 255, 0,406 * 255],std=[0,229 * 255] , 0,224 * 255, 0,225 * 255],mirror=fn.random.coin_flip())retourne les images, labelstrain_data = DALIGenericIterator( [get_dali_pipeline(batch_size=16)], ['data', 'label'],reader_name='Reader')pour i, données dans enumerate(train_data):x, y = data[0]['data'], data[0]['label']pred = modèle (x) perte = perte_func (pred, y) en arrière (perte, modèle)
API Python de style fonctionnel facile à utiliser.
Prise en charge de plusieurs formats de données : LMDB, RecordIO, TFRecord, COCO, JPEG, JPEG 2000, WAV, FLAC, OGG, H.264, VP9 et HEVC.
Portable dans les frameworks d'apprentissage profond populaires : TensorFlow, PyTorch, PaddlePaddle, JAX.
Prend en charge l'exécution du CPU et du GPU.
Évolutif sur plusieurs GPU.
Les graphiques flexibles permettent aux développeurs de créer des pipelines personnalisés.
Extensible pour les besoins spécifiques de l'utilisateur avec des opérateurs personnalisés.
Accélère les charges de travail de classification d'images (ResNet-50), de détection d'objets (SSD) ainsi que les modèles ASR (Jasper, RNN-T).
Permet un chemin de données direct entre le stockage et la mémoire GPU avec GPUDirect Storage.
Intégration facile avec le serveur d'inférence NVIDIA Triton avec le backend DALI TRITON.
Source ouverte.
Lors des concours de vision par ordinateur Kaggle : « DALI est l'une des meilleures choses que j'ai apprises dans ce concours »
Lightning Pose - modèle de recherche d'estimation de pose de pointe
Pour améliorer l'utilisation des ressources dans l'infrastructure informatique avancée
MLPerf - la norme industrielle pour l'analyse comparative du matériel et des logiciels de calcul et d'apprentissage profond
"Nous avons optimisé les principaux modèles d'eBay avec le framework DALI"
Le numéro suivant représente un aperçu de haut niveau de notre plan 2024. Vous devez être conscient que cette feuille de route peut changer à tout moment et que l'ordre de ses éléments ne reflète aucun type de priorité.
Nous vous encourageons fortement à commenter notre feuille de route et à nous faire part de vos commentaires sur le problème GitHub mentionné.
Pour installer la dernière version DALI pour la dernière version de CUDA (12.x) :
pip installer nvidia-dali-cuda120 # ou pip install --extra-index-url https://pypi.nvidia.com --upgrade nvidia-dali-cuda120
DALI nécessite un pilote NVIDIA prenant en charge la version CUDA appropriée. Dans le cas de DALI basé sur CUDA 12, l'installation de CUDA Toolkit est nécessaire.
DALI est préinstallé dans les conteneurs TensorFlow, PyTorch et PaddlePaddle sur NVIDIA GPU Cloud.
Pour d'autres chemins d'installation (plugin TensorFlow, ancienne version de CUDA, versions nocturnes et hebdomadaires, etc.) et les exigences spécifiques, veuillez vous référer au Guide d'installation.
Pour construire DALI à partir des sources, veuillez vous référer au Guide de compilation.
Une introduction à DALI est disponible sur la page Mise en route.
Des exemples plus avancés peuvent être trouvés dans la page Exemples et didacticiels.
Pour une version interactive (notebook Jupyter) des exemples, rendez-vous dans le répertoire docs/examples.
Remarque : Sélectionnez la documentation de la dernière version ou la documentation de la version nocturne, qui reste synchronisée avec la branche principale, en fonction de votre version.
Conférence sur la technologie GPU 2024 ; Optimisation du modèle d'inférence servant aux performances les plus élevées sur eBay ; Yiheng Wang : événement
Conférence sur la technologie GPU 2023 ; Développeur : accélération des flux de travail d'entreprise avec Triton Server et DALI ; Brandon Tuttle : événement.
Conférence sur la technologie GPU 2023 ; Flux de travail géospatiaux de bout en bout accélérés par GPU ; Kevin Green : événement.
Conférence sur la technologie GPU 2022 ; NVIDIA DALI efficace : accélération des applications réelles de Deep Learning ; Rafał Banaś : événement.
Conférence sur la technologie GPU 2022 ; Introduction à NVIDIA DALI : prétraitement des données accéléré par GPU ; Joaquín Anton Guirao : événement.
Conférence sur la technologie GPU 2021 ; NVIDIA DALI : Prétraitement des données alimenté par GPU par Krzysztof Łęcki et Michał Szołucha : événement.
Conférence sur la technologie GPU 2020 ; Prétraitement rapide des données avec la bibliothèque de chargement de données NVIDIA (DALI) ; Albert Wolant, Joaquín Anton Guirao : enregistrement.
Conférence sur la technologie GPU 2019 ; Prétraitement rapide des données IA avec DALI ; Janusz Lisiecki, Michał Zientkiewicz : diapositives, enregistrement.
Conférence sur la technologie GPU 2019 ; Intégration de DALI avec TensorRT sur Xavier ; Josh Park et Anurag Dixit : diapositives, enregistrement.
Conférence sur la technologie GPU 2018 ; Pipeline de données rapide pour la formation en deep learning , T. Gale, S. Layton et P. Trędak : diapositives, enregistrement.
Page développeur.
Articles de blog.
Nous apprécions les contributions à DALI. Pour contribuer à DALI et faire des pull request, suivez les directives décrites dans le document de contribution.
Si vous recherchez une tâche bonne pour commencer, veuillez en cocher une sur l'étiquette de bienvenue de contribution externe.
Nous apprécions les commentaires, les questions ou les rapports de bogues. Lorsque vous avez besoin d'aide avec le code, suivez le processus décrit dans le document Stack Overflow. Assurez-vous que les exemples publiés sont :
minimal : utilisez le moins de code possible qui produit toujours le même problème.
complete : Fournissez toutes les pièces nécessaires pour reproduire le problème. Vérifiez si vous pouvez supprimer la dépendance externe tout en affichant le problème. Moins nous passons de temps à reproduire les problèmes, plus nous pouvons consacrer de temps aux correctifs.
vérifiable : testez le code que vous êtes sur le point de fournir, pour vous assurer qu'il reproduit le problème. Supprimez tous les autres problèmes qui ne sont pas liés à votre demande.
DALI a été construit à l'origine avec les contributions majeures de Trevor Gale, Przemek Tredak, Simon Layton, Andrei Ivanov et Serge Panev.