A. TensorRT--用fp16精度运行 比 fp32还慢
TensorRT运行demo程序sample_uff_ssd.exe,发现用fp16精度运行 比 fp32还慢,如下图所示
原因是:根据 NVIDIA的说法 ,支持full-rate FP16 performance 的型号是: Tesla P100, Quadro GP100, and Jetson TX1/TX2。GTX 1050, 1060, 1070, 1080, Pascal Titan X, Titan Xp, Tesla P40等型号,不支持full-rate FP16,所以,在这些型号中使用fp16精度反而比fp32慢。
简单来说就是硬件有没有Native FP16 support,即native FP16 instructions支持。
B. python多进程部署TensorRT的问题及解决
按照Nvidia官方教程按照部署TensorRT成功后, 在python环境下多进程启动tensorrt实例时,系统报错:
解决步骤:
参考TensorRTEngine. init () 中的self.cfx = cuda.Device(0).make_context(), 同时别忘了在实例释放时detach cuda上下文
参考TensorRTEngine.inference()中的self.cfx.push() 与 self.cfx.pop() 操作
参考文章:
https://stackoverflow.com/questions/56371103/how-to-run-tensorrt-in-multiple-threads
https://blog.csdn.net/weixin_39739042/article/details/112554503
C. NVIDIA在目标检测模型量化方面,怎样做到速度和精度之间的平衡。NVIDIA 在目标检测采用哪种算法
蓝海大脑AI服务器事业部负责人表示:速度上面可以用FP16或INT8来达到目标的速度。在精度上面,如果用INT8,目前有很多方法,最基本的有TensorRT INT8基本的量化算法,像entropy、linux这些calibration的算法。如果校准的算法不满足精度的要求,有些debug的手段,去检查当前网络中哪些层影响精度,后面再去优化它。甚至有些可以在训练阶段去调整INT8的精度,把训练阶段设生成的INT8精度校准表导入到TensorRT里,让TensorRT在做influence的精度跟训练时的精度一样。
D. TensorRT 4是什么应用平台
根据老黄的介绍,TensorRT 4是一款应用平台,并且TensorRT 4应用平台是能够进行可编程的,大大给开发者带来了便利。
据悉,利用TensorRT 4可编程平台来进行编程操作,就能够快捷地将已经训练好的神经网络快速部署到NVIDIA的GPU上,方便快捷。
新版的TensorRT 4应用平台也同时能够支持INT8以及FP16精度运算,并且对于数据中心的功耗可以降低到70%。
此外,NVIDIA还会和谷歌进行相关的深度合作,旨在要想TensorRT 4整合到现在AI开源框架中去,并且加速AI应用的推广实行。
E. 英伟达代码透露Switch2消息
英伟达代码透露Switch2消息
英伟达代码透露Switch2消息,Switch推出已经快5年了,关于任天堂下一部游戏机的传言也越传越广。英伟达一些泄露的源代码很可能指的是Switch2,英伟达代码透露Switch2消息。
3月2日消息,Twitter博主@NWPlayer123称,NVIDIA最近遭遇了网络攻击,黑客窃取了一些文件,文件中一部分代码显示,正在为任天堂开发的芯片代号为T239,支持DLSS。
该文件中有一个名为“NVN2”的目录和一个名为“NVNDLSS”的目录,NVN是开发Switch所用的API,我们很容易就联想到,这个新文件夹属于下一代Switch。至于下一代Switch的命名,曾传出过许多说法,这里我们就叫它“Switch2”吧。
现款Switch发布至今已有五年,性能与骁龙835差不多,与现在的主流手机相差太大,别说1080P 60FPS了,很多时候Switch都无法720P 30FPS流畅运行。再看看手机,骁龙8 Gen 1、天玑9000等旗舰芯安兔兔跑分已超100万,低端机也有1080P 120Hz屏幕,旗舰机普遍搭载2K 120Hz屏幕。
与Switch相比,手机的游戏体验好不少,只不过我们也知道,买Switch是为了任天堂的第一方游戏,所以Switch配置很差,我们也忍了。然而已经到了2022年,Switch真的有些落伍了,按照网上爆料的消息,Switch2仍将搭载NVIDIA芯片,屏幕升级为1080P分辨率,支持DLSS技术。
DLSS(深度学习超级采样)是NVIDIA研发的AI渲染技术,俗称“大力水手”,可以将画质降到低分辨率,再渲染成高分辨率,虽说不如原生高分辨率,却可以大幅降低GPU的压力。
如果Switch2仅是1080P分辨率,估计用不到DLSS,因为芯片性能已经够了。按照网上的说法,Switch2会支持主机模式下4K视频输出,不过小雷对此有些怀疑,就算有DLSS加持,Switch2的性能也未必够。
至于Switch2的发布时间,目前尚无确切消息,日前任天堂社长谷川俊太郎在财务包中表示,Switch仍处于生命周期的中间阶段,想来就算Switch2的开发进度快,也要明年见了。
Nintendo Switch推出已经快5年了,关于任天堂下一部游戏机的传言也越传越广。Switch内部的硬件从推出时就不算顶尖,图像质量和帧率一直是Switch上的一个大问题。
尽管存在硬件的限制,但Switch的玩家仍然能够游玩一些3A大作,例如《巫师3》和《毁灭战士:永恒》等,虽然他们的运行效果相较其他平台略差,但能够在Switch上玩这样的游戏就很令人惊讶了。而近日,英伟达的一些数据泄露,似乎让Nintendo Switch 2渐渐浮上水面。
此信息来自推特上的用户NWPlayer123,英伟达在最近遭到了重大的网络攻击,而一些DLSS的源代码似乎遭到了泄露。其中可以发现包含一个名为NVN2的目录,而NVN是英伟达与任天堂一同为Switch专门开发的图形API接口,这也意味着NVN2很有可能将是Switch的升级版。此外,泄露的内容中提到了T239,而这也是之前盛传的Swtich Pro谣言中被提到的.新版Switch使用的Soc。
在2021年夏季之前,就有许多传言称任天堂正在开发Switch的升级型号,甚至有人提到它将支持高于1080P的分辨率。有传言称该设备是中代更新,就想PS4 Pro和Xbox One X一样。但随后任天堂发布的Switch OLED证明这些谣言的错误,它没有太多硬件上的升级。
与此前相同的是,粉丝们应该对这次的泄密或是传言保持观望态度。我们都很期待着Switch Pro的发布,并且任天堂此前确认Switch仍处于生命周期的中段,所以此次传言中的设备还是很有可能成为Switch的中期升级版的。
3月2日消息,任天堂总裁古川俊太郎最近在该公司的财务报告中表示,Switch主机仍处于其生命周期的中间阶段,这意味着我们不太可能很快得到Switch的继任者。
然而,TechPowerUp发文称,英伟达DLSS技术的源代码现已遭到泄露,并附上了一张图,但根据任天堂舅舅党SamusHunter的说法,图内的泄露代码与文件夹暗示了一些玩家能在任天堂下一代主机上见到的功能。
了解到,在这批黑客公开的英伟达机密文件中,有一个名为NVN2的目录,还有一个名为NVNDLSS的目录,另外,也有文件提到了T239。因为NVN是开发Switch时所用到的API,所以“NVN2”很可能指的是Switch2,而NVNDLSS则是指Switch的DLSS功能,暗示Switch2支持DLSS功能。
另外,经常爆料英伟达消息的推特用户kopite7kimi也表示T239就是新一代Switch所用的Soc,代号为Drake。
据官方介绍,NVIDIADLSS(深度学习超级采样)是一项开创性AI渲染技术,它利用GeForceRTXGPU上的专用AI处理单元-TensorCore,将视觉保真度提升至全新高度。DLSS利用深度学习神经网络的强大功能提高帧率,为游戏生成精美清晰的图像。
F. 训练好的深度学习模型是怎么部署的
先说结论:部署的方式取决于需求
需求一:简单的demo演示,只要看看效果的,像是学校里面的demo展示这种
caffe、tf、pytorch等框架随便选一个,切到test模式,拿python跑一跑就好,顺手写个简单的GUI展示结果
高级一点,可以用CPython包一层接口,然后用C++工程去调用
需求二:要放到服务器上去跑,但一不要求吞吐二不要求时延的那种,说白了还是有点玩玩的意思
caffe、tf、pytorch等框架随便选一个,按照官方的部署教程,老老实实用C++部署,例如pytorch模型用工具导到libtorch下跑(官方有教程,很简单)
这种还是没有脱离框架,有很多为训练方便保留的特性没有去除,性能并不是最优的;
另外,这些框架要么CPU,要么NVIDIA GPU,对硬件平台有要求,不灵活;还有,框架是真心大,占内存(tf还占显存),占磁盘
需求三:放到服务器上跑,要求吞吐和时延(重点是吞吐)
这种应用在互联网企业居多,一般是互联网产品的后端AI计算,例如人脸验证、语音服务、应用了深度学习的智能推荐等。由于一般是大规模部署,这时不仅仅要考虑吞吐和时延,还要考虑功耗和成本。所以除了软件外,硬件也会下功夫,比如使用推理专用的NVIDIA P4、寒武纪MLU100等。这些推理卡比桌面级显卡功耗低,单位能耗下计算效率更高,且硬件结构更适合高吞吐量的情况软件上,一般都不会直接上深度学习框架。对于NVIDIA的产品,一般都会使用TensorRT来加速(我记得NVIDIA好像还有TensorRT inference server什么的,名字记不清了,反正是不仅可以加速前传,还顺手帮忙调度了)。TensorRT用了CUDA、CUDNN,而且还有图优化、fp16、int8量化等。反正用NVIDIA的一套硬软件就对了
需求四:放在NVIDIA嵌入式平台上跑,注重时延
比如PX2、TX2、Xavier等,参考上面(用全家桶就对了),也就是贵一点嘛
需求五:放在其他嵌入式平台上跑,注重时延
硬件方面,要根据模型计算量和时延要求,结合成本和功耗要求,选合适的嵌入式平台。比如模型计算量大的,可能就要选择带GPU的SoC,用opencl/opengl/vulkan编程;也可以试试NPU,不过现在NPU支持的算子不多,一些自定义Op多的网络可能部署不上去对于小模型,或者帧率要求不高的,可能用CPU就够了,不过一般需要做点优化(剪枝、量化、SIMD、汇编、Winograd等)顺带一提,在手机上部署深度学习模型也可以归在此列,只不过硬件没得选,用户用什么手机你就得部署在什么手机上23333。为老旧手机部署才是最为头疼的上述部署和优化的软件工作,在一些移动端开源框架都有人做掉了,一般拿来改改就可以用了,性能都不错。
需求六:上述部署方案不满足我的需求
比如开源移动端框架速度不够——自己写一套。比如像商汤、旷世、Momenta都有自己的前传框架,性能应该都比开源框架好。只不过自己写一套比较费时费力,且如果没有经验的话,很有可能费半天劲写不好
G. tensorRT介绍
TOPS是Tera Operations Per Second的缩写
1TOPS代表处理器每秒钟可进行一万亿次(10^12)操作
GOPS(Giga Operations Per Second:1GOPS代表处理器每秒钟可进行十亿次(10^9)操作
MOPS(Million Operation Per Second):1MOPS代表处理器每秒钟可进行一百万次(10^6)操作
一个MFLOPS(megaFLOPS)等于每秒一百万(=10^6)次的浮点运算
一个GFLOPS(gigaFLOPS)等于每秒十亿(=10^9)次的浮点运算
一个TFLOPS(teraFLOPS)等于每秒一万亿(=10^12)次的浮点运算,(1太拉)
一个PFLOPS(petaFLOPS)等于每秒一千万亿(=10^15)次的浮点运算
高吞吐率、低响应时间、低资源消耗以及简便的部署流程要求,因此TensorRT就是用来解决推理所带来的挑战以及影响的部署级的解决方案。TensorRT 是nvidia 自己开发的,主要作用就是对算法进行优化,然后进行了部署
TensorRT 部署流程:
TensorRT的部署分为两个部分:
INT8只有256个不同的数值,使用INT8来表示 FP32精度的数值,肯定会丢失信息,造成性能下降。不过TensorRT会提供完全自动化的校准(Calibration )过程,会以最好的匹配性能将FP32精度的数据降低为INT8精度,最小化性能损失。关于校准过程,后面会专门做一个探究。
优化结果:
使用了nvidia 板子,使用了sdkmanager 安装,板子已经安装了下面软件
运行结果:
REF:
https://mp.weixin.qq.com/s/E5qbMsuc7UBnNmYBzq__5Q##
https://arleyzhang.github.io/articles/7f4b25ce/
https://www.pianshen.com/article/3389187425/
https://zhuanlan.hu.com/p/84125533
nvidia 官方参考文档:
https://docs.nvidia.com/deeplearning/tensorrt/quick-start-guide/index.html