前言
在Nvidia的服务器GPU部署AI模型一定要使用TensorRT, 因为cuDNN远慢于TensorRT. 参考我最新的文章基于NvidiaGPU的AI模型结构优化:
最后说一点, 目前能够完美发挥出TensorCore性能的引擎, 据我所知只有TensorRT. 一些训练推理平台(比如pytorch)底层实际调用的是cuDNN来完成模型的推理. 但据我的经验来看, 相同参数的卷积cuDNN的实现要比TensorRT的实现慢3倍以上. 我也尝试过实现基于TensorCore的卷积, 但最终还是会比TensorRT慢20%多的样子.
————————————————
版权声明:本文为CSDN博主「Mr_L_Y」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/luoyu510183/article/details/117385131
最近的项目是在帮助服务器落地一些AI算法, 用到的Nvidia的GPU来推理, 主要会用到CUDA, cuDNN和TensorRT. 另外我也在开发独立的CUDA引擎来替换cuDNN, 由于cuDNN目前不支持Direct这种直接卷积算法, 只能使用GEMM,FFT和WINOGRAD这三种算法. 我的目前测试感觉这三种并不会一定会比直接卷积快, 另外cuDNN的TRUE_HALF_CONFIG , 并不会比float计算快, 这个和我用直接卷积的结论是相反的.
先讲解下结构关系:
CUDA是Nvidia GPU开发的基础工具集, 不但包含了.cu编译器nvcc, 还有一大堆好用的工具库 比如npp, nvjpeg, nvblas等等.
cuDNN是基于CUDA的卷积算法库, 里面有关于神经网络卷积计算的很多算子, 比如Tensor的+ - * /, 激活函数, 卷积函数等等.
TensorRT是基于cuDNN的一个面向模型应用库, 到这里不需要了解具体卷积的实现, 只需要把模型交给TensorRT用对应parser解析就可以进行推理或者训练.
或者结构如下:
模型 => TensorRT Parser => TensorRT cuDNN Wrapper => cuDNN ops => CUDA Kernel => GPU driver
本篇主要是作为编译入门讲解, 搭建一个基础的双平台CUDA+cuDNN项目.
正文
准备工作
安装CUDA
首先需要用到的工具集主要是VS2019和它的CMake项目模板. 本篇属于进阶内容, 不讲CMake相关的基础, 可以去之前的文章看.
VS版本没有具体需要, CUDA我使用的是10.1版本, Driver 版本大于r418就行. CUDA10.2也是可以的, 11.0以后我目前还未测试.
注意这里是最新版本,一般我也喜欢用最新版本, 但是由于服务器部署要求, 所以只能下载10.1版本, 需要点击下面这个链接去下载历史版本:
网址:https://developer.nvidia.com/cuda-toolkit-archive
Windows安装没啥好说的, 就是让你选择需要的组件, 这里提醒下, 同时会安装GPU Driver, 一般10.1的driver都