计算机系统应用教程网站

网站首页 > 技术文章 正文

英伟达全面分析(三):深度学习模型量化,TensorRT了解一下

btikc 2024-09-10 11:55:55 技术文章 10 ℃ 0 评论

本文为英伟达全面分析第三篇文章,也是基于前两篇文章(基本信息、GPU/CUDA架构)的补充,主要探讨深度学习模型量化的话题,之后两篇是计算平台和软件栈,请关注后续更新。

背景:AI计算的数据格式

计算机采用0/1来标识信息,每个0或每个1代表一个比特/二进制位(bit),信息一般以三种形式表示:

字符串,最小单元是char,占8个比特(bit, 简写b)内存,等于1个字节(Byte, 简写B)。

整数INT(Integer),INT后面数值表示该整数类型占用内存的比特位数,常用INT8、INT16、INT32、INT64等。

浮点数PF(Floating points),PF后面数值也代表该浮点类型占用内存的比特位数,常用FP16(半精度)、FP32(单精度)和FP64(双精度)。

下图为不同数据格式占用内存、可表示动态范围和数据精度情况,整体上看,数据内存占用越少,可表示的动态范围越低,精度也越低,浮点数可表示的范围比整数要多得多。

Why:深度学习为什么需要低精度

大多数深度学习模型在训练Training时,梯度更新往往比较微小,一般模型参数都采用较高精度的FP32数据格式进行训练。

但推理Inference时,模型可能需要更长时间来预测结果,在端侧会影响用户体验,因此,需要提升计算速度,常采用更低精度的FP16或INT8。

这样不仅可以减少内存访问(更快搬运数据),还可以采用更小硅片(所需乘法器数目减少),减少与计算相关的功耗(或更高操作数OP)。

What:量化技术

量化(Quantize),即将训练好的模型,不论是权重还是计算op,转换为低精度去表示和计算,因FP16量化较简单,一般关注INT8的量化(FP32->INT8)。

常用两种量化方法,训练后量化PTQ(Post training quantization)和量化感知训练QAT(Quantize-aware training)。

PTQ是在模型经过训练后进行的,但一般PTQ精度达不到要求,就会考虑使用QAT。

在量化过程中会产生数据溢出和精度不足舍入错误,会混合使用单精度和半精度数据格式,优势是压缩模型大小,但因为模型结构和参数没有发生变化,再加上不同精度需要进行对齐运算,反而会导致计算速度降低,针对这种场景,英伟达GPU有专门的计算单元(Tensor Core等),完成单指令混合精度运算,提升计算速度。

How:量化工具

随着量化技术发展和成熟,已经有很成熟的软件工具,其中包括了英伟达的TensorRT。

TensorRT是英伟达开发的深度学习推理引擎(GPU Inference Engine),是一套从模型获得,到模型优化与编译,再到部署的完整工具。

模型获得支持Tensorflow、Pytorch、Caffe等主流训练框架,在模型优化与编译过程中,已经支持混合精度、PTQ和QAT量化训练,最终将训练好的模型部署于嵌入端、云端、以及汽车上的硬件平台上运行。

汽车人参考小结

量化属于模型训练到部署的中间步骤,已经成为开发者习以为常的一步,实质上是在模型精度和计算速度上的一个折中工具链,而英伟达的TensorRT是非常典型的代表。

本文为汽车人参考第382篇原创文章,如果您觉得文章不错,“推荐和关注”是对我最大的支持。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表