Die NVIDIA Data Loading Library (DALI) ist eine GPU-beschleunigte Bibliothek zum Laden und Vorverarbeiten von Daten, um Deep-Learning-Anwendungen zu beschleunigen. Es bietet eine Sammlung hochoptimierter Bausteine zum Laden und Verarbeiten von Bild-, Video- und Audiodaten. Es kann als tragbarer Ersatz für integrierte Datenlader und Dateniteratoren in gängigen Deep-Learning-Frameworks verwendet werden.
Deep-Learning-Anwendungen erfordern komplexe, mehrstufige Datenverarbeitungspipelines, die das Laden, Dekodieren, Zuschneiden, Ändern der Größe und viele andere Erweiterungen umfassen. Diese Datenverarbeitungspipelines, die derzeit auf der CPU ausgeführt werden, sind zu einem Engpass geworden, der die Leistung und Skalierbarkeit von Training und Inferenz einschränkt.
DALI löst das Problem des CPU-Engpasses, indem es die Datenvorverarbeitung auf die GPU verlagert. Darüber hinaus ist DALI auf eine eigene Ausführungs-Engine angewiesen, die darauf ausgelegt ist, den Durchsatz der Eingabepipeline zu maximieren. Funktionen wie Prefetching, parallele Ausführung und Stapelverarbeitung werden für den Benutzer transparent gehandhabt.
Darüber hinaus verfügen die Deep-Learning-Frameworks über mehrere Datenvorverarbeitungsimplementierungen, was zu Herausforderungen wie der Portabilität von Trainings- und Inferenz-Workflows und der Wartbarkeit des Codes führt. Mit DALI implementierte Datenverarbeitungspipelines sind portierbar, da sie problemlos auf TensorFlow, PyTorch und PaddlePaddle umgestellt werden können.
DALI im Einsatz:
from nvidia.dali.pipeline importpipeline_defimport nvidia.dali.types astypesimport nvidia.dali.fn as fnfrom nvidia.dali.plugin.pytorch import DALIGenericIteratorimport os# Informationen zur Ausführung mit anderen Daten finden Sie in der Dokumentation von nvidia.dali.fn.readers. file# zeigt auf 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-Modell(x):passdef rückwärts(Verlust, 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")# Daten auf den GPU-Bildern dekodieren = fn.decoders.image_random_crop(images, device="mixed", output_type=types.RGB)# der Rest Die Verarbeitung erfolgt auch auf der 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())return images, labelstrain_data = DALIGenericIterator( [get_dali_pipeline(batch_size=16)], ['data', 'label'],reader_name='Reader')for i, data in enumerate(train_data):x, y = data[0]['data'], data[0]['label']pred = model(x)loss = loss_func(pred, y)backward(loss, model)
Benutzerfreundliche Python-API im funktionalen Stil.
Unterstützung mehrerer Datenformate – LMDB, RecordIO, TFRecord, COCO, JPEG, JPEG 2000, WAV, FLAC, OGG, H.264, VP9 und HEVC.
Portierbar auf gängige Deep-Learning-Frameworks: TensorFlow, PyTorch, PaddlePaddle, JAX.
Unterstützt CPU- und GPU-Ausführung.
Skalierbar über mehrere GPUs.
Mithilfe flexibler Diagramme können Entwickler benutzerdefinierte Pipelines erstellen.
Erweiterbar für benutzerspezifische Anforderungen mit benutzerdefinierten Operatoren.
Beschleunigt Bildklassifizierungs- (ResNet-50), Objekterkennungs- (SSD) Workloads sowie ASR-Modelle (Jasper, RNN-T).
Ermöglicht mit GPUDirect Storage einen direkten Datenpfad zwischen Speicher und GPU-Speicher.
Einfache Integration mit NVIDIA Triton Inference Server mit DALI TRITON Backend.
Open Source.
Bei Kaggle-Computer-Vision-Wettbewerben: „DALI ist eines der besten Dinge, die ich in diesem Wettbewerb gelernt habe“
Lightning Pose – hochmodernes Forschungsmodell zur Posenschätzung
Um die Ressourcennutzung in der Advanced Computing Infrastructure zu verbessern
MLPerf – der Industriestandard für das Benchmarking von Computer- und Deep-Learning-Hardware und -Software
„Wir haben die wichtigsten Modelle innerhalb von eBay mit dem DALI-Framework optimiert.“
Die folgende Ausgabe gibt einen allgemeinen Überblick über unseren Plan für 2024. Sie sollten sich darüber im Klaren sein, dass sich diese Roadmap jederzeit ändern kann und die Reihenfolge ihrer Elemente keinerlei Priorität widerspiegelt.
Wir empfehlen Ihnen dringend, unsere Roadmap zu kommentieren und uns Feedback zum erwähnten GitHub-Problem zu geben.
So installieren Sie die neueste DALI-Version für die neueste CUDA-Version (12.x):
pip install nvidia-dali-cuda120 # oder pip install --extra-index-url https://pypi.nvidia.com --upgrade nvidia-dali-cuda120
DALI erfordert einen NVIDIA-Treiber, der die entsprechende CUDA-Version unterstützt. Im Falle von DALI basierend auf CUDA 12 ist die Installation des CUDA Toolkits erforderlich.
DALI ist in den TensorFlow-, PyTorch- und PaddlePaddle-Containern in der NVIDIA GPU Cloud vorinstalliert.
Weitere Installationspfade (TensorFlow-Plugin, ältere CUDA-Version, nächtliche und wöchentliche Builds usw.) und spezifische Anforderungen finden Sie im Installationshandbuch.
Informationen zum Erstellen von DALI aus dem Quellcode finden Sie im Kompilierungshandbuch.
Eine Einführung in DALI finden Sie auf der Seite „Erste Schritte“.
Weitere Beispiele für Fortgeschrittene finden Sie auf der Seite Beispiele und Tutorials.
Eine interaktive Version (Jupyter-Notebook) der Beispiele finden Sie im Verzeichnis docs/examples.
Hinweis: Wählen Sie je nach Version die neueste Release-Dokumentation oder die Nightly Release-Dokumentation aus, die mit dem Hauptzweig synchron bleibt.
GPU-Technologiekonferenz 2024; Optimierung des Inferenzmodells für höchste Leistung bei eBay ; Yiheng Wang: Ereignis
GPU-Technologiekonferenz 2023; Entwickler-Breakout: Beschleunigung von Unternehmensabläufen mit Triton Server und DALI ; Brandon Tuttle: Veranstaltung.
GPU-Technologiekonferenz 2023; GPU-beschleunigende End-to-End-Geodaten-Workflows ; Kevin Green: Veranstaltung.
GPU-Technologiekonferenz 2022; Effektives NVIDIA DALI: Beschleunigung realer Deep-Learning-Anwendungen ; Rafał Banaś: Veranstaltung.
GPU-Technologiekonferenz 2022; Einführung in NVIDIA DALI: GPU-beschleunigte Datenvorverarbeitung ; Joaquin Anton Guirao: Ereignis.
GPU-Technologiekonferenz 2021; NVIDIA DALI: GPU-gestützte Datenvorverarbeitung von Krzysztof Łęcki und Michał Szołucha: Veranstaltung.
GPU-Technologiekonferenz 2020; Schnelle Datenvorverarbeitung mit NVIDIA Data Loading Library (DALI) ; Albert Wolant, Joaquin Anton Guirao: Aufnahme.
GPU-Technologiekonferenz 2019; Schnelle KI-Datenvorverarbeitung mit DALI ; Janusz Lisiecki, Michał Zientkiewicz: Dias, Aufnahme.
GPU-Technologiekonferenz 2019; Integration von DALI mit TensorRT auf Xavier ; Josh Park und Anurag Dixit: Dias, Aufnahme.
GPU-Technologiekonferenz 2018; Schnelle Datenpipeline für Deep-Learning-Training , T. Gale, S. Layton und P. Trędak: Folien, Aufzeichnung.
Entwicklerseite.
Blogbeiträge.
Wir freuen uns über Beiträge zu DALI. Um zu DALI beizutragen und Pull-Anfragen zu stellen, befolgen Sie die im Beitragsdokument aufgeführten Richtlinien.
Wenn Sie auf der Suche nach einer Aufgabe sind, die sich gut für den Anfang eignet, sehen Sie sich bitte die Willkommensliste für externe Beiträge an.
Wir freuen uns über Feedback, Fragen oder Fehlerberichte. Wenn Sie Hilfe beim Code benötigen, befolgen Sie den im Stack Overflow-Dokument beschriebenen Prozess. Stellen Sie sicher, dass die veröffentlichten Beispiele folgende sind:
minimal : Verwenden Sie so wenig Code wie möglich, der immer noch das gleiche Problem verursacht.
Vollständig : Stellen Sie alle Teile bereit, die zur Reproduktion des Problems erforderlich sind. Überprüfen Sie, ob Sie die externe Abhängigkeit beseitigen und das Problem weiterhin anzeigen können. Je weniger Zeit wir für die Reproduktion der Probleme aufwenden, desto mehr Zeit können wir für die Fehlerbehebung aufwenden.
überprüfbar : Testen Sie den Code, den Sie bereitstellen möchten, um sicherzustellen, dass er das Problem reproduziert. Beseitigen Sie alle anderen Probleme, die nicht mit Ihrer Anfrage zusammenhängen.
DALI wurde ursprünglich mit wichtigen Beiträgen von Trevor Gale, Przemek Tredak, Simon Layton, Andrei Ivanov und Serge Panev gebaut.