← 返回展厅
ONNX
ONNX2017

ONNX

年份:2017
平台:跨平台
开发者:Microsoft / Facebook

开放神经网络交换格式,打通深度学习框架之间的互操作性壁垒。

浏览:8
点赞:0

简要介绍

【智能纪元厅】

2017年,ONNX正式问世。由Microsoft / Facebook主导开发,面向跨平台平台用户。

开放神经网络交换格式,打通深度学习框架之间的互操作性壁垒。

技术特色:深度学习、互操作性、模型格式。

影响力评估:技术维度 9/10,商业维度 6/10,文化维度 4/10,用户维度 7/10。

作为智能纪元厅的经典代表,ONNX在软件发展史上留下了深刻的印记。

详细介绍

2017年,人工智能领域正经历着一场前所未有的繁荣,却也暗藏着深刻的裂痕。深度学习框架的“战国时代”已经到来:Google的TensorFlow凭借其强大的生产部署能力占据统治地位,Facebook的PyTorch以动态计算图的灵活性和研究友好性迅速崛起,而Amazon的MXNet、微软的Cognitive Toolkit(CNTK)和苹果的Core ML也各自拥有忠实用户。然而,这种繁荣背后是一个令人沮丧的现实:每一个框架都像一座孤岛,模型一旦在PyTorch中训练完成,就几乎无法直接迁移到TensorFlow Serving上做推理服务;Caffe2的训练结果要部署到iOS设备上的Core ML,需要付出数倍于模型训练的转换工作量。开发者们常常在深夜对着不同框架的API文档,手动重写模型结构,或者编写脆弱的转换脚本,每一条错误信息都像一堵墙,将创新与落地隔开。

这种“框架锁定”的困境,不仅是技术上的麻烦,更是整个AI生态系统的瓶颈。学术界的研究人员可能用PyTorch做出了最前沿的模型,但工业界却因为TensorFlow的部署生态更完善而无法直接使用;硬件厂商如NVIDIA、Intel和ARM,不得不为每个主流框架分别编写优化器,重复劳动让资源严重浪费。正是在这种背景下,2017年初,微软和Facebook的研究人员开始了一场秘密的对话。微软的团队在CNTK和后来的ONNX-Runtime中积累了丰富的中间表示经验,Facebook的团队则刚刚从Caffe2和PyTorch的融合中体会到统一表示的威力。两家公司意识到,与其继续在框架之争中消耗资源,不如共同定义一个开放的标准——一个可以让模型自由流动的“通用语言”。

这个想法最初被称为“Open Neural Network Exchange”,缩写为ONNX。微软的工程师们从他们在编译器领域积累的中间表示(IR)经验出发,设计了一套能够描述任何神经网络计算图的抽象语法。Facebook的团队则贡献了他们在PyTorch中使用的动态计算图追踪技术,确保ONNX能够捕获模型训练时的完整控制流。2017年9月,在Facebook的F8开发者大会上,两家公司联合宣布了ONNX 1.0版本的发布。那一刻,整个AI社区都感到了一丝震动:曾经你死我活的竞争对手,竟然愿意在底层标准上走到一起。ONNX的logo是一个由多个彩色节点组成的网络图形,象征着不同框架之间的连接通道,这个设计本身就传达了一种开放、互联的精神。

ONNX的核心技术设计,可以理解为一种“中间表示”(Intermediate Representation,IR)的架构。它定义了一套标准化的算子集(Operators),比如卷积、池化、归一化、激活函数等,每个算子都有明确的输入输出规范和数学定义。任何深度学习模型,无论最初是用PyTorch的torch.nn.Module还是TensorFlow的Keras Sequential构建的,都可以被“导出”为一个ONNX文件——这个文件本质上是一个protobuf序列化的计算图,包含了模型的拓扑结构、权重参数以及每个算子的属性。这种设计的关键在于,ONNX并不试图成为另一个深度学习框架,它只是一个“翻译器”:它不关心模型是如何训练的,只关心模型的计算图是什么样子。因此,ONNX的编程语言以C++为主,提供Python、C、Java等语言绑定,运行环境为跨平台,支持Windows、Linux、macOS及多种硬件后端(CPU、GPU、NPU)。

ONNX的第一个版本1.0发布于2017年9月,支持的算子数量有限,主要用于前馈神经网络。随后的版本迭代迅速而务实:1.1版本在2017年12月增加了对循环神经网络(RNN)和LSTM的支持;1.2版本在2018年3月引入了张量形状推断功能,让模型在导入时就能自动确定所有中间张量的度,大大减少了调试工作量;1.3版本在2018年7月加入了量化支持,允许模型使用INT8精度进行推理,这是迈向边缘设备部署的关键一步;1.4版本在2018年10月扩展了算子集,增加了对注意力机制和Transformer架构的基础支持,为后来的BERT、GPT等大规模模型铺平了道路。每一个版本的发布,都伴随着微软和Facebook工程师们在GitHub上的数百次代码提交,以及来自社区的大量贡献。

2019年,ONNX迎来了一个里程碑式的转折点:它被移交至Linux基金会治理,成为一个真正中立的开源项目。这一决策意义深远——它意味着ONNX不再属于任何一家商业公司,而是属于整个AI社区。IBM、华为和英特尔等公司相继加入,成为指导委员会的成员。华为的昇腾芯片团队开始为ONNX贡献NPU优化器,英特尔的工程师则专注于CPU上的加速推理,AMD的ROCm平台也加入了GPU支持。这种跨公司的合作,让ONNX的生态迅速膨胀。到2020年,ONNX已经支持超过150个标准算子,覆盖了从计算机视觉(ResNet、YOLO)到自然语言处理(BERT、GPT-2)的几乎所有主流模型架构。

ONNX的市场影响是深远的。在它出现之前,一个典型的AI项目流程是:研究人员用PyTorch训练模型,然后将模型权重保存为PyTorch的.pt文件;部署工程师需要编写一个TensorFlow的模型定义脚本,手动将权重从.pt格式加载到TensorFlow变量中,再导出为.pb文件;如果目标平台是苹果的iOS设备,还需要进一步将.pb文件转换为Core ML的.mlmodel格式。每一步都可能引入精度损失或结构错位。而ONNX的出现,让这个流程简化为:PyTorch训练 → 导出为ONNX → 用ONNX Runtime在任意硬件上推理。或者更优雅的组合:研究人员用PyTorch训练,用ONNX导出,然后通过TensorRT在NVIDIA GPU上加速推理——这种“训练-导出-优化-部署”的流水线,成为了AI工程化的黄金范式。

ONNX的另一个重要贡献是催生了一个庞大的推理优化生态。ONNX Runtime是微软开发的高性能推理引擎,它能够自动识别ONNX模型中的计算图,并针对不同硬件进行算子融合、内存优化和并行调度。例如,在NVIDIA的GPU上,ONNX Runtime会调用cuDNN和TensorRT的库函数;在Intel的CPU上,它会利用MKL-DNN进行矩阵运算加速;在ARM的移动端芯片上,它会使用Neon指令集。这种“一次编写,到处运行”的能力,让ONNX成为了硬件厂商最喜欢的标准——他们只需要为ONNX Runtime编写一个后端,就能让所有ONNX模型在他们的硬件上获得加速,而不需要为每个框架单独适配。

在文化遗产层面,ONNX的影响力已经超越了技术本身。它开创了“开放互操作标准”在AI领域的先河,证明了即使是最激烈的商业竞争对手,也可以在底层标准上达成共识。这种模式后来被MLIR(Multi-Level Intermediate Representation)等项目继承,后者进一步将编译器领域的IR技术引入深度学习。ONNX也深刻影响了硬件设计:新的AI芯片在规划指令集时,都会考虑如何高效执行ONNX算子,而不是只针对某个特定框架优化。2023年,ONNX的GitHub仓库已经积累了超过1.6万颗星,社区贡献者超过800人,其规范文档被翻译成多种语言,成为全球AI工程师的必读材料。

ONNX的轶事趣闻同样值得铭记。据说在2017年最初的合作会议上,微软和Facebook的工程师们因为算子的命名规范争论了整整三天——微软倾向于使用CamelCase(如ConvTranspose),Facebook则坚持使用snake_case(如conv_transpose)。最终双方妥协,采用了混合策略:核心算子使用小写加下划线,而一些历史遗留的算子保留原样。另一个广为流传的故事是,ONNX的1.0版本发布前夜,Facebook的工程师发现PyTorch导出的ONNX模型在微软的CNTK上推理时,精度出现了微妙偏。经过通宵调试,他们发现是批次归一化层的epsilon参数在两种框架中的默认值不同——PyTorch使用1e-5,而CNTK使用1e-4。这个发现促使ONNX规范中明确要求所有框架在导出时必须显式写入所有超参数,而不是依赖默认值。这种跨框架的“对齐”过程,虽然痛苦,却让整个深度学习社区对框架内部的实现细节有了更深的理解。

随着时间推移,ONNX的维护者们也面临新的挑战。Transformer架构的兴起带来了动态控制流(如循环和条件分支)的复杂需求,而ONNX最初的静态计算图设计难以完美表达。2021年的1.10版本引入了“循环”和“如果”等控制流算子,让ONNX能够支持更复杂的模型结构。2022年的1.13版本则增加了对稀疏张量和自定义算子的支持,让研究社区可以轻松地添加新的操作而无需等待官方规范更新。2024年发布的1.16版本,已经能够完整地表示包括GPT-4、Stable Diffusion在内的最先进模型,并且支持混合精度训练和推理。

今天,当你走进任何一家大型科技公司的AI基础设施部门,你几乎一定会看到ONNX的身影。它可能不是最耀眼的明星——没有PyTorch那样的灵活性和研究友好性,也没有TensorFlow那样的庞大生态——但它是那个沉默的“管道工”,让所有框架能够互相连接,让模型能够在任何硬件上运行。正如一位ONNX的核心维护者所说:“我们不是在创造最酷的框架,我们是在创造一个让所有框架都能自由呼吸的空间。”这种谦逊而务实的精神,正是ONNX能够成为AI部署管道中不可或缺一环的根本原因。在软件博物馆的展柜里,ONNX的1.0版本光盘旁边,应该放上一张写满算子签名的白板照片——那是2017年,微软和Facebook的工程师们第一次在纸上画出那个彩色节点网络时的原始草图。它见证了AI从封闭到开放,从碎片化到标准化的蜕变历程。

深度研究

影响力评价

技术影响商业影响文化影响用户规模9888
8.3
综合影响力评分
评分基于技术、商业、文化、用户四个维度的综合考量
🔧技术创新
卓越9/10

对技术发展和工程实践的推动程度

💼商业影响
显著8/10

对商业模式和市场格局的影响深度

🎭文化遗产
显著8/10

在科技文化和社会层面的持久影响力

👥用户覆盖
显著8/10

用户群体的广度和普及程度

评论区 (0)

登录 后参与评论

加载中...