当前位置:网站首页>cuda和cudnn和tensorrt的理解
cuda和cudnn和tensorrt的理解
2022-06-28 08:05:00 【愚昧之山绝望之谷开悟之坡】
cuda参考:https://www.zhihu.com/question/409350643/answer/1361111350
cuda
cuda是Compute Unified Device Architecture的缩写。中文叫统一计算架构。是为了让nvidia gpu可以完成通用计算任务的一种集成技术。我们通常可以使用的cuda框架有c,c++,fortran,python,java的,可以为数据大吞吐量的工作提供很好的加速功能。简单的来讲,就是为了让GPU可以不仅仅工作与自己的一幕三分地,而是利用自身的优势,完成通用计算的任务。主要应用除了日常视频编码解码,游戏等外,可以应用于计算加速方面。拿我所接触的行星模式模拟来讲,GPU加速可以让我们模拟的物理计算过程获得很大的加速,加速科研产出。
cuda和cudnn
首先,CUDA是C语言在GPU编程上的的拓展包,CUDNN是封装了卷积等算子的库,不是一个层面的东西。其次,这二者的关系,CUDA可以用来实现cudnn定义的各种接口,早期CUDNN应该内部是用CUDA实现的,但随着英伟达软件生态的发展,CUDNN团队一定会选择用更底层,更靠近硬件,更难用的工具来构建Kernel,比如PTX,比如直接写汇编(SASS)。不信的话可以自己试着用CUDA实现CUDNN的接口,看看性能能差多少。当然能把CUDA写好的人想必都了解CUDA的局限。最后,二者在生态里面的位置。最开始CUDA可以说是英伟达用来打天下的东西,很大程度靠这玩意儿确立了自己在高性能计算尤其是神经网络高性能计算的地位。因为CUDA在暴露硬件特性和保持软件通用性的矛盾中找到了一个精巧的,大多数人都可以接受的平衡。但随着这几年技术的发展,情况又发生了些变化,CUDA还是肩负着软件生态通用性的重任,而高性能的任务,更多地需要由CUDNN,CUBLAS这些高性能软件库来承担。在英伟达的构想中,成熟的算子,比如卷积,比如全联接,用户可以使用库直接获得最优性能,而对于新的算子或者是每个用户独有的算子,用户还是可以用CUDA自己来相对简单地实现一个性能可以接受的版本。最后通过TensorRT, TensorFlow这样的框架把这二者衔接起来。
cuda、cudnn和tensorrt的关系
CUDA是NVIDIA推出的用于自家GPU的并行计算框架,也就是说CUDA只能在NVIDIA的GPU上运行,而且只有当要解决的计算问题是可以大量并行计算的时候才能发挥CUDA的作用。CUDA的主要作用是连接GPU 和 应用程序,方便用户通过 CUDA 的 API 调度 GPU 进行计算。
cuDNN(CUDA Deep Neural Network library):是NVIDIA打造的针对深度神经网络的加速库,是一个用于深层神经网络的GPU加速库。它能将模型训练的计算优化之后,再通过 CUDA 调用 GPU 进行运算.
当然你也可直接使用 CUDA,而不通过 cuDNN ,但运算效率会低好多。因为你的模型训练计算没有优化。
TensorRT是英伟达针对自家平台做的加速包,只负责模型的推理(inference)过程,一般不用TensorRT来训练模型的,而是用于部署时加速模型运行速度。
TensorRT主要做了这么两件事情,来提升模型的运行速度。
1、TensorRT支持INT8和FP16的计算。深度学习网络在训练时,通常使用 32 位或 16 位数据。TensorRT则在网络的推理时选用不这么高的精度,达到加速推断的目的。
2、 TensorRT对于网络结构进行了重构,把一些能够合并的运算合并在了一起,针对GPU的特性做了优化。现在大多数深度学习框架是没有针对GPU做过性能优化的,而英伟达,GPU的生产者和搬运工,自然就推出了针对自己GPU的加速工具TensorRT。一个深度学习模型,在没有优化的情况下,比如一个卷积层、一个偏置层和一个reload层,这三层是需要调用三次cuDNN对应的API,但实际上这三层的实现完全是可以合并到一起的,TensorRT会对一些可以合并网络进行合并。
边栏推荐
- Introduction to Devops Basics
- 22/02/15 study notes
- Co process, asyncio, asynchronous programming
- sql主從複制搭建
- NLP sequence can completely simulate human brain intelligence
- How to insert a single quotation mark into a table as a data type in Oracle pl/sql
- Hj21 simple password
- Study notes 22/1/19 and 22/1/20
- 图像翻译:UVCGAN: UNET VISION TRANSFORMER CYCLE-CONSISTENT GAN FOR UNPAIRED IMAGE-TO-IMAGE TRANSLATION
- Porting ucosiii to stm32f429
猜你喜欢

ZYNQ_ IIC read / write m24m01 record board status

Redis cerebral fissure

HJ质数因子

SLAM中常用的雅克比矩阵J

SQL Master slave Replication Build

Eslint 语法监测关闭

Trigonometric transformation formula

Generation and verification of JWT token

MySQL two table connection principle (understand join buf)

How to configure DDR3 of dm8148
随机推荐
Ambari (VIII) --- ambari integrated impala document (valid for personal test)
Software design of resistance test board
你了解TCP协议吗(一)?
[JS] - [throttling and anti shake function]
Redis cluster deployment and application scenarios
Leetcode摆动序列系列
本周二晚19:00战码先锋第8期直播丨如何多方位参与OpenHarmony开源贡献
HJ进制转换
HJ整数与IP地址间的转换
Section VI UART of zynq
HJ字符串排序
Connaissez - vous le protocole TCP (2)?
Is it reliable for flush to register and open an account? Is it safe?
asp. Net error "/" server error in the application. String or binary data would be truncated. The statement...
Devops Basics: Jenkins deployment and use (I)
Resizing node of rediscluster cluster cluster mode
SQL Master slave Replication Build
HJ删除字符串中出现次数最少的字符
Introduction to kubernetes (I)
Activity implicit jump