使用NVIDIA TensorRT部署实时深度学习应用程序

描述

深度神经网络 (DNN) 是实现强大的计算机视觉和人工智能应用程序的强大方法。今天发布的NVIDIA Jetpack 2.3使用 NVIDIA TensorRT  (以前称为 GPU 推理引擎或 GIE)将嵌入式应用程序中 DNN 的运行时性能提高了两倍以上。NVIDIA 的 1 TFLOP/s 嵌入式Jetson TX1模块在推理工作负载期间的能效比 Intel i7 CPU 高 20 倍,可部署在无人机和智能机器上。Jetson 和深度学习为自主和数据分析的最新进展提供动力,例如超高性能的蓝绿色无人机如图 1 所示。JetPack 包含全面的工具和 SDK,可简化为主机和嵌入式目标平台部署核心软件组件和深度学习框架的过程。

JetPack 2.3 具有新的 API,可通过 Jetson TX1 实现高效的低级摄像头和多媒体流,同时更新 Linux For Tegra (L4T) R24.2 和 Ubuntu 16.04 aarch64 和 Linux 内核 3.10.96。JetPack 2.3 还包括 CUDA Toolkit 8.0 和cuDNN 5.1,具有对卷积神经网络 (CNN)和 RNN和LSTM等高级网络的 GPU 加速支持。为了有效地将数据流进出算法管道,JetPack 2.3 添加了新的 Jetson Multimedia API 包以支持低级硬件 V4L2 编解码器和基于 Khronos OpenKCam的每帧相机/ISP API 。

JetPack 中包含的这些工具为部署实时深度学习应用程序及其他应用程序奠定了基础。有关包含的软件的完整列表,请参见下文。为了帮助您入门,JetPack 还包含有关训练和部署 DNN 的深度学习示例和端到端教程。

JetPack 2.3 组件

深度学习

张量RT

现在可通过 JetPack 2.3 用于 Linux 和 64 位 ARM,NVIDIA TensorRT 可最大限度地提高神经网络的运行时性能,以便在 Jetson TX1 或云中进行生产部署。在通过可访问的 C++ 接口提供神经网络原型和训练模型权重后,TensorRT 执行流水线优化,包括内核融合、层自动调整和半精度 (FP16) 张量布局,从而提高性能并提高系统效率。有关TensorRT 及其图形优化背后的概念,请参阅这篇Parallel Forall 帖子。图 2 中的基准测试结果比较了 GPU 加速的 Caffe 和 TensorRT 之间的 GoogleNet 图像识别网络的推理性能,两者都启用了 FP16 扩展,并且在一系列批量大小上。(与 FP32 相比,FP16 模式不会导致分类精度损失。)

深度学习

图 2:在 Jetson TX1 上以 FP16 模式和批量大小为 2 运行 GoogleNet 时,TensorRT 的性能提高了一倍以上。

性能是通过使用 TensorRT 或 Caffe 的优化nvcaffe/fp16分支使用 GoogleNet 处理的每秒图像来衡量的。测试使用平面 BGR 224×224 图像,GPU 核心时钟频率调节器最高为 998MHz。批量大小表示网络一次处理多少张图像。

图 2 中的基准测试结果显示,在批量大小为 2 时,TensorRT 和 Caffe 之间的推理性能提高了 2 倍以上,单张图像提高了 30% 以上。尽管使用批量大小 1 可在单个流上提供最低的瞬时延迟,但同时处理多个数据流或传感器的应用程序,或者执行窗口或感兴趣区域 (ROI) 二次采样的应用程序,可能会在批量大小下实现双倍的吞吐量增益2. 可以支持更大批量(例如 8、64 或 128)的应用程序(例如数据中心分析)实现更大的整体吞吐量。

比较功耗显示了 GPU 加速的另一个优势。如图 3 所示,与运行 Caffe 和 MKL 2017 的英特尔 i7-6700K Skylake CPU 相比,使用 TensorRT 的 Jetson TX1 使用 GoogleNet 进行深度学习推理的效率高出 18 倍。

深度学习

图 3:Jetson TX1 在深度学习推理方面的能效比 CPU 高 20 倍。

图 3 的结果是通过将测量的每秒处理的 GoogleNet 图像除以基准测试期间处理器的功耗来确定的。这些结果使用批量大小 2,尽管批量大小为 64 Jetson TX1 能够达到 21.5 GoogleNet 图像/秒/瓦特。TensorRT 从网络层规范(prototxt)开始,在网络层及以上进行优化;例如,融合内核并每次处理更多层,从而节省系统资源和内存带宽。

通过将 TensorRT 连接到摄像头和其他传感器,可以使用实时数据实时评估深度学习网络。对于实现导航、运动控制和其他自主功能很有用,深度学习大大减少了实现复杂智能机器所需的硬编码软件的数量。有关使用 TensorRT 通过 Jetson TX1 的板载摄像头快速识别物体以及在视频源中定位行人坐标的教程,请参阅此 GitHub存储库。

除了快速评估神经网络之外,TensorRT 还可以与 NVIDIA 的 DIGITS 工作流程一起有效地用于交互式 GPU 加速网络训练(参见图 4)。DIGITS 可以在云端或本地桌面上运行,并通过 Caffe 或 Torch 提供网络训练的简单配置和交互式可视化。有多个 DIGITS 演练示例可让您开始使用自己的数据集训练网络。DIGITS 在每个训练时期保存一个模型快照(通过训练数据)。所需的模型快照或 .caffemodel 以及网络 prototxt 规范被复制到 Jetson TX1,TensorRT 在其中加载和解析网络文件并构建优化的执行计划。

深度学习

图 4:用于在离散 GPU 上训练网络并在 Jetson TX1 上使用 TensorRT 部署的 DIGITS 工作流程。

使用 DIGITS 和DGX-1 超级计算机进行训练,并在 Jetson 上使用 TensorRT,NVIDIA 的完整计算平台使世界各地的开发人员能够使用端到端深度学习解决方案来部署高级人工智能和科学研究。

CUDA 工具包 8.0 和 cuDNN 5.1

CUDA Toolkit 8.0包括针对 Jetson TX1 的集成 NVIDIA GPU 的 CUDA 的最新更新。主机编译器支持已更新,包括 GCC 5.x,NVCC CUDA 编译器已优化,编译速度最高可提高 2 倍。CUDA 8 包括 nvGRAPH,这是一个新的 GPU 加速图形算法库,例如 PageRank 和单源最短路径。CUDA 8 还包括用于在 CUDA 内核以及 cuBLAS 和 cuFFT 等库中使用半精度浮点计算 (FP16) 的新 API。CUDA 深度神经网络库 cuDNN 5.1 版支持最新的高级网络模型,如LSTM(长短期记忆)和RNN(循环神经网络)。看到这个平行的Forall发布关于 cuDNN 现在支持的 RNN 模式的帖子,包括ReLU、门控循环单元 (GRU) 和 LSTM。

cuDNN 已集成到所有最流行的深度学习框架中,包括 Caffe、Torch、CNTK、TensorFlow等。使用通过绑定到 cuDNN 编译的 Torch,最近可用的网络(如 LSTM)启用了深度强化学习等领域的功能,其中 AI 代理根据传感器状态和来自奖励功能的反馈学习在现实世界或虚拟环境中在线操作。通过释放深度强化学习者来探索他们的环境并适应不断变化的条件,人工智能代理可以理解并采用复杂的预测性和直观的类人行为。OpenAI健身房该项目有许多用于训练 AI 代理的虚拟环境示例。在具有非常复杂的状态空间的环境中(例如在许多现实世界场景中发现的环境),强化学习器使用深度神经网络通过估计未来来选择下一步行动基于感官输入的潜在奖励(通常称为 Q-Learning 和 Deep Q-learning Networks:DQNs)。由于 DQN 通常非常大,以便将传感器状态(如高分辨率相机和 LIDAR 数据)映射到代理可以执行的每个潜在动作的输出,因此 cuDNN 对于加速强化学习网络至关重要,因此 AI 代理保持交互性并且可以实时学习。图 5 显示了我为在 Jetson TX1 上实时学习而编写的 DQN 的输出。这个例子的代码,在 GitHub 上可用,在 Torch 中使用 cuDNN 绑定实现,并具有用于集成到机器人平台(如机器人操作系统 (ROS))的 C++ 库 API。

深度学习

图 5:深度强化 Q 学习网络 (DQN) 在玩游戏和模拟时学习,在 Jetson TX1 上运行。

在许多现实世界的机器人应用和传感器配置中,完全可观察的状态空间可能不可用,因此网络无法保持对整个环境状态的瞬时感官访问。来自 cuDNN 的 GPU 加速 LSTM 在解决部分可观察性问题方面特别有效,它依靠从 LSTM 编码的内存来记住先前的经验并将观察结果链接在一起。LSTM 在具有语法结构的自然语言处理 (NLP) 应用程序中也很有用。

Jetson 多媒体 SDK

JetPack 2.3 还包含新的 Jetson Multimedia API 包,为开发人员提供较低级别的 API 访问权限,以便在使用 Tegra X1 硬件编解码器、MIPI CSI 视频摄取 (VI) 和图像信号处理器 (ISP) 时进行灵活的应用程序开发。这是对先前版本中可用的 GStreamer 媒体框架的补充。Jetson Multimedia API 包括摄像头摄取和 ISP 控制,以及用于编码、解码、缩放和其他功能的 Video4Linux2 (V4L2)。这些较低级别的 API 可以更好地控制底层硬件块。

V4L2 支持提供对视频编码和解码设备、格式转换和缩放功能的访问,包括对EGL和高效内存流的支持。用于编码的 V4L2 开放了许多功能,例如比特率控制、质量预设、低延迟编码、时间权衡、提供运动矢量地图以及更多用于灵活和丰富的应用程序开发。通过添加强大的错误和信息报告、跳帧支持、EGL 图像输出等功能,解码器能力得到显着增强。VL42 展示了 Jetson TX1 强大的视频硬件功能,用于图像格式转换、缩放、裁剪、旋转、过滤和多个同步流编码。

为了帮助开发人员快速将深度学习应用程序与数据流源集成,Jetson Multimedia API 包含了使用 V4L2 编解码器和 TensorRT 的强大示例。多媒体 API 包中包含图 6 中的对象检测网络示例,该示例源自 GoogleNet,并通过 V4L2 解码器和 TensorRT 流式传输预编码的 H.264 视频数据。

与核心图像识别相比,目标检测除了提供分类外,还提供图像内的边界位置,使其可用于跟踪和避障。多媒体 API 示例网络源自 GoogleNet,带有用于提取边界框的附加层。在 960×540 半高清输入分辨率下,目标检测网络以比原始 GoogleNet 更高的分辨率捕获,同时使用 TensorRT 在 Jetson TX1 上保持实时性能。

Jetson Multimedia API 包中的其他功能包括 ROI 编码,它允许在一帧中定义多达 6 个感兴趣的区域。这通过允许仅为感兴趣的区域分配更高的比特率来实现传输和存储带宽优化。为了通过 EGLStreams 进一步促进 CUDA 和 OpenGL 等 API 之间的高效流式传输,多媒体 API 中公开了 NV dma_buf 结构。

相机 ISP API

基于 Khronos OpenKCam,低级相机/ISP API 库提供对相机参数和 EGL 流输出的精细每帧控制,从而允许与 GStreamer 和 V4L2 管道进行高效互操作。摄像头 API 为开发人员提供了对 MIPI CSI 摄像头视频摄取和 ISP 引擎配置的较低级别的访问权限。还包括示例 C++ 代码和 API 参考。以下示例代码片段搜索可用的摄像头、初始化摄像头流并捕获视频帧。

  参考。以下示例代码片段搜索可用的摄像头、初始化摄像头流并捕获视频帧。

#include  <阿格斯/阿格斯.h>
#include #include  
#包括#包括 

使用命名空间阿格斯;使用  

// 枚举相机设备并创建 Argus 会话// 枚举相机设备并创建 Argus 会话
UniqueObj cameraProvider(CameraProvider::create());UniqueObj cameraProvider ( CameraProvider :: create ());
CameraProvider* iCameraProvider = interface_cast(cameraProvider);CameraProvider * iCameraProvider = interface_cast ( cameraProvider );

std::vector 相机;::矢量< CameraDevice *>相机
状态状态 = iCameraProvider->getCameraDevices(&cameras);状态状态= iCameraProvider -> getCameraDevices (& camera );

UniqueObj captureSession(iCameraProvider->createCaptureSession(cameras[0],UniqueObj captureSession ( iCameraProvider -> createCaptureSession (相机[ 0 ],
                                                               &地位));&状态));
ICaptureSession *iSession = interface_cast(captureSession);ICaptureSession  

// 配置摄像头输出流参数// 配置摄像头输出流参数
UniqueObj streamSettings(iSession->createOutputStreamSettings());UniqueObj streamSettings ( iSession -> createOutputStreamSettings ());

IOutputStreamSettings *iStreamSettings = interface_cast(streamSettings);IOutputStreamSettings  
    
iStreamSettings->setPixelFormat(PIXEL_FMT_YCbCr_420_888);->设置像素PIXEL_FMT_YCbCr_420_888 );
iStreamSettings->setResolution(Size(640, 480));-> setResolution (大小( 640 ,  

// 将相机输出连接到 EGLStream// 将相机输出连接到 EGLStream
UniqueObj 流(iSession->createOutputStream(streamSettings.get()));UniqueObj( iSession -> createOutputStream ( streamSettings . get ()));
UniqueObj 消费者(EGLStream::FrameConsumer::create(stream.get()));UniqueObj消费者EGLStream :: FrameConsumer :: create ( stream.get 
EGLStream::IFrameConsumer *iFrameConsumer = interface_cast(consumer);EGLStream :: IFrameConsumer  

// 从 EGLStream 获取帧// 从 EGLStream 获取帧
常量 uint64_t FIVE_SECONDS_IN_NANOSECONDS = 5000000000;常量  
UniqueObj 帧(iFrameConsumer->acquireFrame(FIVE_SECONDS_IN_NANOSECONDS,UniqueObj框架( iFrameConsumer -> acquireFrame ( FIVE_SECONDS_IN_NANOSECONDS ,
                                             &地位));&状态));

EGLStream::IFrame *iFrame = interface_cast(frame);EGLStream :: IFrame  
EGLStream::Image *image = iFrame->getImage();EGLStream :: Image  

  Jetson TX1 开发人员套件包括一个带有 Omnivision OV5693 RAW 图像传感器的 5MP 相机模块。现在可以通过相机 API 或 GS​​treamer 插件启用对该模块的 ISP 支持。此版本还可以通过相机/ISP API 完全支持 Leopard Imaging 的 IMX185 的 2.1MP 相机(请参阅 Leopard Imaging 的Jetson 相机套件)。通过首选合作伙伴服务启用 ISP 对其他传感器的支持。此外,USB 摄像头、集成 ISP 的 CSI 摄像头和 ISP-bypass 模式下的 RAW 输出 CSI 摄像头可以与 V4L2 API 一起使用。

  展望未来,所有相机设备驱动程序都应使用 V4L2 媒体控制器传感器内核驱动程序API——有关详细信息和基于开发人员套件相机模块的完整示例,请参阅V4L2 传感器驱动程序编程指南。

  智能机器无处不在

  JetPack 2.3 包含使用 NVIDIA Jetson TX1 和 GPU 技术部署生产级高性能嵌入式系统的所有最新工具和组件。NVIDIA GPU 为深度学习和人工智能领域的最新突破提供支持,用于解决每天面临的重要挑战。使用 GPU 和 JetPack 2.3 中的工具,任何人都可以开始设计高级 AI 来解决现实世界的问题。访问 NVIDIA 的深度学习学院,获取实践培训课程和这些 Jetson wiki 资源,了解深度学习。NVIDIA 的 Jetson TX1 DevTalk 论坛也可用于技术支持并与社区中的开发人员进行讨论。立即下载 JetPack并为 Jetson 和 PC 安装最新的 NVIDIA 工具。

  关于作者

  Dustin 是 NVIDIA Jetson 团队的一名开发人员推广员。Dustin 拥有机器人技术和嵌入式系统方面的背景,喜欢在社区中提供帮助并与 Jetson 合作开展项目。您可以在NVIDIA 开发者论坛或GitHub 上找到他。

  审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分