本文大部分内容为对 ONNX 官方资料的总结和翻译,部分知识点参考网上质量高的博客。
一,ONNX 概述
深度学习算法大多通过计算数据流图来完成神经网络的深度学习过程。 一些框架(例如CNTK,Caffe2,Theano和TensorFlow)使用静态图形,而其他框架(例如 PyTorch 和 Chainer)使用动态图形。 但是这些框架都提供了接口,使开发人员可以轻松构建计算图和运行时,以优化的方式处理图。 这些图用作中间表示(IR),捕获开发人员源代码的特定意图,有助于优化和转换在特定设备(CPU,GPU,FPGA等)上运行。
ONNX 的本质只是一套开放的 ML
模型标准,模型文件存储的只是网络的拓扑结构和权重(其实每个深度学习框架最后保存的模型都是类似的),脱离开框架是没办法对模型直接进行 inference
的。
1.1,为什么使用通用 IR
现在很多的深度学习框架提供的功能都是类似的,但是在 API、计算图和 runtime 方面却是独立的