论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
云原生
›
onnx runtime文档学习1-介绍与架构
onnx runtime文档学习1-介绍与架构
冬雨财经
金牌会员
|
2024-7-20 03:00:47
|
显示全部楼层
|
阅读模式
楼主
主题
979
|
帖子
979
|
积分
2937
网上充斥着ONNX runtime的简单科普,却没有一个系统介绍ONNX runtime的博客,因此本博客旨在基于官方文档进行翻译与进一步的解释。ONNX runtime的官方文档:https://onnxruntime.ai/docs/
如果尚不认识ONNX格式,可以参照该博客专栏,本专栏对onnx 1.16文档进行翻译与进一步解释,
ONNX 1.16学习笔记专栏:https://blog.csdn.net/qq_33345365/category_12581965.html
如果以为有劳绩,贫苦点赞收藏关注,现在仅在CSDN发布,本博客会分为多个章节,现在尚在连载中。
开始编辑时间:2024/2/29;最后编辑时间:2024/2/29
所有资料均来自誊写时的最新内容。
本专栏链接如下所示,所有相关内容均会在此处收录。
https://blog.csdn.net/qq_33345365/category_12589378.html
介绍
参考:https://onnxruntime.ai/docs/
界说
ONNX Runtime是由微软公司开发和维护的深度学习推理框架。是一个跨平台的呆板学习模子加速器,具有灵活的接口,可以集成硬件特定的库。ONNX Runtime 可以与 PyTorch、Tensorflow/Keras、TFLite、scikit-learn 和其他框架中的模子一起使用。
ONNX Runtime推理
ONNX Runtime 推理支持关键的微软产品和服务,包罗 Office、Azure、Bing,以及数十个社区项目中的呆板学习模子。
ONNX Runtime 推理的示例用例包罗:
进步各种呆板学习模子的推理性能
在差别的硬件和操作系统上运行
在 Python 中训练,但在 C#/C++/Java 应用程序中摆设
对在差别框架中创建的模子进行训练和推理
工作原理
获得一个模子。这可以是从任何支持导出/转换为ONNX格式的框架进行训练的模子。可以查看一些流行框架/库的tutorials。
使用ONNX Runtime加载并运行模子。可以查看basic tutorials,了解怎样在差别编程语言中运行模子。
(可选)使用各种运行时配置或硬件加速器进行性能调优。可以从Performance section作为起点来了解。
即使没有第三步,ONNX Runtime通常会比原始框架提供性能改进。
ONNX Runtime对模子图应用了一系列图优化,然后根据可用的硬件特定加速器将其分割成子图。核心ONNX Runtime中的优化计算内核提供了性能改进,而且分配给子图的进一步加速来自每个Execution Provider。
架构
此章节列出ONNX的高层次设计
参考https://onnxruntime.ai/docs/reference/high-level-design.html
关键目标
最大化并自动地使用差别平台上可用的定制加速器和运行时。
为定制加速器和运行时提供精确的抽象和运行时支持。我们称这种抽象为execution provider。它界说并向 ONNX Runtime 公开一组功能:它可以实行的一组单一或融合节点,其内存分配器等。定制加速器和运行时是execution providers的实例。
我们不希望execution providers总是能够完全在其设备上运行 ONNX 模子。这意味着 ONNX Runtime 必须能够在涉及多个execution providers的异构情况中实行单个模子。
提供支持高级优化,这些优化可以通过 graph-transformation API表达为模子到模子的转换。这些转换分为两类:全局转换(需要分析和转换整个图形)以及局部转换(可以被捕获为简单的(代数)重写规则(rewriting rules))。
高级系统架构
整个流程非常简单。
从一个 ONNX 模子开始,ONNX Runtime起首将模子图转换为其内存中的图表示形式。
它实行一系列与provider无关的优化。
它根据可用的execution provider将图分割成一组子图。
每个子图都分配给一个execution provider。通过使用GetCapability()API 查询实行提供者的本领,以确保一个子图可以由execution provider实行。
关于切分的更多信息
ONNX Runtime 根据可用的实行提供程序将模子图分割成子图,每个子图对应一个独立的provider。ONNX Runtime 提供了一个默认的execution provider,用作无法推送到更专业但更高效的execution providers的运算符的后备实行。直观地说,我们希望尽大概地将计算推送到更专业的execution providers。
我们使用一种简单的图分割技术。可用的execution provider将按照特定次序考虑,而且每个provider将被分配它能够处理的最大子图(大概不止一个)。ONNX Runtime 提供的默认execution provider将作为最后一个考虑,以确保完备性。在将来可以考虑更复杂的优化方法(甚至可以实现为复合的execution provider)。
在概念上,每个分区都被简化为一个单一的融合运算符(fused operator)。通过调用execution provider的 Compile() 方法来创建它,并将其包装为自界说运算符。现在只支持同步实行模式。execution provider公开其内存分配器,用于为execution provider分配输入张量。重写和分区将初始模子图转换为由运算符组成的新图,这些运算符分配给默认execution provider或其他已注册的execution provider。ONNX Runtime 实行引擎负责运行此图。
关键设计
多个线程可以调用同一个推剖析话对象上的Run()方法。具体信息请参阅 API文档(API doc)。
为了实现这一点,所有内核的Compute()函数都是const的,这意味着内核是无状态的。
execution provider对运算符的实现称为内核(kernel)。每个execution provider支持一部分(ONNX)运算符/内核。
ONNX Runtime 保证默认execution provider支持所有运算符。
张量表示:ONNX Runtime 使用尺度的张量运行时值表示。execution provider可以在内部使用差别的表示,但是在其子图的边界大将值转换为尺度表示(或从尺度表示转换位值)是它们的责任。
扩展
添加一个定制运算符/内核
添加一个execution provider
添加一个新的图形转换
添加一个新的重写规则
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
冬雨财经
金牌会员
这个人很懒什么都没写!
楼主热帖
信息与网络安全期末复习(完整版) ...
iOS全埋点解决方案-手势采集 ...
ts保姆级教程,别再说你不会ts了 ...
如何通过JDBC访问MySQL数据库?手把手 ...
Elasticsearch学习系列五(零停机索引 ...
Fastjson反序列化
Pod概述
Linux安装PHP8 新版笔记
《ABP Framework 极速开发》教程首发 ...
Java 将HTML转为XML
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
DevOps与敏捷开发
物联网
Mysql
移动端开发
虚拟化与私有云
Oracle
分布式数据库
网络安全
快速回复
返回顶部
返回列表