"); //-->
本文来自社区投稿
作者:教 主
原文链接:https://zhuanlan.zhihu.com/p/585270139
0 Introduction
一直以来,得益于 GPU 的日益发展,深度学习中网络训练以及部署推理速度越来越快,在各大主流的深度学习框架,诸如 PyTorch、TensorFlow、OneFlow 等都有很多算子对 GPU 的加速支持。
从网络结构角度,PyTorch 虽然已经使用了 NVIDIA cuDNN、Intel MKL 和 NNPACK 这些底层来加快训练速度,但是在某些情况下,比如我们要实现一些特定算法/算子,如果只是用 PyTorch 已有的算子或操作远远不够。
因为 PyTorch 虽然在特定操作上经过了很好的优化,但是对于 PyTorch 已经写好的这些操作,假如我们组合起来成为一个新的算子(OP),PyTorch 不会管你的算法的具体执行流程,一般 PyTorch 只会按照设计好的操作去使用 GPU,然后 GPU 可能不能充分利用或者直接超负载,并且 python 解释器也不能对此进行优化,导致训练过程变慢很多 [1]。
从数据流角度,深度学习一般都需要复杂的、多阶段的数据处理流程,包括数据加载、解码以及一定量的数据增强预处理操作,这些目前在 CPU 上执行的数据处理管道已经成为瓶颈,使得模型训练耗时很长大。
对于此,NVIDIA 提出了 Data Loading Library(DALI)[2],通过将数据预处理交给 GPU 处理,缓解 CPU 瓶颈问题。DALI 依赖于它自己的执行引擎,其构建目的是最大化输入管道的吞吐量。诸如预取、并行执行和批处理等特性都是为用户透明处理,如下图所示:
DALI Pipeline
使用 DALI 以及配置 DALI 环境比较复杂,并且 DALI 当前的支持的函数实现也比较有限,具体使用可以看文献 [2] 中的说明文档。
实际开发中,对于一些复杂的特定数据增强操作,就需要自己实现。因此,构建了一个比较全面的工程以供大家学习和相互交流。
本工程利用 Pytorch 的 C++/CUDA 扩展,实现 GPU 的数据增强,然后直接推送给网络,从而达到训练加速效果。
为了指导大家系统性掌握该方面的相关知识,本工程也包含了 Python 的 C++ 拓展,且详细讲解了在需要依赖第三方库的情况下怎样编写 setup.py 文件以及相关配置,关于如何编译和测试,在后续有详细的讲解。
1. Project Address
https://github.com/ChenCVer/python_cpp_extension
2. Project Structure
├── 3rdparty # 工程依赖的第三方库│ ├── opencv│ │ ├── linux│ │ └── win│ └── pybind11├── docs # 说明文档及相关资料├── requirements # python相关安装依赖├── requirements.txt # python相关安装依赖项, 与requirements文件夹配合├── scripts # 相关测试脚本├── tools # 分析工具├── orbbec # 源码文件│ ├── nms # 非极大值抑制│ ├── roi_align # ROI Align│ ├── utils # 编译工具函数│ └── warpaffine # 仿射变换增强└── setup.py # 用于编译和构建python包(.egg), 类似:CMakeLists.txt
3. Compilation And Python Environment
3.1. Compile Environment
GCC/G++ >= 5.5.0(Visual Studio 2017 or newer for Windows)
CUDA(NVCC): 10.1~11.5
3.2. Python Environment
(requirements.txt)
certifi==2021.5.30cycler==0.11.0future==0.18.2kiwisolver==1.3.1matplotlib==3.3.4mkl-fft==1.3.0mkl-random==1.1.1mkl-service==2.3.0numpy @ file:///C:/ci/numpy_and_numpy_base_1603480701039/workolefile==0.46opencv-python==3.4.0.12Pillow @ file:///C:/ci/pillow_1625663293114/workpyparsing==3.0.9python-dateutil==2.8.2six @ file:///tmp/build/80754af9/six_1644875935023/workterminaltables==3.1.10torch==1.5.0torchvision==0.6.0wincertstore==0.2
3.3. Python Package infos
Package Version --------------- --------- certifi 2016.2.28cycler 0.11.0Cython 0.29.32future 0.18.2kiwisolver 1.3.1matplotlib 3.3.4mkl-fft 1.3.0mkl-random 1.1.1mkl-service 2.3.0numpy 1.19.2olefile 0.44opencv-python 3.4.0.12Pillow 8.3.1pip 21.3.1pyparsing 3.0.9python-dateutil 2.8.2setuptools 59.6.0six 1.10.0terminaltables 3.1.10torch 1.5.0torchvision 0.6.0wheel 0.29.0wincertstore 0.2
【注】:上述环境中的 PyTorch 版本需要对应的 CUDA 版本,本工程支持的 PyTorch 版本:PyTorch version:1.5.0~latest。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。