深度学习模型部署综述(ONNX/NCNN/OpenVINO/TensorRT)(下)

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 今天自动驾驶之心很荣幸邀请到逻辑牛分享深度学习部署的入门介绍,带大家盘一盘ONNX、NCNN、OpenVINO等框架的使用场景、框架特点及代码示例。

1.4 TensorRT


简介:


NVIDIA TensorRT™ 是用于高性能深度学习推理的 SDK。此 SDK 包含深度学习推理优化器和运行时环境,可为深度学习推理应用提供低延迟和高吞吐量。


在推理过程中,基于 TensorRT 的应用程序的执行速度可比 CPU 平台的速度快 40 倍。借助 TensorRT,您可以优化在所有主要框架中训练的神经网络模型,精确校正低精度,并最终将模型部署到超大规模数据中心、嵌入式或汽车产品平台中。


TensorRT 以 NVIDIA 的并行编程模型 CUDA 为基础构建而成,可帮助您利用 CUDA-X 中的库、开发工具和技术,针对人工智能、自主机器、高性能计算和图形优化所有深度学习框架中的推理。


TensorRT 针对多种深度学习推理应用的生产部署提供 INT8 和 FP16 优化,例如视频流式传输、语音识别、推荐和自然语言处理。推理精度降低后可显著减少应用延迟,这恰巧满足了许多实时服务、自动和嵌入式应用的要求。


使用场景:

640.png


框架特点:


1. 权重与激活精度校准

通过将模型量化为 INT8 来更大限度地提高吞吐量,同时保持高准确度

2. 层与张量融合

通过融合内核中的节点,优化 GPU 显存和带宽的使用

3. 内核自动调整

基于目标 GPU 平台选择最佳数据层和算法

4. 动态张量显存

更大限度减少显存占用,并高效地为张量重复利用内存

5. 多流执行

用于并行处理多个输入流的可扩展设计


640.png

图片取自TensorRT的官网,里面列出了TensorRT使用的一些技术。可以看到模型量化、动态内存优化、层的融合等技术均已经在TensorRT中集成了,这也是它能够极大提高模型推断速度的原因。总体来说TensorRT将训练好的模型通过一系列的优化技术转化为了能够在特定平台(GPU)上以高性能运行的代码,也就是最后图中生成的Inference Engine。


使用方法:


1.导出模型

2.选择批次大小

3.选择精度

4.转换模型:

  • 使用 TF-TRT
  • 从文件自动转换 ONNX
  • 使用 TensorRT API 手动构建网络(C++或python)

5.部署模型:

  • TensorFlow 中部署
  • 使用独立的 TensorRT 运行时 API
  • 使用 NVIDIA Triton 推理服务器


具体模型转换部署方法详见:[Quick Start Guide :: NVIDIA Deep Learning TensorRT Documentation]:https://docs.nvidia.com/deeplearning/tensorrt/quick-start-guide/index.html


1.5 Mediapipe


简介:

MediaPipe是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架。在谷歌,一系列重要产品,如 YouTube、Google Lens、ARCore、Google Home 以及 Nest,都已深度整合了 MediaPipe。作为一款跨平台框架,MediaPipe 不仅可以被部署在服务器端,更可以在多个移动端 (安卓和苹果 iOS)和嵌入式平台(Google Coral 和树莓派)中作为设备端机器学习推理 (On-device Machine Learning Inference)框架。


除了上述的特性,MediaPipe 还支持 TensorFlow 和 TF Lite 的推理引擎(Inference Engine),任何 TensorFlow 和 TF Lite 的模型都可以在 MediaPipe 上使用。同时,在移动端和嵌入式平台,MediaPipe 也支持设备本身的 GPU 加速。


使用场景:

640.png


框架特点:


  1. 端到端加速:内置快速 ML 推理和处理,即使在普通硬件上也能加速
  2. 一次构建,随处部署:统一解决方案适用于安卓、iOS、桌面/云、Web 和物联网
  3. 即用型解决方案:展示框架全部功能的尖端 ML 解决方案
  4. 免费和开源:Apache 2.0下的框架和解决方案,完全可扩展和可定制

使用方法:

[代码示例]以人脸检测为例:https://google.github.io/mediapipe/solutions/face_detection

import cv2
import mediapipe as mp
mp_face_detection = mp.solutions.face_detection
mp_drawing = mp.solutions.drawing_utils
# 对于静态图像:
IMAGE_FILES = []
with mp_face_detection.FaceDetection(
    model_selection=1, min_detection_confidence=0.5) as face_detection:
  for idx, file in enumerate(IMAGE_FILES):
    image = cv2.imread(file)
    # 将BGR图像转换为RGB并使用MediaPipe人脸检测对其进行处理.
    results = face_detection.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
    # 绘制每张人脸的人脸检测.
    if not results.detections:
      continue
    annotated_image = image.copy()
    for detection in results.detections:
      print('Nose tip:')
      print(mp_face_detection.get_key_point(
          detection, mp_face_detection.FaceKeyPoint.NOSE_TIP))
      mp_drawing.draw_detection(annotated_image, detection)
    cv2.imwrite('/tmp/annotated_image' + str(idx) + '.png', annotated_image)
# 用于网络摄像头输入:
cap = cv2.VideoCapture(0)
with mp_face_detection.FaceDetection(
    model_selection=0, min_detection_confidence=0.5) as face_detection:
  while cap.isOpened():
    success, image = cap.read()
    if not success:
      print("Ignoring empty camera frame.")
      # 如果加载视频,请使用“中断”而不是“继续”.
      continue
    # 若要提高性能,可以选择将图像标记为不可写以通过引用传递.
    image.flags.writeable = False
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = face_detection.process(image)
    # 在图像上绘制人脸检测注释.
    image.flags.writeable = True
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    if results.detections:
      for detection in results.detections:
        mp_drawing.draw_detection(image, detection)
    # 水平翻转图像以获得自拍视图显示.
    cv2.imshow('MediaPipe Face Detection', cv2.flip(image, 1))
    if cv2.waitKey(5) & 0xFF == 27:
      break
cap.release()


2.框架对比



应用平台:


模型推理部署框架 应用平台
NCNN 移动端
OpenVINO CPU,GPU,嵌入式平台都可以使用,尤其是在CPU上首选OPenVINO。DepthAI嵌入式空间AI平台。
TensorRT 只能用在NIVDIA的GPU上的推理框架。NIVDIA的Jetson平台。
Mediapipe 服务端,移动端,嵌入式平台,TPU。


研发单位:


  • 腾讯公司开发的移动端平台部署工具——NCNN;
  • Intel公司针对自家设备开开发的部署工具——OpenVINO;
  • NVIDIA公司针对自家GPU开发的部署工具——TensorRT;
  • Google针对自家硬件设备和深度学习框架开发的部署工具——Mediapipe;
  • 由微软、亚马逊 、Facebook 和 IBM 等公司共同开发的开放神经网络交换格式——ONNX;


如何选择:


  • ONNXRuntime 是可以运行在多平台 (Windows,Linux,Mac,Android,iOS) 上的一款推理框架,它接受 ONNX 格式的模型输入,支持 GPU 和 CPU 的推理。唯一不足就是 ONNX 节点粒度较细,推理速度有时候比其他推理框架如 TensorRT 较低。
  • NCNN是针对手机端的部署。优势是开源较早,有非常稳定的社区,开源影响力也较高。
  • OpenVINO 是 Intel 家出的针对 Intel 出品的 CPU 和 GPU 友好的一款推理框架,同时它也是对接不同训练框架如 TensorFlow,Pytorch,Caffe 等。不足之处可能是只支持 Intel 家的硬件产品。
  • TensorRT 针对 NVIDIA 系列显卡具有其他框架都不具备的优势,如果运行在 NVIDIA 显卡上, TensorRT 一般是所有框架中推理最快的。一般的主流的训练框架如TensorFlow 和 Pytorch 都能转换成 TensorRT 可运行的模型。当然了,TensorRT 的限制就是只能运行在 NVIDIA 显卡上,同时不开源 kernel。
  • MediaPipe 不支持除了tensorflow之外的其他深度学习框架。MediaPipe 的主要用例是使用推理模型和其他可重用组件对应用机器学习管道进行快速原型设计。MediaPipe 还有助于将机器学习技术部署到各种不同硬件平台上的演示和应用程序中,为移动、桌面/云、web和物联网设备构建世界级ML解决方案和应用程序。


3.小结



本文主要介绍了5种推理框架,目的是使大家更加直观的了解这几种框架的特点,应用场景以及如何选择,为大家之后的学习提供有限的帮助,不足之处请大家多多指正。


参考资料



  1. https://learn.microsoft.com/zh-cn/windows/ai/
  2. https://github.com/Tencent/ncnn
  3. https://zhuanlan.zhihu.com/p/344442534
  4. https://github.com/google/mediapipe
  5. https://www.zhihu.com/question/346965029/answer/2395418101


原文首发微信公众号【自动驾驶之心】:一个专注自动驾驶与AI的社区(https://mp.weixin.qq.com/s/NK-0tfm_5KxmOfFHpK5mBA

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
14天前
|
机器学习/深度学习 数据采集 自然语言处理
使用Python实现深度学习模型:智能社交媒体内容分析
使用Python实现深度学习模型:智能社交媒体内容分析
160 70
|
12天前
|
机器学习/深度学习 PyTorch 调度
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
在深度学习中,学习率作为关键超参数对模型收敛速度和性能至关重要。传统方法采用统一学习率,但研究表明为不同层设置差异化学习率能显著提升性能。本文探讨了这一策略的理论基础及PyTorch实现方法,包括模型定义、参数分组、优化器配置及训练流程。通过示例展示了如何为ResNet18设置不同层的学习率,并介绍了渐进式解冻和层适应学习率等高级技巧,帮助研究者更好地优化模型训练。
21 4
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
|
2天前
|
机器学习/深度学习 搜索推荐 TensorFlow
使用Python实现智能电子商务推荐系统:深度学习模型详解
使用Python实现智能电子商务推荐系统:深度学习模型详解
15 4
|
3天前
|
机器学习/深度学习 人工智能 算法框架/工具
使用Python实现深度学习模型:智能身份验证与防伪
使用Python实现深度学习模型:智能身份验证与防伪
17 1
|
14天前
|
机器学习/深度学习 数据采集 自然语言处理
使用Python实现深度学习模型:智能新闻生成与校对
使用Python实现深度学习模型:智能新闻生成与校对
35 10
|
8天前
|
机器学习/深度学习 自然语言处理
深度学习中的模型压缩技术:精度与效率的平衡
在深度学习领域,模型压缩技术已经成为一项关键技术。它通过减少模型的参数数量和计算量,实现了模型的轻量化和高效化。本文将介绍几种常见的模型压缩方法,包括参数剪枝、量化、知识蒸馏等,并探讨这些方法如何帮助模型在保持精度的同时提高运行效率。我们将分析每种方法的原理、实现步骤以及优缺点,并通过实验结果对比不同方法的性能表现。最后,我们将讨论模型压缩技术在未来可能的发展方向及其应用前景。
9 1
|
13天前
|
机器学习/深度学习 数据采集 网络安全
使用Python实现深度学习模型:智能网络安全威胁检测
使用Python实现深度学习模型:智能网络安全威胁检测
57 5
|
12天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:智能数据隐私保护
使用Python实现深度学习模型:智能数据隐私保护
28 1
|
14天前
|
机器学习/深度学习 存储 自然语言处理
深度学习中的模型压缩技术
在现代深度学习应用中,模型的复杂性和体积不断增加,给存储和计算带来了巨大的挑战。为了解决这些问题,模型压缩技术应运而生,并成为研究热点。本文将介绍什么是模型压缩技术,探讨其常见方法及应用实例,分析其在实际应用中的效果和前景。
21 1
|
14天前
|
机器学习/深度学习 存储 自然语言处理
深度学习中的模型压缩技术
在这篇文章中,我们将探讨深度学习领域中的一项重要技术——模型压缩。随着人工智能技术的迅猛发展,深度学习模型变得越来越复杂,但这也带来了计算资源的巨大需求。为了解决这个问题,模型压缩技术应运而生。本文将介绍什么是模型压缩、为什么需要它以及几种常见的模型压缩方法。
16 0

热门文章

最新文章