La biblioteca de carga de datos de NVIDIA (DALI) es una biblioteca acelerada por GPU para la carga y el preprocesamiento de datos para acelerar las aplicaciones de aprendizaje profundo. Proporciona una colección de bloques de construcción altamente optimizados para cargar y procesar datos de imágenes, video y audio. Se puede utilizar como un reemplazo portátil para cargadores de datos e iteradores de datos integrados en marcos de aprendizaje profundo populares.
Las aplicaciones de aprendizaje profundo requieren procesos de procesamiento de datos complejos y de varias etapas que incluyen carga, decodificación, recorte, cambio de tamaño y muchos otros aumentos. Estos canales de procesamiento de datos, que actualmente se ejecutan en la CPU, se han convertido en un cuello de botella que limita el rendimiento y la escalabilidad del entrenamiento y la inferencia.
DALI soluciona el problema del cuello de botella de la CPU descargando el preprocesamiento de datos a la GPU. Además, DALI se basa en su propio motor de ejecución, creado para maximizar el rendimiento del canal de entrada. Funciones como la captación previa, la ejecución paralela y el procesamiento por lotes se manejan de forma transparente para el usuario.
Además, los marcos de aprendizaje profundo tienen múltiples implementaciones de preprocesamiento de datos, lo que genera desafíos como la portabilidad de los flujos de trabajo de capacitación e inferencia y la capacidad de mantenimiento del código. Las canalizaciones de procesamiento de datos implementadas mediante DALI son portátiles porque pueden redirigirse fácilmente a TensorFlow, PyTorch y PaddlePaddle.
DALI en acción:
from nvidia.dali.pipeline import pipeline_defimport nvidia.dali.types as filesimport nvidia.dali.fn as fnfrom nvidia.dali.plugin.pytorch import DALIGenericIteratorimport os# Para ejecutar con datos diferentes, consulte la documentación de nvidia.dali.fn.readers. file# apunta a 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 modelo(x):passdef hacia atrás(pérdida, modelo):pass@pipeline_def(num_threads=4, device_id=0)def get_dali_pipeline():imágenes, etiquetas = fn.readers.file(file_root=images_dir, random_shuffle =Verdadero, name="Reader")# decodifica datos en la GPUimages = fn.decoders.image_random_crop(images, device="mixed", output_type=types.RGB)# el resto del procesamiento también ocurre en la GPUimages = fn. cambiar el tamaño (imágenes, resize_x = 256, resize_y = 256) imágenes = fn.crop_mirror_normalize (imágenes, crop_h = 224, crop_w = 224, media = [0.485 * 255, 0.456 * 255, 0.406 * 255], std = [0.229 * 255 , 0.224 * 255, 0.225 * 255],mirror=fn.random.coin_flip())devuelve imágenes, etiquetastrain_data = DALIGenericIterator( [get_dali_pipeline(batch_size=16)], ['datos', 'etiqueta'],reader_name='Lector')para i, datos en enumerar(train_data):x, y = datos[0]['datos'], datos[0]['label']pred = modelo(x)pérdida = pérdida_func(pred, y)hacia atrás(pérdida, modelo)
API Python de estilo funcional y fácil de usar.
Admite múltiples formatos de datos: LMDB, RecordIO, TFRecord, COCO, JPEG, JPEG 2000, WAV, FLAC, OGG, H.264, VP9 y HEVC.
Portátil en marcos de aprendizaje profundo populares: TensorFlow, PyTorch, PaddlePaddle, JAX.
Admite ejecución de CPU y GPU.
Escalable a través de múltiples GPU.
Los gráficos flexibles permiten a los desarrolladores crear canales personalizados.
Ampliable para necesidades específicas del usuario con operadores personalizados.
Acelera las cargas de trabajo de clasificación de imágenes (ResNet-50), detección de objetos (SSD), así como modelos ASR (Jasper, RNN-T).
Permite una ruta de datos directa entre el almacenamiento y la memoria de la GPU con GPUDirect Storage.
Fácil integración con NVIDIA Triton Inference Server con DALI TRITON Backend.
Código abierto.
Durante las competiciones de visión por ordenador de Kaggle: "DALI es una de las mejores cosas que he aprendido en esta competición"
Lightning Pose: modelo de investigación de estimación de pose de última generación
Mejorar la utilización de recursos en la infraestructura informática avanzada.
MLPerf: el estándar de la industria para la evaluación comparativa de hardware y software de computación y aprendizaje profundo
"Optimizamos los principales modelos dentro de eBay con el marco DALI"
El siguiente número representa una descripción general de alto nivel de nuestro plan 2024. Debes tener en cuenta que esta hoja de ruta puede cambiar en cualquier momento y el orden de sus elementos no refleja ningún tipo de prioridad.
Le recomendamos encarecidamente que comente nuestra hoja de ruta y nos proporcione comentarios sobre el problema de GitHub mencionado.
Para instalar la última versión de DALI para la última versión de CUDA (12.x):
instalación de pip nvidia-dali-cuda120 # o instalación de pip --extra-index-url https://pypi.nvidia.com --actualización nvidia-dali-cuda120
DALI requiere un controlador NVIDIA que admita la versión CUDA adecuada. En el caso de DALI basado en CUDA 12, requiere la instalación de CUDA Toolkit.
DALI viene preinstalado en los contenedores TensorFlow, PyTorch y PaddlePaddle en NVIDIA GPU Cloud.
Para otras rutas de instalación (complemento TensorFlow, versión anterior de CUDA, compilaciones nocturnas y semanales, etc.) y requisitos específicos, consulte la Guía de instalación.
Para compilar DALI desde el código fuente, consulte la Guía de compilación.
Puede encontrar una introducción a DALI en la página de introducción.
Se pueden encontrar ejemplos más avanzados en la página Ejemplos y tutoriales.
Para obtener una versión interactiva (cuaderno Jupyter) de los ejemplos, vaya al directorio docs/examples.
Nota: Seleccione la documentación de la última versión o la documentación de la versión nocturna, que permanece sincronizada con la rama principal, según su versión.
Conferencia de tecnología GPU 2024; Optimización del modelo de inferencia para lograr el máximo rendimiento en eBay ; Yiheng Wang: evento
Conferencia de tecnología GPU 2023; Breakout del desarrollador: Aceleración de los flujos de trabajo empresariales con Triton Server y DALI ; Brandon Tuttle: evento.
Conferencia de tecnología GPU 2023; Flujos de trabajo geoespaciales de extremo a extremo que aceleran la GPU ; Kevin Green: evento.
Conferencia de tecnología GPU 2022; NVIDIA DALI eficaz: aceleración de aplicaciones de aprendizaje profundo de la vida real ; Rafał Banaś: evento.
Conferencia de tecnología GPU 2022; Introducción a NVIDIA DALI: preprocesamiento de datos acelerado por GPU ; Joaquín Antón Guirao: evento.
Conferencia de tecnología GPU 2021; NVIDIA DALI: Preprocesamiento de datos impulsado por GPU por Krzysztof Łęcki y Michał Szołucha: evento.
Conferencia de tecnología GPU 2020; Preprocesamiento rápido de datos con la biblioteca de carga de datos NVIDIA (DALI) ; Albert Wolant, Joaquín Antón Guirao: grabación.
Conferencia de tecnología GPU 2019; Preprocesamiento rápido de datos de IA con DALI ; Janusz Lisiecki, Michał Zientkiewicz: diapositivas, grabación.
Conferencia de tecnología GPU 2019; Integración de DALI con TensorRT en Xavier ; Josh Park y Anurag Dixit: diapositivas, grabación.
Conferencia de tecnología GPU 2018; Canalización rápida de datos para la formación en aprendizaje profundo , T. Gale, S. Layton y P. Trędak: diapositivas, grabación.
Página de desarrollador.
Publicaciones de blogs.
Damos la bienvenida a las contribuciones a DALI. Para contribuir a DALI y realizar solicitudes de extracción, siga las pautas descritas en el documento de contribución.
Si está buscando una buena tarea para comenzar, marque una en la etiqueta de bienvenida a contribuciones externas.
Agradecemos comentarios, preguntas o informes de errores. Cuando necesite ayuda con el código, siga el proceso descrito en el documento Stack Overflow. Asegúrese de que los ejemplos publicados sean:
mínimo : use la menor cantidad de código posible que aún produzca el mismo problema.
completo : proporcione todas las piezas necesarias para reproducir el problema. Compruebe si puede eliminar la dependencia externa y seguir mostrando el problema. Cuanto menos tiempo dediquemos a reproducir los problemas, más tiempo podremos dedicar a solucionarlos.
verificable : Pruebe el código que está a punto de proporcionar para asegurarse de que reproduce el problema. Elimine todos los demás problemas que no estén relacionados con su solicitud.
DALI se construyó originalmente con importantes contribuciones de Trevor Gale, Przemek Tredak, Simon Layton, Andrei Ivanov y Serge Panev.