Fork me on GitHub

The NVIDIA Data Loading Library (DALI®)

https://github.com/NVIDIA/DALI

DALI库的核心优势在于其GPU加速能力。传统的数据预处理过程大多在CPU上执行,包括数据的加载、解码、裁剪、调整大小等操作,这些操作往往是计算密集型的,且受限于CPU的计算能力。而DALI库通过将部分或全部数据预处理任务卸载到GPU上执行,充分利用了GPU强大的并行计算能力,从而显著提升了数据预处理的速度。这种GPU加速能力使得DALI在处理大规模数据集时能够保持高效,减少了数据预处理对整体训练过程的瓶颈效应。

DALI允许开发人员创建自定义的数据处理pipeline,通过灵活的计算图来表示不同的数据处理流程。开发人员可以根据需要选择适当的操作符,并指定它们在CPU或GPU上执行,从而构建出最适合自己应用场景的数据预处理方案。此外,DALI还支持通过自定义操作符来扩展其功能,以满足特定的数据处理需求。DALI的异步执行和预取机制有助于隐藏预处理延迟,使得整体训练流程更加流畅。

NVIDIA 数据加载库 (DALI) 是一个 GPU 加速库,用于数据加载和预处理,以加速深度学习应用。它提供了一系列高度优化的构建块,用于加载和处理图像、视频和音频数据。它可以作为主流深度学习框架中内置数据加载器和数据迭代器的可移植替代品。

深度学习应用需要复杂的多阶段数据处理流水线,包括加载、解码、裁剪、调整大小以及许多其他数据增强操作。这些数据处理流水线目前在 CPU 上执行,已成为瓶颈,限制了训练和推理的性能和可扩展性。

DALI 通过将数据预处理任务转移至 GPU 来解决 CPU 瓶颈问题。此外,DALI 依靠其自身的执行引擎,旨在最大限度地提高输入流水线的吞吐量。预取、并行执行和批处理等功能对用户透明。

此外,深度学习框架有多种数据预处理实现方式,这带来了诸如训练和推理工作流程的可移植性以及代码可维护性等挑战。使用 DALI 实现的数据处理流水线具有良好的可移植性,因为它们可以轻松地重新定位到 TensorFlow、PyTorch 和 PaddlePaddle。

DALI图

DALI 实际应用:

 
from nvidia.dali.pipeline import pipeline_def
import nvidia.dali.types as types
import nvidia.dali.fn as fn
from nvidia.dali.plugin.pytorch import DALIGenericIterator
import os

# To run with different data, see documentation of nvidia.dali.fn.readers.file
# points to https://github.com/NVIDIA/DALI_extra
data_root_dir = os.environ['DALI_EXTRA_PATH']
images_dir = os.path.join(data_root_dir, 'db', 'single', 'jpeg')


def loss_func(pred, y):
    pass


def model(x):
    pass


def backward(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")
    # decode data on the GPU
    images = fn.decoders.image_random_crop(
        images, device="mixed", output_type=types.RGB)
    # the rest of processing happens on the GPU as well
    images = 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, labels


train_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)
 

亮点

  • 易于使用的函数式 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 推理服务器集成。
  • 开源。

DALI成功案例:


DALI路线图

以下文章概述了我们 2024 年的计划。请注意,此路线图可能随时更改,且其项目顺序不反映任何优先级。

我们强烈建议您对我们的路线图发表评论并就所提到的 GitHub 问题向我们提供反馈。


安装DALI

要安装最新 CUDA 版本(12.x)的最新 DALI 版本:

pip安装nvidia-dali-cuda120
# 或者
pip install --extra-index-url https://pypi.nvidia.com --upgrade nvidia-dali-cuda120

DALI 需要支持相应 CUDA 版本的NVIDIA 驱动程序。如果 DALI 基于 CUDA 12,则需要 安装CUDA Toolkit 。

DALI 预装在NVIDIA GPU Cloud上的TensorFlow、 PyTorchPaddlePaddle 容器中

有关其他安装路径(TensorFlow 插件、旧 CUDA 版本、夜间和每周构建等)和具体要求,请参阅安装指南

要从源代码构建 DALI,请参阅编译指南


示例和教程

您可以在“入门”页面中找到有关 DALI 的介绍

您可以在示例和教程页面中找到更多高级示例

要获取示例的交互式版本(Jupyter 笔记本),请转到docs/examples 目录。

注意:根据您的版本,选择最新发布文档 或夜间发布文档,它们与主分支保持同步。


其他资源

  • 2024 年 GPU 技术大会;优化推理模型服务以实现 eBay 的最高性能;王一恒: 活动
  • 2023 年 GPU 技术大会;开发人员分组讨论:使用 Triton Server 和 DALI 加速企业工作流程;Brandon Tuttle: 活动
  • 2023 年 GPU 技术大会;GPU 加速端到端地理空间工作流;Kevin Green: 活动
  • 2022 年 GPU 技术大会;有效的 NVIDIA DALI:加速现实生活中的深度学习应用;Rafał Banaś: 活动
  • 2022 GPU 技术大会;NVIDIA DALI 简介:GPU 加速数据预处理;Joaquin Anton Guirao: 活动
  • 2021 年 GPU 技术大会;NVIDIA DALI: Krzysztof Łęcki 和 Michał Szołucha 的 GPU 驱动的数据预处理: 活动
  • 2020 年 GPU 技术大会;使用 NVIDIA 数据加载库 (DALI) 进行快速数据预处理;Albert Wolant、Joaquin Anton Guirao: 录音
  • 2019年GPU技术大会;使用DALI进行快速AI数据预处理; Janusz Lisiecki、Michał Zientkiewicz: 幻灯片、 录音
  • 2019 年 GPU 技术大会;Xavier 上 DALI 与 TensorRT 的集成;Josh Park 和 Anurag Dixit: 幻灯片、 录音
  • 2018 GPU 技术大会;深度学习训练的快速数据管道,T. Gale、S. Layton 和 P. Trędak: 幻灯片、 录音
  • 开发者页面
  • 博客文章

 

 

posted @ 2025-05-08 15:38  stardsd  阅读(11)  评论(0)    收藏  举报