NVIDIA 数据加载库 (DALI) 是一个 GPU 加速库,用于数据加载和预处理,以加速深度学习应用程序。它提供了一系列高度优化的构建块,用于加载和处理图像、视频和音频数据。它可以用作流行深度学习框架中内置数据加载器和数据迭代器的便携式直接替代品。
深度学习应用程序需要复杂的多阶段数据处理管道,包括加载、解码、裁剪、调整大小和许多其他增强功能。目前在CPU上执行的这些数据处理管道已经成为瓶颈,限制了训练和推理的性能和可扩展性。
DALI 通过将数据预处理工作转移到 GPU 来解决 CPU 瓶颈问题。此外,DALI 依赖于自己的执行引擎,旨在最大限度地提高输入管道的吞吐量。预取、并行执行和批处理等功能对用户来说是透明的。
此外,深度学习框架具有多种数据预处理实现,带来了训练和推理工作流程的可移植性以及代码可维护性等挑战。使用 DALI 实现的数据处理管道是可移植的,因为它们可以轻松地重定向到 TensorFlow、PyTorch 和 PaddlePaddle。
大理在行动:
from nvidia.dali.pipeline import pipeline_defimport nvidia.dali.types as typesimport nvidia.dali.fn as fnfrom nvidia.dali.plugin.pytorch import DALIGenericIteratorimport os# 要使用不同的数据运行,请参阅 nvidia.dali.fn.readers 的文档。 file# 指向 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向后(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")# 在 GPU 上解码数据images = fn.decoders.image_random_crop(images, device="mixed", output_type=types.RGB)# 其余处理也发生在 GPU 上images = fn.调整大小(图像,resize_x = 256,resize_y = 256)图像= fn.crop_mirror_normalize(图像,crop_h = 224,crop_w = 224,平均值= [0.485 * 255,0.456 * 255,0.406 * 255],std = [0.229 * 255 , 0.224 * 255, 0.225 * 255],mirror=fn.random.coin_flip())返回图像, labelstrain_data = DALIGenericIterator( [get_dali_pipeline(batch_size=16)], ['data', 'label'],reader_name='Reader')for i, enumerate(train_data)中的数据:x, y = data[0]['data'], data[0]['label']pred = model(x)loss = loss_func(pred, y)backward(loss, model)
易于使用的函数式 Python API。
支持多种数据格式 - LMDB、RecordIO、TFRecord、COCO、JPEG、JPEG 2000、WAV、FLAC、OGG、H.264、VP9 和 HEVC。
可跨流行的深度学习框架移植:TensorFlow、PyTorch、PaddlePaddle、JAX。
支持CPU和GPU执行。
可跨多个 GPU 进行扩展。
灵活的图表让开发人员可以创建自定义管道。
可通过自定义运算符扩展以满足用户特定需求。
加速图像分类 (ResNet-50)、对象检测 (SSD) 工作负载以及 ASR 模型(Jasper、RNN-T)。
允许使用 GPUDirect Storage 在存储和 GPU 内存之间建立直接数据路径。
通过 DALI TRITON 后端与 NVIDIA Triton 推理服务器轻松集成。
开源。
Kaggle 计算机视觉比赛期间:“DALI 是我在本次比赛中学到的最好的东西之一”
Lightning Pose - 最先进的姿势估计研究模型
提高先进计算基础设施的资源利用率
MLPerf - 计算和深度学习硬件和软件基准测试的行业标准
“我们使用 DALI 框架优化了 eBay 内部的主要模型”
下一期对我们的 2024 年计划进行了高度概述。您应该注意,此路线图可能随时更改,并且其项目的顺序并不反映任何类型的优先级。
我们强烈鼓励您对我们的路线图发表评论,并向我们提供有关提到的 GitHub 问题的反馈。
要安装最新 CUDA 版本 (12.x) 的最新 DALI 版本:
pip 安装 nvidia-dali-cuda120 # 或者 pip install --extra-index-url https://pypi.nvidia.com --upgrade nvidia-dali-cuda120
DALI 需要支持适当 CUDA 版本的 NVIDIA 驱动程序。如果是基于 CUDA 12 的 DALI,则需要安装 CUDA Toolkit。
DALI 预装在 NVIDIA GPU Cloud 上的 TensorFlow、PyTorch 和 PaddlePaddle 容器中。
对于其他安装路径(TensorFlow 插件、较旧的 CUDA 版本、每晚和每周构建等)和具体要求,请参阅安装指南。
要从源代码构建 DALI,请参阅编译指南。
DALI 的介绍可以在入门页面中找到。
更高级的示例可以在示例和教程页面中找到。
有关示例的交互式版本(Jupyter 笔记本),请转到 docs/examples 目录。
注意:选择最新版本文档或夜间版本文档,它们与主分支保持同步,具体取决于您的版本。
2024 年 GPU 技术大会;优化推理模型以实现 eBay 的最高性能;王以恒:事件
2023 年 GPU 技术大会;开发人员突破:利用 Triton Server 和 DALI 加速企业工作流程;布兰登·塔特尔:事件。
2023 年 GPU 技术大会; GPU 加速端到端地理空间工作流程;凯文·格林:事件。
2022 年 GPU 技术大会;有效的 NVIDIA DALI:加速现实生活中的深度学习应用; Rafał Banaś:事件。
2022 年 GPU 技术大会; NVIDIA DALI 简介:GPU 加速数据预处理;华金·安东·吉劳:事件。
2021 年 GPU 技术大会; NVIDIA DALI:Krzysztof Łęcki 和 Michał Szołucha 的 GPU 驱动的数据预处理:活动。
2020年GPU技术大会;使用 NVIDIA 数据加载库 (DALI) 进行快速数据预处理;艾伯特·沃兰特、华金·安东·吉拉奥:录音。
2019年GPU技术大会;使用DALI快速进行AI数据预处理; Janusz Lisiecki、Michał Zientkiewicz:幻灯片、录音。
2019年GPU技术大会; DALI 与 Xavier 上的 TensorRT 集成;乔什·帕克和阿努拉格·迪克西特:幻灯片、录音。
2018年GPU技术大会;用于深度学习训练的快速数据管道,T. Gale、S. Layton 和 P. Trędak:幻灯片、录音。
开发者页面。
博客文章。
我们欢迎为 DALI 做出贡献。要为 DALI 做出贡献并提出拉取请求,请遵循贡献文档中概述的指南。
如果您正在寻找适合开始的任务,请检查外部贡献欢迎标签中的任务。
我们感谢反馈、问题或错误报告。当您需要代码方面的帮助时,请按照 Stack Overflow 文档中概述的流程进行操作。确保发布的示例是:
最小:使用尽可能少的代码仍然会产生相同的问题。
完整:提供重现问题所需的所有部件。检查是否可以去除外部依赖并仍然显示问题。我们花在重现问题上的时间越少,我们就能投入更多的时间来修复问题。
verificable :测试您将要提供的代码,以确保它能够重现问题。删除与您的请求无关的所有其他问题。
DALI 最初由 Trevor Gale、Przemek Tredak、Simon Layton、Andrei Ivanov 和 Serge Panev 等人做出了重大贡献。