关注上方深度学习技术前沿”,选择“星标公众号”

资源干货,第一时间送达!

你的数据处理影响整个训练速度,如果加上英伟达 DALI 库,处理速度比原生 PyTorch 也能快上四倍。

深度学习的加速上,除了对训练和推理过程的加速之外,还有对数据加载和预处理阶段的加速。这一阶段也尤为关键,因为数据处理 pipeline 的处理速度也影响着整体的流程效率。

近日,有开发者介绍了如何使用 NVIDIA Data Loading Library(DALI),以及使用这个库进行数据预处理加速的方法。DALI 和 TensorFlow 自带的 DataLoader 类似,是一个专门用于加速数据预处理过程的库。

在一篇博客中,开发者表示,该库不仅可以进行 GPU 加速,也可以在 CPU 上构建一个完整的数据预处理流程。如果在 Tesla V100 上做测试,PyTorch+DALI 的处理速度能达到 4000 images/s,比原版 PyTorch 要快近 4 倍。

支持多个框架,针对预处理

英伟达数据加载库 DALI 是一个便捷式开源库,用于图像或视频的解码及增强,从而加速深度学习应用。通过并行训练和预处理过程,减少了延迟及训练时间,并为当下流行的深度学习框架中的内置数据加载器及数据迭代器提供了一个嵌入式替代器,便于集成或重定向至不同框架。

开发人员可以在 GPU 上运行他们的数据处理通道,从而减少训练神经网络的时间。而 DALI 实现了数据处理 pipeline 可移植,因为可以轻松地重定向至 TensorFlow,PyTorch 和 MXNet。

DALI 设计之初就是用来帮助用户突破数据预处理的瓶颈,使得模型的训练和推理能够达到最高的效率。其主要设计是用于在 GPU 上的预处理,但大多数操作也可在 CPU 上实现。

主要特征

  • 易于使用的 Python API

  • 在多个 GPU 之间显式地缩放

  • 加快图像分类(ResNet-50)和目标检测分类(SSD)工作流

  • 灵活的计算图使得开发人员可创建自定义的数据处理 pipeline

  • 支持多种格式 - LMDB、RecordIO、TFRecord、COCO、JPEG、H.264 以及 HEVC

  • 开发人员可添加自定义的图像或视频处理 operator

DALI 在 MXNet 上训练 ResNet50 的性能表现。

使用 DALI 重构数据预处理 pipeline

内存占用大是 DALI 在加速数据预处理中面对的一个重要问题。随着批大小的上升,DALI 的内存占用会变得更大。这一问题现在还没有得到修复。

DALI 的内存占用问题。

而和其他的数据预处理工具相比,DALI 能够最大处理的批大小相比 TorchVision 少了一半。

因此,使用 DALI 加速数据预处理需要重新构建整个 pipeline。在教程中,作者分别介绍了构建 CPU pipeline 和 GPU pipeline 的方法。

构建 CPU pipepline

使用 CPU 进行数据预处理的时候,常用的做法是让 CPU 处理解码和 resize 的工作,而 CropMirrorNormalize 这样的工作放到 GPU 上。由于使用 DALI 将输出传入 GPU 中就会占用很大的内存,因此作者构建了一个完全基于 CPU 的 pipeline。

首先,重新加载并导入 DALI。

然后构建基于 CPU 的 pipeline。

在这里设置一下哪些操作应当由 CPU 运行。

然后开始相应的操作。如解码:

以及 resize:

CropMirrorNormalize 的操作由 GPU 进行。

当然,还需要从 CPU 到 GPU 的转移过程,这一过程使用 PyTorch 进行,作者在教程中也给出了相应的代码。

构建基于 GPU 的 pipeline

当模型较大(如使用 ResNet50)的时候,基于 CPU 的 pipepline 效果较好,而在类似于 AlexNet 或 ResNet18 这样的小模型上,CPU 的处理还是跟不上 GPU 的数据处理速度。其主要原因在于,GPU pipeline 会降低近一半的批大小。

为了解决这个问题,作者建议将验证 pipepline 从 GPU 中关掉,直到每个 epoch 的最后需要的时候再开启。

效果评价

以下是作者在 ResNet18 中使用的最大批量大小:

因此通过合理应用这一系列修改,DALI 可以使得最大批量大小在 CPU 或 GPU 模式下提升 50%

而在 Shufflenet V2 0.5 上,如果批大小为 512,则 DALI GPU 和 CPU 能够处理的批大小如下:

可以看到,即使是 CPU,其处理速度也达到了每秒 1800 张图像,速度超过了 TorchVision。

所有的测试都在 Google Cloud V100 实例下运行:包含 12 个 vCPU(6 个物理内核),78GB 内存,以及使用 ApexFP16 进行训练。

因此,通过 DALI,一个 Tesla V100 GPU 就可以达到将近每秒 4000 张图像。接近英伟达有 8 个 V100 GPU 的 DGX-1 的性能,尽管使用的是小模型。

参考链接:

https://towardsdatascience.com/nvidia-dali-speeding-up-pytorch-876c80182440

???? 更多精彩咨讯,长按识别,即可关注

【Pytorch】运用英伟达DALI加速技巧可使PyTorch运算速度快4倍相关推荐

  1. 英伟达DALI加速技巧:使数据预处理比原生PyTorch运算速度快4倍

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 你的数据处理影响整个训练速度,如果加上英伟达 DALI 库,处理速度比原生 PyT ...

  2. 英伟达DALI加速技巧:让数据预处理速度比原生PyTorch快4倍

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自机器之心. 选自towardsdatascience 作者:Pieterluitjens 机器之心编译 参与:一鸣.嘉明.思 你的数据处理影响 ...

  3. ffmpeg学习 源代码编译、英伟达硬件加速

    使用cpu进行软编解码时,cpu效率低并且占用高.使用硬件加速,能够明显降低CPU的占用,参看博客 ffmpeg学习(16)AVDevice使用. 这里以使用英伟达gpu进行h264编解码加速为例说明 ...

  4. 在Win10平台上搭建AI训练(英伟达GPU加速)环境

    1.环境 版本 Windows 10 企业版 版本号 21H2 安装日期 ‎2022/‎3/‎13 操作系统内部版本 19044.1826 体验 Windows Feature Experience ...

  5. 英伟达MTX150GPU在anaconda下安装pytorch

    1.经查MTX150只支持cuda9.1,但是到官网里找不到9.1版本的 2.较多安装pytorch的教程是通过pip安装,使用conda安装的不多 3.安装pytorch的过程 cuda只支持pyt ...

  6. AI芯片:寒武纪DianNao,英伟达NVDLA和谷歌TPU1的芯片运算架构对比分析

    前面几篇博客分别分析了目前市面上能够找到的各家AI芯片的结构. 下面做一个阶段性的对比分析及总结. AI芯片运算架构对比 整体来看,NVDLA的架构与寒武纪的DianNao比较像.所以,单位资源的性能 ...

  7. 今晚直播写代码|英伟达工程师亲授如何加速YOLO目标检测

    NVIDIA TensorRT是一种高性能深度学习推理优化器和运行时加速库,可以为深度学习推理应用程序提供低延时和高吞吐量.通过TensorRT,开发者可以优化神经网络模型,以高精度校对低精度,最后将 ...

  8. gpu超算算法_英伟达推GPU加速Arm服务器参考设计!微软Azure启动GPU超算实例

    芯潮(ID:aichip001)文 | 韦世玮 芯潮11月20日消息,昨天,英伟达在2019国际超级计算大会(SC19)上推出用于构建GPU加速Arm服务器的参考设计,以及用于优化网络和存储数据处理的 ...

  9. 阿里云牵手英伟达推出初创加速计划,算力触手可得

    "阿里云×英伟达初创加速计划"为初创企业提供触手可得的算力,有效缓解计算压力,提升业务效率,助力提高企业竞争力. 活动时间 即日起至 2022 年 3 月 31 日 活动对象 1. ...

最新文章

  1. bootstraptable设置行高度_条码打印软件中不干胶卷纸的标签设置方法
  2. 如何为同一字体添加多个字体文件?
  3. 李洪强iOS开发之-cocopods安装
  4. java mail 发件人昵称,Java使用javax.mail发送邮件 解决收件人、发件人名字乱码问题...
  5. python 还原九宫格图片_用Python做一个好玩的朋友圈九宫格抽奖
  6. 终于!《iOS 全埋点解决方案》正式出版
  7. c语言中static使用方法
  8. JavaScript的面向对象原理之原型链
  9. python3数据库框架_Python3 MySQL 数据库连接:安装pymysql(mysql数据库驱动), sqlalchemy(ORM框架)。...
  10. 隐马尔可夫模型(HMM)简介
  11. Linux服务器 -- 安全篇
  12. 使用计算机键盘的基本步骤,键盘指法练习方法
  13. Delphi利用字符串序列号对象
  14. DSPE-PEG-TPP 磷酸三苯酯修饰聚乙二醇PE磷脂
  15. 口碑、银盒子相关功能是否支持问题
  16. 注意力机制在NLP问题中的介绍与调查-论文翻译
  17. Memcached的安装及配置
  18. C语言小型商品管理系统
  19. (一)BST树(二叉搜索树)
  20. java重复录入怎么删除,删除重复记录的方法

热门文章

  1. 闲话WPF之二四(WPF中的ControlTemplate [2])
  2. 妙用“IP地址冲突”揪出害群之马
  3. 当了十年 IT 程序员,我转型做自动驾驶开发的这五年”_《新程序员》编辑部的博客-CSDN博客
  4. nohup 和后台运行符号
  5. 9个基于Java的搜索引擎框架
  6. 论坛报名 | NLP 是否到了产业应用的黄金时代?
  7. 《AI系统周刊》第2期:硬件支持的Tensor-train分解与高效数据处理、清华吴文斐研究组获得NSDI最佳论文奖
  8. 专访小书作者刘传君:练太极的“读书机器”
  9. HTML5背后的故事
  10. 【世界最大人脸对齐数据集】ICCV 2017:距离解决人脸对齐已不远