Facebook 和微软宣告,推出 Open Neural Network Exchange(ONNX,开放神经收集交流)格局,这是一个用于表现深度进修模子的尺度,可以使模子在分歧框架之间停止转移。ONNX是迈向开放生态体系的第一步,AI开辟人员可以轻松地在最早进的对象之间转换,并选择最合适他们的组合。
以下是Facebook、微软官方博客的引见:
在开辟进修模子时,工程师和研讨人员有很多AI框架可以选择。在项目开端时,开辟人员必需选择对应一个框架的特点(features)。许多时刻,在研发进程中停止试验时选择的 feature 与临盆所需的 feature 是纷歧致的。很多组织都没有很好的办法来清除这些操作形式之间的差距,只要采用一系列发明性的处理方法来应对,例如请求研讨人员在临盆体系中任务某人工翻译模子。
Facebook 与微软一路开辟了 ONNX,以弥合这一差距,让AI开辟人员可以选择相符项目以后阶段的框架,并跟着项目标成长轻松切换框架。Caffe2,PyTorch 和Cognitive Toolkit 将在9月份宣布对 onNX 的支撑,这将许可在个中一个框架练习的模子导出到另外一个框架来停止推理。我们约请社区参加这一尽力,并在其生态体系中支撑ONNX。完成分歧框架之间的互相操作性,简化从研讨到临盆的进程,将有助于进步AI社区立异的速度。
onNX 在 Facebook 外部应用
onNX 是 Facebook 深度进修办法的主要构成部门。在Facebook的AI团队(FAIR和AML)中,我们赓续测验考试推进AI的前沿研讨,开辟更好的进修算法。当我们获得一个冲破时,我们愿望尽快在运用中供给更好的技巧。经由过程ONNX,我们专注于将AI研讨和产物完成更慎密地联合在一路,从而更快地停止立异和安排。
测验考试新模子的人们,特殊是研讨人员,愿望在编写神经收集时具有最年夜的灵巧性和表示力——从静态神经收集到支撑梯度突变(gradients of gradients),同时坚持根本的ConvNet机能。研讨人员也想完成疾速迭代,这意味着他们须要优良的交互式开辟和调试对象。PyTorch旨在冲破研讨框架的局限,使研讨人员免受平台的限制,让他们可以或许比之前更轻易地表达设法主意。
相反,产物流程天天都须要对年夜量新的数据停止练习和推理,同时坚持模子年夜部门不变。细心优化产物的特定模子的代码,例如经由过程量化和细心编写人工调剂的代码(hand-tuned code)之类的技能节俭资本。Caffe2曾经在产物、挪动和极端斟酌机能的情形构建起来。Caffe2的外部灵巧并且高度优化,所以我们可以应用技能将更年夜更好的模子安排到机能缺乏的硬件中。
经由过程 ONNX,我们可以在这两个方面取得最优。我们如今可以从PyTorch导出很多罕见神经收集的模子,并将它们安排在Caffe2上。这是将最新的研讨结果疾速推向临盆的第一步。在接上去的几个月中,我们将增强ONNX,并对Caffe2和PyTorch停止改良,使其可以或许更深刻地互通。
怎样运转
为了完成ONNX支撑,我们必需对PyTorch和Caffe2停止更改,而且在框架之间同一运算符。在Caffe2中,这个进程相似于添加一个翻译器,由于Caffe2曾经有一个内置的静态图。在PyTorch中,神经收集是被界说为法式而不是显式图,是以这带来了更年夜的挑衅。为了从法式中提取图,我们开辟了一个跟踪器,将运转时法式履行的操作记载上去。跟踪法式清除了庞杂性,并使其更轻易转换为图表现。
要懂得它是若何任务的,看以下代码:
x = y * 2
if someComplicatedFunction(): z = x + y
else: z = x * y
要直接导出此代码,ONNX将不能不支撑conditionals和某些庞杂函数 someComplicatedFunction();现实上成了通用编程说话。但是,在很多深度进修模子中,someComplicatedFunction() 的成果在推理进程中老是雷同的。例如,在PyTorch前提中,平日是对输出张量的年夜小或尺寸停止的一些盘算。在这些情形下,经由过程代码的单一跟踪将会更简略,而且可以轻松地在ONNX中表现为:
#someComplicatedFunction() == True
x = y * 2 z = x + y
今朝,我们的tracer能与很多罕见的神经收集合营应用,但PyTorch中一些更先辈的法式,好比有静态流掌握(dynamic flow control)的法式还不可。跟着时光的推移,我们将完美ONNX和tracer来支撑这些法式,闪开发人员可以充足应用PyTorch的灵巧性与Caffe2的高机能壮大安排功效。
微软:onNX 表征具有框架互操作性和同享优化两年夜长处
在 Facebook 宣布博客的同时,微软也宣布了题为《微软和 Facebook 为 AI 模子的互操作性构建开放生态体系》的博客。在博客中,微软表现:
微软给年夜家做出的许诺是“”人人无机会更便利,更有价值。我们供给各类平台和对象来增进这一点,包含我们的认知对象包,一个构建深层神经收集的开源框架。我们还与其他分享我们不雅点的组织协作,赞助 AI 社区。
明天,我们愉快地宣告,微软和Facebook 一路推出Open Neural Network Exchange (ONNX,开放神经收集交流) 格局。 ONNX为AI 框架生态体系中的互操作性和立异供给了同享的模子表征。CognitiveToolkit,Caffe2和PyTorch都将支撑ONNX。微软和Facebook 配合开辟了onNX 这一开源项目,并愿望社区可以或许赞助其赓续退化。
甚么是onNX 表征?
Cognitive Toolkit 和其他框架供给了使开辟人员更轻易构建和运转表征神经收集的盘算图的界面。固然供给的功效相似,然则明天的每一个框架都有本身表征这些图的格局。 ONNX表征有以下重要长处:
1.框架互操作性
开辟人员可以更轻松地在框架间转换,并为手头的义务选择最好对象。每一个框架都针对详细特征停止了优化,如疾速练习,支撑灵巧的收集架构,在挪动端停止推理等等。很多时刻,研发进程中最主要的特征与临盆环节最主要的特征是分歧的。这招致开辟人员在框架之间停止模子转换时,会因框架应用不准确或显著延迟而使得效力下降。应用onNX 表征的框架简化了这一点,使得开辟人员加倍灵巧。
2.同享优化
硬件供给商和其他改良神经收集机能的优化可以经由过程定位onNX 表征来同时影响多个框架。优化常常须要被分离整合进入每一个框架,这一进程很费时光。onNX 表征使得优化更轻易完成,从而笼罩更多开辟人员。
技巧总结
onNX 供给了可扩大盘算图模子的界说,和内置 operators 和尺度数据类型的界说。起先我们专注于推理(评价)所需的才能。
每一个盘算数据流图被结构为构成非轮回图的节点列表。节点具有一个或多个输出和一个或多个输入。每一个节点是对 operators 的挪用。
可用性
onNX 代码和文档的初始版本如今曾经在GitHub(https://github.com/onnx/onnx)上开源,召唤着社区的立刻介入。我们将积极展开基于onNX 的任务,行将推出的Cognitive Toolkit 也将对其支撑。我们还筹划和Facebook一道,供给安排参考、示例、对象和model zoo。
onNX 表征构成了开放生态体系的基本,使 AI 更轻易获得并富有价值。开辟人员可认为其义务选择适合的框架,框架作者可以专注于立异,硬件供给商可以简化优化流程。我们愿望社区可以或许支撑ONNX,以完成这一使人高兴的愿景。
下一步是甚么
我们明天宣布最新版本的Caffe2和PyTorch,带有ONNX支撑。我们愿望你对新功效能跟我们一样高兴!它们处于晚期阶段,我们愿望你们检讨出来并提交你的反应和改良。我们将持续成长ONNX,PyTorch和Caffe2,确保开辟人员具有AI的最新对象。敬请等待后续更新!