英伟达DALI加速技巧:让数据预处理速度比原生PyTorch快4倍
点击我爱计算机视觉标星,更快获取CVML新技术
本文转载自机器之心。
选自towardsdatascience
作者:Pieterluitjens
机器之心编译
参与:一鸣、嘉明、思
你的数据处理影响整个训练速度,如果加上英伟达 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
TF & PyTorch学习群
学习交流TensorFlow、PyTorch深度学习框架的使用,欢迎加入52CV-TF & PyTorch群,扫码添加CV君拉你入群,如已为CV君其他账号好友请直接私信,
(请务必注明:框架):
喜欢在QQ交流的童鞋可以加52CV官方QQ群:805388940。
(不会时时在线,如果没能及时通过还请见谅)
长按关注我爱计算机视觉
英伟达DALI加速技巧:让数据预处理速度比原生PyTorch快4倍相关推荐
- 英伟达DALI加速技巧:使数据预处理比原生PyTorch运算速度快4倍
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 你的数据处理影响整个训练速度,如果加上英伟达 DALI 库,处理速度比原生 PyT ...
- 【Pytorch】运用英伟达DALI加速技巧可使PyTorch运算速度快4倍
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 你的数据处理影响整个训练速度,如果加上英伟达 DALI 库,处理速度比原生 PyT ...
- Wikibon:英伟达如何通过人工智能抢夺数据中心市场?
英伟达(NVIDIA)希望通过使数据中心以1/10的成本运行10倍的速度,从而彻底改变企业计算.英伟达CEO黄仁勋(Jensen Huang)正在制定一项战略,其愿景是利用英伟达在人工智能架构中的强大 ...
- 英伟达犯众怒!禁止数据中心用GeForce!这下,英特尔AMD机会来了
作者 | 鸽子 今天的朋友圈,被英伟达给炸了. 怎么回事呢? 话说,英伟达这货最近悄然修改了用户许可协议(EULA),禁止在数据中心使用消费者级显卡GeForce做深度学习.用什么呢?强制用其高端处理 ...
- ffmpeg学习 源代码编译、英伟达硬件加速
使用cpu进行软编解码时,cpu效率低并且占用高.使用硬件加速,能够明显降低CPU的占用,参看博客 ffmpeg学习(16)AVDevice使用. 这里以使用英伟达gpu进行h264编解码加速为例说明 ...
- 在Win10平台上搭建AI训练(英伟达GPU加速)环境
1.环境 版本 Windows 10 企业版 版本号 21H2 安装日期 2022/3/13 操作系统内部版本 19044.1826 体验 Windows Feature Experience ...
- 途乐证券股市资讯-英伟达,又创历史新高!美股全线上涨
当地时间13日,美股三大股指集体收涨,纳指.标普500指数双双改写2022年4月以来的新高.到收盘,道指涨0.14%,报34395.14点:纳指涨1.58%,报14138.57点:标普500指数涨0. ...
- 今晚直播写代码|英伟达工程师亲授如何加速YOLO目标检测
NVIDIA TensorRT是一种高性能深度学习推理优化器和运行时加速库,可以为深度学习推理应用程序提供低延时和高吞吐量.通过TensorRT,开发者可以优化神经网络模型,以高精度校对低精度,最后将 ...
- 近期活动盘点:高管AI大数据能力研修班、英伟达初创企业展示开启报名
想知道近期有什么最新活动?大数点为你整理的近期活动信息在此 高级管理人员AI大数据能力研修班 截至2020年12月31日 项目背景 大数据是第四次产业革命的核心,物联网.人工智能.5G通信.区块链.数 ...
最新文章
- IBM发布全球首台商用量子计算机
- React-Native 之 GD (二)自定义共用导航栏样式
- 第 2 章:初出茅庐【初级篇 - 2.2 贪心算法】
- 选什么地方,进多少商品,想开超市,这些必须了解
- 利用自定义分页技术提高数据库性能
- 矩池云上安装ikatago及链接教程
- Linux 命令(127)—— wget 命令
- select2多选设置select多选,select2取值和赋值
- Java| Javadoc生成Java帮助文档
- WBE15—HttpServletRequest
- OSChina 周五乱弹 —— 我FFFF……佛慈悲
- English improvement of IT Test(2016)
- Vue Vant点赞效果
- OSCS开源软件供应链安全社区上线,携手开源社区共同提升开源安全质量
- CSS的px和em的区别
- 使用 lxml 中的 xpath 高效提取文本与标签属性值
- 论文模型构建的步骤_最新论文:智能安全情报分析模型的构建
- 非常实用的JavaScript代码
- python并发测试脚本语言_python并发测试脚本
- C++switch语句 | 判断某年某月有几天
热门文章
- Delphi 7下IGDIPlus库的使用
- 有关编译嵌入式android的swap空间不够导致的编译错误和解决办法
- 密码学原理与实践_到底什么是防火墙入侵检测密码学身份认证?如何高效建立网络安全知识体系?...
- centos iptables_SQLyog远程连接centos中mysql数据库
- android权限适配 简书,Android动态权限适配
- mysql查询序号低于10前面补个0_mysql 前缀 + 编号 补0
- python自动化测试框架结构_基于Python的HTTP接口自动化测试框架实现
- thaiphoon burner 使用_果粉请注意,苹果iPhone 12在日常使用时有两大隐忧
- springboot+flowable第二节(流程基本操作)
- 打印设置自定义表尾_如何自定义凭证汇总表打印页面设置