模型部署综述

news2024/11/16 17:38:47

https://github.com/leeguandong/KuaiZaihttps://github.com/leeguandong/KuaiZaiAI 框架部署方案之模型部署概述 - 知乎文@小P 家的 1011010 概述模型训练重点关注的是如何通过训练策略来得到一个性能更好的模型,其过程似乎包含着各种“玄学”,被戏称为“炼丹”。整个流程包含从训练样本的获取(包括数据采集与标注),模型结构的…https://zhuanlan.zhihu.com/p/367042545AI 框架部署方案之模型转换 - 知乎文@ 小P家的0027200 前言模型转换是模型部署的重要环节之一,本文会从深度学习训练框架的角度出发,讲一讲作者本人对模型转换的理解。 1 模型转换的意义模型转换是为了模型能在不同框架间流转。在实际应用时,模型…https://zhuanlan.zhihu.com/p/396781295模型部署入门教程(一):模型部署简介 - 知乎本文作者知乎ID:周弈帆前言OpenMMLab 的算法如何部署?是很多社区用户的困惑。而 模型部署工具箱 MMDeploy 的开源,强势打通了从算法模型到应用程序这 "最后一公里"!今天我们将开启模型部署入门系列教程…https://zhuanlan.zhihu.com/p/477743341

老潘的AI部署以及工业落地学习之路 - 知乎原文来源于 老潘的博客:老潘的AI部署以及工业落地学习之路Hello我是老潘,好久不见各位。 最近在复盘今年上半年做的一些事情,不管是 训练模型、部署模型搭建服务,还是写一些组件代码,零零散散是有一些产出。虽…https://zhuanlan.zhihu.com/p/386488468

https://ai.baidu.com/ai-doc/EASYEDGE/yk3fj850yhttps://ai.baidu.com/ai-doc/EASYEDGE/yk3fj850y训练侧可以使用openmmlab、paddle去训练,只要能转成onnx就可以,paddle有paddle2onnx工具,pytorch可以原生转onnx,有onnx之后,非常建议用onnxruntime的c++推理去三端运行模型。

1. 模型部署综述

        这个问题主要源于中心服务器云端部署和边缘部署两种方式的差异,云端部署常见的模式是,模型部署在云端服务器,用户通过网页访问或者 API 接口调用等形式向云端服务器发出请求,云端收到请求后处理并返回结果。 边缘部署则主要用于嵌入式设备,主要通过将模型打包封装到 SDK,集成到嵌入式设备,数据的处理和模型推理都在终端设备上执行。

        针对上面提到的两种场景,分别有两种不同的部署方案,Service 部署和 SDK 部署。 Service 部署:主要用于中心服务器云端部署,一般直接以训练的引擎库作为推理服务模式。 SDK 部署:主要用于嵌入式端部署场景,以 C++ 等语言实现一套高效的前后处理和推理引擎库(高效推理模式下的 Operation/Layer/Module 的实现),用于提供高性能推理能力。此种方式一般需要考虑模型转换(动态图静态化)、模型联合编译等进行深度优化。

        在数据中心服务场景,对于功耗的约束要求相对较低,在边缘终端设备场景,硬件的功耗会影响边缘设备的电池使用时长。一般会用NPU等专用优化的加速器单元来处理神经网络等高密度计算,能节省大量功耗。

        云端相对更加关注的是多路的吞吐量优化需求,而终端场景则更关注单路的延时需要。CV多选择INT4/INT8,NLP选择FP16。

1.1 模型转换

        模型转换可为计算图生成和计算图转换两大步骤,计算图生成是指框架通过一次inference记录执行算子的类型,输入输出,超参,参数和调用该算子的模型层次,最后把inference过程中得到的算子信息和模型信息结合得到最终的静态计算图。计算图生成的本质是把动态图模型静态表达出来,pytorch的torchscript、onnx、fx模块都是基于模型静态表达来开发的。

        计算图转换是指分析静态计算图的算子对应转换到各种目标格式,这个步骤其实在pytorch中是被封装好的,在torch.onnx.export中,其中在计算图生成之后和计算图转换之前,可以进行计算图优化,例如去除冗余op等,这里一般指的是onnsim之类的库,目前这块可能没有那么复杂了,有pytorch2onnx和pytorch2tensorrt等各种库,只要转成onnx就是可以的。

        用户的一些非框架底层的计算,训练框架自身是无法追踪到的,在计算图中需要自定义算子。     

1.2 量化压缩

        量化过程主要是将原始浮点FP32训练出来的模型压缩到定点INT8(或者INT4)的模型,由于INT8只需要8比特来表示,因此相对于32比特浮点数,压缩率可以到1/4。大部分终端设备都会有专用的定点计算单元,通过低比特指令实现的低精度算子,速度上会有大的提升。

        量化的技术栈主要分为量化训练(QAT, Quantization Aware Training)离线量化(PTQ, Post Training Quantization), 两者的主要区别在于,量化训练是通过对模型插入伪量化算子(这些算子用来模拟低精度运算的逻辑),通过梯度下降等优化方式在原始浮点模型上进行微调,从来调整参数得到精度符合预期的模型。离线量化主要是通过少量校准数据集(从原始数据集中挑选 100-1000 张图,不需要训练样本的标签)获得网络的 activation 分布,通过统计手段或者优化浮点和定点输出的分布来获得量化参数,从而获取最终部署的模型。几乎各个框架都提供了自己的量化函数。paddle有paddleslim。

1.3 模型打包SDK

模型打包,并进行SDK封装。

模型训练:pytorch、paddle、mm系列...

模型转换:torch.onnx.export、paddle2onnx等

模型压缩量化:paddleslim、各个框架也支持量化

模型部署:paddleInference、paddlelite、ncnn、onnxruntime、tensorrt、fastdeploy、mmdeploy、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全局异常处理--Java实战项目篇

系列文章目录 Java后端开发功能模块思路 Spring Boot自动配置–如何切换内置Web服务器 Spring Boot读取配置文件内容的三种方式 该系列文章持续更新,更多的文章请点击我的主页查看哦! 文章目录系列文章目录前言一、出现的问题二、解决问题的方法1. 添加…

iPhone更新iOS 16.3出现应用卡死、闪退的问题怎么办?

在升级最新的 iOS 16.3 系统后,有些用户可能遇到了个别应用无法正常打开,卡死的异常情况。大家可以尝试通过如下方式解决问题。 1.重新启动应用: 如果应用出现卡死或闪退,可从 iPhone 屏幕由底往上滑(或连续按两次 H…

Java变量和数据类型,超详细整理,适合新手入门

目录 一、什么是变量? 二、变量 变量值互换 三、基本数据类型 1、八种基本数据类型 2、布尔值 3、字符串 四、从控制台输入 一、什么是变量? 变量是一种存储值的容器,它可以在程序的不同部分之间共享;变量可以存储数字、字…

C语言进阶——通讯录模拟实现

🌇个人主页:_麦麦_ 📚今日名言:只有走在路上,才能摆脱局限,摆脱执着,让所有的选择,探寻,猜测,想象都生机勃勃。——余秋雨《文化苦旅》 目录 一、前言 二、正…

让我百思不得其解的infer究竟是怎么推导类型的?

情景再现 有这么一个条件类型的基本语法: T extends U ? X : Y; 如果占位符类型U是一个可以被分解成几个部分的类型,譬如数组类型,元组类型,函数类型,字符串字面量类型等。这时候就可以通过infer来获取U类型中某个部分的类型。 …

95后外贸SOHO,年入7位数,他究竟是怎么做的?

外贸SOHO,一年到底能挣多少钱?有人说:“勤勤恳恳,年薪也就十来万吧”;也有人说:“100万而已我早就已经挣到了”;还有人说:“谁说新手难出头?我做跨境半年赚200万&#xf…

Linux设备驱动移植

目录 一、设备树 1.1设备树 1.2设备树文件 1.3设备树语法 1.4Linux内核驱动移植 二、网卡驱动 2.1在make menuconfig界面中选中要安装的驱动 2.2在设备树中添加/修改相应的设备信息 2.3修改时钟 2.4修改eMMc 2.5编译测试 一、设备树 1.1设备树 设备树是一种描述硬…

MATLAB 粒子群算法

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

Cy5 Alkyne,1223357-57-0,花青素Cyanine5炔基,氰基5炔烃

CAS号:1223357-57-0 | 英文名: Cyanine5 alkyne,Cy5 Alkyne | 中文名:花青素CY5炔基CASNumber:1223357-57-0Molecular formula:C35H42ClN3OMolecular weight:556.19Purity:95%Appear…

全网详解MyBatis-Plus updateById方法更新不了空字符串或null的解决方法

文章目录1. 文章引言2. 分析问题3. 解决问题3.1 方法1:全局配置方式3.2 方法2:非null字段验证策略3.3 方法3:通过注解的方式4. 总结1. 文章引言 在开发的过程中,我们经常使用MyBatis-Plus的updateById方法更新数据表,…

ChatGPT学习心得一(使用node+react做了一个案例)

项目地址 http://chat.xutongbao.top 项目截图 使用技术栈 nodeSQLiteredisnginxlog4jsexpressjenkinscdnreactantdreact-scrollbars-customiconfontwebpackpostmanaxiosreduximmutablenpmyarnopenai等等 官网 https://openai.com/blog/chatgpt/ 官方聊天应用 https://ch…

【Linux】多线程编程 - 同步/条件变量/信号量

目录 一.线程同步 1.什么是线程同步 2.为什么需要线程同步 3.如何实现线程同步 二.条件变量 1.常见接口以及使用 2.wiat/signal中的第二个参数mutex的意义 3.代码验证 三.POSIX信号量 1.概念 2.常见接口以及使用 四.条件变量vsPOSIX信号量 一.线程同步 1.什么是线…

公链“私”用

发表时间:2022年3月17日 信息来源:bsvblockchain.org 虽然区块链行业已经诞生了十多年,但直到最近几年这个行业才开始走向专业化并日趋成熟,现在它已成为了一种可为企业实用范例提供合法解决方案的技术。 早年间,与这…

基于ubuntu20.4的wine的MDK5软件的安装

本文基于ubuntu20.4安装MDK5的keil软件,由于MDK不提供linux版本的安装软件,因此需要利用wine软件来安装MDK5软件,具体流程包括wine软件安装、MDK5安装及MDK5的lic添加等3部分内容。具体流程如下所示: (一)…

typescript 路径别名问题(别名设置 开发与打包时路径问题)

在使用TS开发时,一般我们会在tsconfig 中设置别名来让代码变得优雅一点。 将 import xx from …/…/…/service/改为import xx form ‘service/’ tsconfig 别名设置 此时项目结构如下 一般我们可以通过baseUrl 和path两个字段来设置对应的别名 {"include…

爬虫:栖落的电影网站,利用requests和re模块

这是栖落的电影网站地址:https://xxx.xxx 进入网页,显示: 爬取目标:电影的名称、观影人数和评分。 易知本网站的url url "https://xxx.xxx" 本网站会识别出headers中的python请求而拒绝访问,所以需要更改…

企业管理者不得不看!现在的大企业都是怎么做文档管理的?

最近有一位朋友问我:“如果是大型企业,文档该怎么管理?” 说实话,很多内部的CIO、CTO对这个问题都是束手无策。信息文件散乱、难以和内部的组织构架关联起来、查找困难、不同版本更新进度不一,确实存在一些管理上的难题…

【DSP视频教程】第11期:插补算法,曲线拟合丝滑顺畅,统计函数和基础函数加速实现,汇集SIMD,饱和和MAC乘累加应用实战(2023-02-12)

视频教程汇总帖:https://www.armbbs.cn/forum.php?modviewthread&tid110519 DSP视频教程有段时间没有更新了。 当前DSP库从CMSIS软件包里面独立出来,并且更新非常频繁,所以本期视频教程优先给大家简单介绍下新版DSP, 然后为…

物流运输管理系统源码:实现物流公司全链条管理

一套适用于物流公司的物流运输管理系统,涵盖物流公司内部从订单->提货->运单->配车->点到->预约->签收->回单->代收货款的全链条管理系统。 运行环境:Windows.NET4.0SQLSERVER2008R2 私信了解更多! 菜单功能&#…

灰色关联分析法详解及python实践

1. 关于灰色关联分析 1.1. 什么是灰色关联分析 灰色关联分析是指对一个系统发展变化态势的定量描述和比较的方法,其基本思想是通过确定参考数据列和若干个比较数据列的几何形状相似程度来判断其联系是否紧密,它反映了曲线间的关联程度。 在系统发展过…