前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深度学习模型部署简要介绍

深度学习模型部署简要介绍

作者头像
3D视觉工坊
发布于 2021-12-24 06:46:33
发布于 2021-12-24 06:46:33
1.1K0
举报

一、模型部署简介

近几年来,随着算力的不断提升和数据的不断增长,深度学习算法有了长足的发展。深度学习算法也越来越多的应用在各个领域中,比如图像处理在安防领域和自动驾驶领域的应用,再比如语音处理和自然语言处理,以及各种各样的推荐算法。如何让深度学习算法在不同的平台上跑的更快,这是深度学习模型部署所要研究的问题。

目前主流的深度学习部署平台包含GPU、CPU、ARM。模型部署框架则有英伟达推出的TensorRT,谷歌的Tensorflow和用于ARM平台的tflite,开源的caffe,百度的飞浆,腾讯的NCNN。其中基于GPU和CUDA的TensorRT在服务器高性能计算,自动驾驶等领域有广泛的应用。

二、使用TensorRT进行推理

1、构建TensorRT Engine

使用TensorRT进行推理,共分为两个阶段。

  • 第一个阶段主要是构建TensorRT引擎。目前的主流方式是从onnx转换为TensorRT的引擎。而从各种训练框架都有非常丰富的工具,可以将训练后的模型转换到onnx。

2、运行TensorRT引擎

  • 第二阶段主要是运行TensorRT的引擎。ICudaEngine接口持有优化后的引擎,如果要进行推理,还要从ICudaEngine创建IExecutionContext,进而使用IExecutionContext::execute或者IExecutionContext::enqueue函数进行推理。

3、使用混合精度

TensorRT默认使用float32来进行推理,同时也支持fp16和int8的推理。使用fp16进行推理,可以得到几乎和float32相同精度的结果,但是计算量会比float32少的多,和float32推理的区别仅仅在于多设置一个flag。而使用int8进行推理,则需要首先对模型进行量化,得到每一层的动态范围,以便于在运行时进行设定。

4、动态尺寸

TensorRT还支持动态尺寸。动态尺寸是指在构建引擎时不指定全部的输入尺寸,而是以-1作为占位符,等到运行时再设定具体的尺寸。这种情况下一般需要在构建时,添加优化配置文件。更多关于动态尺寸的说明可以参考相关课程《自动驾驶中的深度学习模型部署实战》

三、TensorRT的优化

1、性能度量工具

在优化代码之前,首先必须要对代码进行度量。最简单直接的度量方法是使用c++标准库的chrono中的API来测量两个时间点的差值。但是TensorRT代码多数为并行代码,因此在CUDA中引入了CUDA Event的概念,可以更方便地对并行代码进行计时。另外还有一些官方的工具,比如trtexec和nvprof,都可以对TensorRT进行剖析。

2、TensorRT优化方法

主要优化方法包含使用batch和stream。batch是指将多个尺寸相同数据组合在一起,送入网络中进行推理。这样比每次只处理一个数据要快的多。使用stream则可以增加更多的并行性。stream也可以和线程一起使用。

更详细的TensorRT优化方法介绍可以参考相关课程《自动驾驶中的深度学习模型部署实战》

四、TensorRT自定义层

TensorRT并不支持所有的深度学习算子。有些算子,还需要我们自己去实现。TensorRT提供了layer plugin接口,我们只需要继承该接口,并实现其中相应的函数即可。

一般建议自定义层的第一步是首先使用CUDA实现自定义层的主要功能,然后再将其和layer plugin的接口进行组合。

五、CUDA编程

为了进一步加速深度学习运行时间,我们一般也会将深度学习模型的前处理和后处理放在GPU上来做。因此我们还需要更深入的学习如何用CUDA C进行编程。

为了方便编写在GPU上运行的代码,英伟达推出了CUDA编程模型,扩展了原始C++。CUDA编程模型主要有两个部分,一个是如何组织线程层次结构,更好地利用GPU的并行性,一个是如何访问设备内存。

1、线程层次结构

CUDA C++对C++进行了扩展,允许程序员定义C++函数,称为CUDA kernel。kernel是用__global__声明指定的,在给定的内核调用中,执行该内核的CUDA线程数量是用新的<<...>>执行配置语法指定的。多个线程组成线程块,而多个线程块进一步组成线程网格。一个块内的线程可以通过一些共享内存来共享数据,并通过同步它们的执行来协调内存访问。

2、内存层次结构

设备内存可以分为全局内存,共享内存,常量内存和纹理内存。每个线程都有私有的本地内存。每个线程块都有共享内存,对该块的所有线程都是可见的,并且与该块具有相同的生命周期。所有线程都可以访问相同的全局内存。

全局、常量和纹理内存空间针对不同的内存使用情况进行了优化。纹理内存还为一些特定的数据格式提供了不同的寻址模式,以及数据过滤。更详细的内容可以参考相关课程《自动驾驶中的深度学习模型部署实战》

3、CUDA编程优化

1)内存优化

一般来说GPU上的计算比CPU快的多,但是将原本CPU代码移植到GPU之后,不仅仅要对比代码的执行速度,还要考虑内存传输的问题。毕竟在GPU运算之前,需要将主机内存中的数据传输到设备内存,这通常是比较耗时的。

优化传输速度的一种方法是使用页面锁定内存。锁页内存由cudaMallocHost申请,由cudaFreeHost释放,它既可以被CPU代码访问,也可以被GPU代码访问。

另外一种方法是重叠数据传输和kernel执行。cudaMemcpyAsync可以进行异步数据传输,而在调用kernel时可以使用指定的CUDA stream进行调用。如下图所示,实现同一功能的代码执行顺序不一样时可能产生完全不同的并行效果。更详细的对比说明参考相关课程《自动驾驶中的深度学习模型部署实战》

2)执行配置优化

所谓执行配置优化指的是在执行cuda kernel时,究竟应该使用多大的线程块以及多大的线程网格才能充分利用硬件性能。我们可以在具体平台上,通过试验来确定block size和grid size。但是有些经验也是可以参考的,比如block size最好是thread warp size的整数倍等。

更详细的优化策略参考《自动驾驶中的深度学习模型部署实战》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 3D视觉工坊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深度学习算法优化系列十七 | TensorRT介绍,安装及如何使用?
由于前期OpenVINO的分享已经基本做完了,笔者也可以成功的在CPU和Intel神经棒上完整的部署一些工作了,因此开始来学习TensorRT啦。先声明一下我使用的TensorRT版本是TensorRT-6.0.1.5 。
BBuf
2020/03/06
6.2K0
GPU推理服务性能优化之路 | 得物技术
随着CV算法在业务场景中使用越来越多,给我们带来了新的挑战,需要提升Python推理服务的性能以降低生产环境成本。为此我们深入去研究Python GPU推理服务的工作原理,推理模型优化的方法。最终通过两项关键的技术: 1.Python的GPU与CPU进程分离,2.使用TensorRT对模型进行加速,使得线上大部分模型服务QPS提升5-10倍左右,大量节约了线上GPU推理服务的成本。
用户10346649
2023/03/10
9800
GPU推理服务性能优化之路 | 得物技术
外卖广告大规模深度学习模型工程实践
总第520篇 2022年 第037篇 在外卖广告CTR场景下,深度学习模型正在从简单DNN小模型过渡到千亿参数复杂模型。基于该背景,本文将重点针对大规模深度模型在全链路带来的挑战,从在线时延、离线效率两个方面展开,阐述外卖广告在大规模深度模型上的工程实践经验,希望能为读者提供思路上的借鉴。 导语 1 背景 2 分析 3 模型推理 3.1 分布式 3.2 CPU加速 3.3 GPU加速 4 特征服务CodeGen优化 4.1 全流程CodeGen优化 4.2 传输优化 4.3 高维ID特征编码 5 样本构建
美团技术团队
2022/07/07
7930
外卖广告大规模深度学习模型工程实践
NVIDIA教你用TensorRT加速深度学习推理计算 | 量子位线下沙龙笔记
12月22日,量子位联合NVIDIA英伟达举行了线下交流会,跟现场近百位开发者同学共同探讨了如何用TensorRT加速深度学习推理计算,详细讲解了GPU的推理引擎TensorRT,以及如何配合Deepstream实现完整加速推理的解决方案。
量子位
2019/04/24
1.5K0
NVIDIA教你用TensorRT加速深度学习推理计算 | 量子位线下沙龙笔记
NVIDIA何琨:AI视频处理加速引擎TensorRT及Deepstream介绍
近日,爱奇艺技术沙龙“多模态视频人物识别的关键技术及应用”成功举办,英伟达开发者社区经理何琨出席并作出精彩分享,以下为分享实录:
量子位
2019/05/16
2.1K0
NVIDIA何琨:AI视频处理加速引擎TensorRT及Deepstream介绍
在NVIDIA Jetson平台上部署深度学习模型需要知道的6个技巧
本文整理自讲座: 演讲者为: 功能强大的低能耗设备的引入引发了可以在边缘运行的高级 AI 方法的新时代。但是由于与边缘设备相关的严格限制,在边缘训练和部署深度学习模型可能会令人生畏。您如何构建一个不太复杂或太大而无法在边缘设备上运行的模型,但仍能充分利用可用硬件?NVIDIA Jetson是当今最受欢迎的低功耗边缘硬件系列之一。它旨在加速边缘硬件上的深度学习模型,无论是机器人、无人机、物联网设备还是自动驾驶汽车。 是什么让 Jetson 上的深度学习变得困难? 在最好的情况下,深度学习并不是那么容易做好
GPUS Lady
2022/03/04
3.1K0
计算机视觉深度学习训练推理框架
前言 本文整理了一些深度学习训练推理框架,涉及计算机视觉、语音、时序任务上的框架,共计20多种。
小白学视觉
2025/02/05
1660
计算机视觉深度学习训练推理框架
英伟达CUDA介绍及核心原理
CUDA定义了一种针对GPU特性的指令集,允许程序员直接编写针对GPU硬件的代码。这些指令专为大规模并行处理而设计,能够高效地驱动GPU上的数千个并行处理单元(如CUDA核心或流处理器)同时工作。
用户7353950
2024/04/30
4.2K0
英伟达CUDA介绍及核心原理
推荐!私藏的深度学习模型推理加速项目
深度学习一般分为训练和部署两大部分。训练部分首先也是最重要的是构建网络结构,准备数据集,使用各种框架进行训练,训练要包含validation和test的过程,最后对于训练好的模型要在实际业务中进行使用。训练的操作一般在线下,实时数据来之后在线训练的情况比较少,大多数情况下数据是离线的,已经收集好的,数据更新不频繁的一天或一周一收集,数据更新频繁的可能几十分钟,在线下有大规模的集群开始对数据或模型进行更新,这样的训练需要消耗大量的GPU,相对而言一般会给一个比较大的batchsize,因为它的实时性要求相对较低,一般训练模型给的是128,甚至有些极端的1024,大的batch的好处是可以充分的利用GPU设备。
AI算法修炼营
2020/05/08
1.4K0
为什么 CUDA 对深度学习至关重要 ?
毫无疑问,你可能已经听说过 CUDA,并且知道它与 NVIDIA GPU 有关。但你可能对 CUDA 的确切含义和用途还不甚了解。究竟,CUDA 是什么呢?它只是一个与 GPU 进行对话的库吗?如果是,它是一个 C++ 库,还是可以通过 Python 等高级语言进行调用?或者,CUDA 是为 GPU 编写代码的编译器?它是否是让操作系统与 GPU 进行通信的驱动程序?...
Luga Lee
2024/11/01
4250
为什么 CUDA 对深度学习至关重要 ?
【AI系统】推理系统介绍
推理系统是一个专门用于部署神经网络模型,执行推理预测任务的 AI 系统。它类似于传统的 Web 服务或移动端应用系统,但专注于 AI 模型的部署与运行。通过推理系统,可以将神经网络模型部署到云端或者边缘端,并服务和处理用户的请求。因此,推理系统也需要应对模型部署和服务生命周期中遇到的挑战和问题。
用户11307734
2024/12/02
2980
来份TensorRT的教程,要实战的哟!
对于Lady来说,我信了你的邪!我决定把之前发布的关于TensorRT的视频教程再综合地整理一遍。
GPUS Lady
2019/06/14
5K0
来份TensorRT的教程,要实战的哟!
旋转目标检测模型-TensorRT 部署(C++)
这次工程部署主要选择了比较熟悉的旋转选择框架-GGHL。如果没有特殊算子的检测框架,依然可以使用下面的这个Pipeline, 旋转目标检测主要分成五参数和八参数的表征方法,分别对应的 x,y,w,h.以及对应的八参数的转化求法 x_1,y_1,x_2,y_2,x_3,y_3,x_4,y_4 。这两种方式在后处理的时候可以互相转换,我们这里选择后者。
墨明棋妙27
2022/09/27
1.7K0
旋转目标检测模型-TensorRT 部署(C++)
深度学习算法优化系列二十 | TensorRT 如何进行细粒度的Profiling
今天我将以GoogleNet为例来展示如何在TensorRT中实现细粒度的Profiling并且顺带介绍一下TensorRT的16Bit推理。
BBuf
2020/03/19
3.3K0
深度学习算法优化系列二十 | TensorRT 如何进行细粒度的Profiling
PyTorch 2.7 发布,进一步助力 NVIDIA 技术生态加速产业智能化转型
全球领先的开源深度学习框架 PyTorch 正式发布 2.7 版本。此次版本不仅在性能、稳定性和开发体验方面进行了重要升级,更进一步强化了与 NVIDIA 全栈技术平台的深度协作,为生成式AI、大模型部署、自动驾驶、智慧医疗等产业应用提供了更强有力的技术支撑。
GPUS Lady
2025/04/28
2350
PyTorch 2.7 发布,进一步助力 NVIDIA 技术生态加速产业智能化转型
为什么深度学习模型在GPU上运行更快?
当前,提到深度学习,我们很自然地会想到利用GPU来提升运算效率。GPU最初是为了加速图像渲染和2D、3D图形处理而设计的。但它们强大的并行处理能力,使得它们在深度学习等更广泛的领域中也发挥了重要作用。
数据科学工厂
2024/07/05
2140
为什么深度学习模型在GPU上运行更快?
推理速度数倍提升,大幅简化多GPU后端部署:Meta发布全新推理引擎AITemplate
机器之心报道 机器之心编辑部 刚刚,Meta 发布了革命性的推理引擎 AITemplate。测试结果显示,相比 PyTorch Eager,AITemplate 在 NVIDIA GPU 上实现了最高 12 倍的性能提升,在 AMD GPU 上实现了高达 4 倍的性能提升。 众所周知,GPU 在各种视觉、自然语言和多模态模型推理任务中都占据重要位置。然而,对于高性能 GPU 推理引擎,AI 从业者几乎没有选择权,必须使用一些平台专有的黑盒系统。这意味着如果要切换 GPU 供应商,就必须重新实现一遍部署系统
机器之心
2022/10/08
1.2K0
推理速度数倍提升,大幅简化多GPU后端部署:Meta发布全新推理引擎AITemplate
深度 | 英伟达深度学习Tensor Core全面解析
AI 科技评论消息,不久前,NVIDIA在SIGGRAPH 2018上正式发布了新一代GPU架构——Turing(图灵),黄仁勋称Turing架构是自2006年CUDA GPU发明以来最大的飞跃。Turing架构的两大重要特性便是集成了用于光线追踪的RT Core以及用于AI计算的Tensor Core,使其成为了全球首款支持实时光线追踪的GPU。
AI科技评论
2018/09/21
4K0
深度 | 英伟达深度学习Tensor Core全面解析
CUDA驱动深度学习发展 - 技术全解与实战
CUDA(Compute Unified Device Architecture)是由NVIDIA开发的一个并行计算平台和应用编程接口(API)模型。它允许开发者使用NVIDIA的GPU进行高效的并行计算,从而加速计算密集型任务。在这一节中,我们将详细探讨CUDA的定义和其演进过程,重点关注其关键的技术更新和里程碑。
TechLead
2023/12/14
1.2K0
CUDA驱动深度学习发展 - 技术全解与实战
【AI系统】GPU 架构回顾(从2010年-2017年)
1999 年,英伟达发明了 GPU(graphics processing unit),本文将介绍英伟达 GPU 从 Fermi 到 Blackwell 共 9 代架构,时间跨度从 2010 年至 2024 年,具体包括费米(Feimi)、开普勒(Kepler)、麦克斯韦(Maxwell)、帕斯卡(Pashcal)、伏特(Volt)、图灵(Turing)、安培(Ampere)和赫柏(Hopper)和布莱克韦尔(Blackwell)架构。经过 15 年的发展,CUDA 已成为英伟达的技术“护城河”,Tensor Core5.0,NVLink5.0,NVswitch4.0,Transformer Engine2.0 等技术迭代更新,正如英伟达公司官方宣传语所言:“人工智能计算领域的领导者,推动了 AI、HPC、游戏、创意设计、自动驾驶汽车和机器人开发领域的进步。”
用户11307734
2024/11/27
3070
推荐阅读
相关推荐
深度学习算法优化系列十七 | TensorRT介绍,安装及如何使用?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档