本期视频着重讲述其中的推理过程和硬件。
深度学习主要分为training和inference(训练和推理)。
以图像中的猫狗识别为例,在训练的过程中,需要先将大量图片中的猫狗进行标注,然后组成训练数据集(training dataset),将训练数据集的图片和标注输入到神经网络中,通过神经网络的不断学习和计算,就可以得到神经网络节点的参数,并识别图像中的目标是猫、还是狗的功能。
成功训练出一个神经网络模型后,可以将其应用于生产任务中。例如,上期视频训练出了一个可以识别猫狗的模型,接下来,可以将一些随机的猫狗图像输入到模型中,模型可以判断图像是猫还是狗。这种神经网络模型能够基于训练成果,对新的数据进行推导的过程就是AI推理。
训练和推理的区别
训练和推理相互联系,但是也有一些区别。
首先,训练是通过对大量的标注数据进行学习,形成一个复杂的神经网络,要求训练出的神经网络具有一定的通用性,以完成各种各样的学习任务(像识别猫、识别猫的花色、识别猫的品种等)。
而推理是向现有的神经网络模型输入新的数据,让模型推导出正确的结论。要做到保证神经网络精确,并且带有一定的通用性,就需要大量数据和大量算力资源,对复杂的神经网络进行训练。
在大数据的驱动下,复杂的神经网络变得无比精确,复杂的神经网络像是一个笨重的巨型数据库。
在实际应用中,更需要的是一种能够更快、更高效的神经网络,对新输入的数据进行迅速且准确的推导。因此推理更看重的是能够快速给到用户反馈,同时要考虑到运营维护此服务的成本,所以AI推理要求低能耗、低时延,应用上,更关注用户体验方面的优化。
推理模型的优化
对于一个训练好的神经网络,其模型内部有大量的被训练好的权重参数(weights),在计算时,它们往往占用了大量的空间以及带宽,这在一些嵌入式平台、移动端上的部署带来了很大的困难,庞大的计算量也让移动端的平台无法承受。
图注:被训练好的神经网络往往占用大量空间和带宽
那么,训练好的神经网络应该如何优化?下面介绍几个优化模型的方法:
模型剪枝(Pruning)是一种模型压缩的方法,其主要目标就是在尽可能不牺牲模型精度的前提下,降低模型的参数量,从而提高推理效率。剪枝的思路十分简单:剔除模型中“不重要”的权重,使模型参数数量减少,同时需要尽量保证模型的性能不受影响。
操作上,需要先将模型训练,直到其收敛,然后移除权重值较低(低于阈值)的连接,重新训练到收敛。在实际的应用时,在某些场景下剪枝优化后的模型精度能够得到提升。
另一种方法为量化(Quantization),模型量化是将模型参数精度降低,这样可以有效的降低模型计算强度、参数占用的空间和带宽,但往往带来精度损失。在精度损失允许的情况下,适当地对模型进行量化能够提高推理的效率。
也可以从神经网络结构出发,寻找方法将神经网络的多个层融合成一个单一的计算步骤,降低模型的计算量,提高推理的效率。
适用于AI推理的NVIDIA GPU方案
GPU有上千个计算核心,拥有并行计算能力,因此GPU既擅长训练,也擅长推理,NVIDIA也根据实际应用中需求的不同,推出了不同规格的GPU。
例如,适用于AI训练的NVIDIA A100和NVIDIA A30,还有本期重点介绍的NVIDIA适用于AI推理上的NVIDIA A10和NVIDIA A2。
除了硬件之外,NVIDIA在软件上对AI推理也有很强大的支持,例如后面介绍的TensorRT推理SDK和Triton推理加速引擎,能够在NVIDIA GPU设备上加速推理过程,不需要编写推理模型优化的算法,只需调用相关API,就能将训练好的模型部署到NVIDIA GPU设备上进行推理。
TensorRT
TensorRT是NVIDIA官方推出的一个方便使用的高效模型推理SDK,同时能够支持TensorFlow、PyTorch和MXNet等训练框架,使用该SDK能快速有效地在NVIDIA GPU设备上运行一个已经训练好的神经网络。
TensorRT的API支持的编程语言为C++和Python,C++和Python APIs两者的功能基本相同,具有以下几个特点:
●通过量化模型为FP16和INT8精度,来提高吞吐量和同时保持高的准确度
●通过融合内核中的节点,优化GPU显存和带宽的使用,这样能降低延时,提高效率
●针对不同的GPU平台,能自动选择最佳的算法实现
●减少内存占用,高效地为张量重复利用内存
●能够并行处理多个输入流,并且保持可扩展性
●通过动态生成的内核,在时间上优化循环神经网络
图注:Triton可用于部署主流框架的模型
Triton推理引擎
NVIDIA Triton是一款开源推理服务引擎,提供了针对CPU和GPU优化的云和边缘推理解决方案。同时Triton支持HTTP/REST和GRPC协议,允许远程客户端请求对服务器管理的任何模型请求推理服务,具有以下特点:
●NVIDIA Triton 可用来部署所有当前主流框架的模型。支持 TensorFlow 1和2x、PyTorch、ONNX、TensorRT、RAPIDS FIL(对于XGBOOST、Scikit-learn Random Forest、LITGBM)、OpenVIO、Python,甚至自定义C++后端。
●NVIDIA Triton支持基于NVIDIA GPU的AI推理服务,能够提供动态批处理、并发执行、最佳模型配置、模型集成和流输入等功能,能够最大化吞吐量和利用率。
●在云计算或数据中心、企业边缘端和嵌入式设备上都能运行NVIDIA Triton推理平台,同时NVIDIA Triton也支持在bare metal裸金属和虚拟环境下运行AI推理服务。在操作系统上不只是支持Linux,在Windows、Jetson和ARM SBSA也能够构建使用。
NVIDIA加速AI项目落地
通过大量数据和算力资源训练出的神经网络,在实际应用中的效果如何,最终需要在推理设备中进行确认,但是推理设备往往配置并不一致,要想达到项目所需精度,这个调优过程就得反复进行。
如果某个方面的性能未达标,可能需要回到模型训练步骤对模型的参数进行调整。如果调整模型参数还没能达到性能要求,可能需要更换神经网络,这几乎是得从头开始整个项目。
NVIDIA TAO(集训练、调整和优化功能)是一个基于GUI和CLI的AI生产方案,可以简化和加速企业AI应用和服务的创建。
通过微调预训练模型,企业在几个小时内即可生成特定领域的模型,这个过程不需要大量训练和深度学习AI的专业知识。
NVIDIA TAO简化了深度学习工作流程中数据准备、训练和优化这些耗时的环节,加速了AI的部署。
NVIDIA TAO有以下特点:
1)集成TensorFlow和Pytorch两个深度学习框架; 2)高级封装的CLI指令接口帮助开发人员执行不同类别神经网络的模型训练、精度评估、裁剪推理等复杂工作。 3)能提供针对性的配置文件;
4)迁移学习功能,与从头开始训练同一模型相比,通过迁移学习能够使用更少的数据训练出模型。
同时使用NVIDIA TAO工具包非常方便:
1)基于Docker容器技术进行封装,只需要在X86设备上安装合适的驱动和docker、nv-docker等管理软件就能安装使用,开发资源如TensorRT、CUDA都预先打包在镜像容器中;
2)基于Jupyter的BS架构互动式操作界面,方便开发者使用任意一台能连上训练设备的电脑进行模型训练工作;
3)NVIDIA TAO训练出的文件兼容TensorRT,能轻松转换成TensorRT,同时也能非常轻松的部署在推理平台上,与Triton等推理工具进行对接,降低部署复杂度。
NVIDIA A10和NVIDIA A2介绍
这里推荐两款主攻AI推理的加速卡NVIDIA A10和NVIDIA A2。
NVIDIA A10专为具有强大AI功能的图形、媒体和云游戏应用程序打造,在加速采用AI的图形和视频方面,是主流企业服务器的理想GPU。其结合了第二代NVIDIA光线追踪核心(Ray Tracing Core)核心和第三代张量核心Tensor Core,具有24GB GDDR6内存,采用单插槽PCI Express Gen4,最大功率为150w。
作为NVIDIA AI平台的一部分,NVIDIA A10支持所有AI框架和网络模型,提供的性能和效率,最大限度地利用规模部署。
NVIDIA A10为数据中心专业卡,主要面对数据中心轻量级图像需求和轻量级的AI需求,图形方面可以很好的帮助到轻量级的CAD设计工作,在AI方面非常适用于轻量级的图像分类、目标检测等计算机视觉任务。
NVIDIA A10与上一代NVIDIA T4 Tensor Core GPU相比,其图形性能提升了2.5倍,推理性能提升了2.5倍以上。还可以在A10上使用NVIDIA AI Enterprise软件运行推理工作负载并达到裸机性能。
图注:NVIDIA A2对比CPU具有的加速性能
NVIDIA A2 Tensor Core GPU具有低功耗、小尺寸和高性能的特点,可为在边缘部署NVIDIA AI的智能视频分析(IVA)提供入门级推理性能。该GPU采用半高PCIe 4.0卡的设计,并提供40-60瓦的低热设计功耗(TDP)配置功能。
相比之前的入门级产品T4,在边缘计算场景里,性能提升了20%至30%,功耗降低了10%,同样也不需要外接供电。在提供比T4更高的性能和更低的功耗的同时还支持与其他NVIDIA AI推理产品组合,这样可以使用户使用更少的服务器和更少的功率部署AI应用,从而大幅降低成本。
以上就是本期视频的所有内容,如果觉得这期视频还不错的话,希望能为我们点个赞,鼓励一下~
全部评论