那个啥咱先聊一下这 ONNX 到底是个啥东西?ONNX ,全名叫 Open ,是微软和 在 2017 年搞出来的一种 AI 模型交换格式整这东西就是为了让不同深度学习框架之间能自由地转换和部署模型这么一来,跨框架兼容的问题就解决!像 、、Keras、MXNet 这些框架,它们的模型之间都能通过 ONNX 相互转换,厉害不!
1. 首先呢说为啥要用 ONNX
有好几方面原因,第一个呀是跨框架兼容。咱们搞人工智能开发的时候,用到的深度学习框架可多了,要是模型只能在一个框架里用,那多麻烦有了 ONNX,不管是 ,还是 ,模型都能相互转换,大大方便了咱们开发者。
2. 还有跨设备部署也是重要的一个方面
现在模型的使用场景越来越多,不仅仅是在电脑上,还可以部署到移动设备,比如 iOS 或者 系统的手机 、嵌入式设备上,还有像 CPU、GPU、TPU 都可以用 ONNX 部署模型
3. 再说说这个高效推理优化
它支持 ONNX ,这可不得了在生产环境中,推理性能是很重要的一个指标,有了它,就能显著加速推理性能!咱们开发出来的模型运行速度能快好多
4. 而且还支持多种硬件加速
可以和 、Intel 、Apple 这些结合起来进行优化!感觉像是给模型加了好几层助力一样
那怎么进行 ONNX 跨框架模型转换
其一,得先安装 ONNX 及相关转换工具!
一般,能在 Linux、 或者 OSX 系统上安装的!咱们使用 的话那就更轻松!打开命令行,用这一串命令“conda -c conda-forge onnx”就能搞定!
完了还得要安装能把模型导出为 ONNX 格式的适配包!比如说你想用的是 的话,可以用 conda 装上 ONNX 的拓展 !像“pip onnx ”就行了!要是 框架,得装些不一样工具像是 -onnx !输入这些话“pip -onnx -gpu” !
成功安装好工具后就能转出模型,对已训练模型可以用特别的命令导成 ONNX 这类格式!如下所提示使用例程导出已训练的 模型成为 ONNX 格式
torch.nnuet=torch.nn.(torch.nn.(10,10))=torch.randn(13,10)=”xport.onnx”torch.onnn.(net,,)!这里示例展示对一个简单神经网络顺利做 ONNX 指定格式变换导出!可以使用对应工具把各深度学习框架已经训练好的模型转换到 ONNX
之后就开始做些实际应用我们把导完 ONNX 好模型放在不同硬件方面进行推理计算比如 CPU 、 GPU 等等用下面命令就能把刚刚那转换成 ONNX 格式后的模型放在对应设备启动推理
比如 CPU 上推理算呢就使 as .=.() 而启用 gpu 设备推理可以 as (ort.()) =.() .evel = .el.n = ort.(, , =[‘r’])是不是还是有点晕头转向?
下面再说些常见问题,来一波问答
有人可能想问,这 ONNX 支持多少种深度学习框架?答案是支持好几种主流的,基本上常用的 、、Keras 、MXNet 什么的都能支持,范围很广还有人问用 ONNX 转换模型会不会损失精度?大多数情况下,正常转换不会损失太多精度!但是因为不同框架实现方式有些差异,可能会有极其小的精度偏差,但基本可以忽略不计
总之,我觉得这 ONNX 跨框架模型转换是真的给咱们开发带来了巨大方便!