首页 科技 正文

飞桨深度学习开源框架2.0:成熟完整的动态图开发模型。

允中 发自 凹非寺量子位 编纂 | 公众号 QbitAI

百度飞桨于近期公布,深度进修开源框架2.0争先版本正式发布,进入2.0时期。个中一项重大年夜升级,就是推出加倍成熟完全的敕令式编程模式,即平居说的动态图模式。同时在该版本中将默许的开辟模式定为动态图模式,满足用户直接利用该模式完成较量争论机视觉、天然措辞措置、语音、举荐等全场景的AI算法开辟。可见飞桨团队对接纳动态图模式开辟的成熟度,和将来主力推行利用有着强大年夜的自傲和期待。

为何飞桨在开辟模式升级上延续大年夜量投入?

动态图模式可以真正给恢弘年夜开辟者带来哪些实打实的优点?

本文将为你带来深度解读。

WHY动态图?

深度进修框架在编程界面上,一般有两种编程模式:敕令式编程和声明式编程,即动态图和静态图。动态图模式下轨范可即时履行并输出后果,编程体验和调试便捷性更佳;静态图模式下需完成整体收集布局的界说再履行,编程调试便捷性不够,但可以或许对全局编译优化,更有益于性能的晋升,并天然利于模子留存和布置。

飞桨同时支持这两种编程模式,颠末持久的深切手艺索求和创新,已实现同时兼顾两种体式格局的优势,杀青了更有益于开辟者的“消息同一的空想国”:

模子开辟时,接纳动态图模式,编程效率高调试利便;模子演习布置时,支持动态图一键式主动转静态图,实现高性能演习,并没有缝跟尾模子存储和布置。

△ 图1 飞桨消息同一开辟模式

在飞桨开源框架最新版本上,该模式已到达很高的成熟完全度。开辟者既可体验到动态图开辟模式带来的极大年夜的便当性,用动态图实现深度进修范畴最前沿的模子算法;又可享遭到颠末极致优化的运行效率,而且可以很轻易的将动态图转换为静态图来进行推理和布置。

接下来将一一为你揭晓真实体验后果。

成熟完全的动态图开辟模式,带来便捷体验

成熟的动态图模式,可认为开辟者带来极致体验,更优雅地编程。总结一下,便当性主要显露在以下三方面:

调试轨范的便当性。在动态图开辟模式下,用户运行飞桨供应的API后,可即时返回运行后果,不需要先成立较量争论图再运行,如许便于用户加倍利便地组织代码,交互式地调试轨范。组建收集的高效性。在动态图开辟模式下,用户可以利用Python的前提判定、轮回等节制语句来履行模子算法的运算,不再需要利用静态图中的节制操作来执走运算,如许便于用户加倍高效地组建收集。构建模子的天真性。在动态图开辟模式下,用户可以按照节制流选择分歧的分支收集,也可以或许更天然地构建权重同享的收集,更天然地实现自界说损失落函数和轮收受接管集、和其他新奇的收集布局,从而天真地进行深度进修模子的创新。同时,在最新版本上,飞桨动态图供应了对较量争论机视觉、天然措辞措置、举荐系统、语音辨认等范畴主流算法模子的周全支持,同时也对前沿的学术研究供应了异常好的支持。已开放的动态图模子数量到达了100+。这些模子都已开源在GitHub上,开辟者可基于动态图模子进行AI利用开辟和前沿学术研究:https://github.com/PaddlePaddle/models/tree/develop/dygraph

更多飞桨动态牟利用实践方式,欢迎会见飞桨官网文档。

△ 图2.支持动态图模式的算法模子(部分示例)

△ 图3 支持动态图模式的前沿学术论文中的模子(部分示例)

极致优化的动态图运行效率,享受卓着性能

飞桨对动态图运行效率的打磨,已延续数个版本,今朝在主流的义务上,飞桨动态图履行模式已可以或许到达与静态图媲美的程度,甚至到达业界领先程度。

△ 测试环境申明:CUDNN 7版本,CUDA 10.1版本,GPU V100单卡

在最新版本上,支持了主动夹杂精度和量化演习功能,在大年夜幅晋升效率的同时,包管究竟模子的后果和本来的一致。以主动夹杂精度为例,代码实现以下:

夹杂精度演习颠末历程框架主动选择演习精度(AUTOMATIC CASTING)实现,历程以下图所示。对模子的每一个履行操作,AutoCast模块主动决意利用哪一种精度的数据类型,例如:对可以或许利用fp16进行(好比conv,relu 等op),会优先利用fp16来进走运算,来晋升履行效率;然则对利用fp16会影响精度的op(好比exp,softmax运算等op),会主动转换为fp32进行较量争论,包管收敛后果;对单个op输入的数据类型不一致的环境,会颠末历程主动的转换,使得可以或许可以或许支持运算。这些选择都是框架会主动进行的,用户仅需要调用上面示例的代码即可。

△ 图4 夹杂精度演习AUTOMATIC CASTING流程

一行代码实现动转静,无缝跟尾高速推理布置

飞桨框架最新版本的动转静功能,Python语法笼盖度处于业界领先程度,满足用户利用动态图编程调试、主动转静态图演习布置的需求;而且转换后性能几近无损,实现媲美静态图的后果。

一行代码实现动转静。

消息转换的操作异常简单,仅需添加一个装潢器( @to_static ),框架就会主动将动态图的轨范,转换为静态图的program,并利用该program演习、留存为静态图模子以实现推理布置。

飞桨动转静功能除简单的一键式操作,还在进一步下降转换失足概率、供应便捷的转换诊断东西方面做了大年夜量工作,为用户供应便捷的体验。

广笼盖Python语法,下降转换失足概率:飞桨颠末历程将Python写的动态图代码转写为静态图代码,并在底层主动利用静态图履行器运行。这类转换体式格局使得用户可以天真利用Python语法及节制流来构建神经收集模子,而且可以或许行使静态图的图优化策略进行加速。今朝飞桨为用户供应以下几大年夜类的语法支持,语法笼盖度处于业界领先程度:

节制流相干关头词,例如if-elif-else前提,while轮回等;运算类型,例如and、or、not逻辑运算,类型转化等;Python函数相干,例如print,len,lambda表达式等;报错异常相干,例如assert等;Python根基容器,例如list,dict等。供应转换Debug功能,便捷查看转换信息:为了利便开辟者查看转换后的静态图代码是不是合适预期,飞桨供应了近似编译器的易用功能来匡助用户:

报错信息对应到动态图代码行。设置断点功能:颠末历程 pdb.set_trace(),用户可以进行断点调试。中央状态转换查看:飞桨框架为用户开放接口设定日记级别,让用户可以打印中央状态转换的代码。查看转换后的静态图代码:飞桨框架为用户供应一个可以直接调用的StaticLayer class,可让用户获得转换后的静态图代码。动转静后性能媲美静态图。

性能方面,在包管用户一键轻松实现动态图转静态图的同时,动态图转静态图今后的推理性能和静态图完全一致,兼顾动态图易用性和静态图布置性能的需求。

闻说双飞桨,翩然下广津

以上即飞桨动态图模式的最新创新进展,动态图开辟模式颠末延续数个版本的打磨,不管是功能特点、易用性,照样性能程度,都到达了相当的成熟完全度,甚至到达业界领先程度。飞桨一向潜心于底层根本手艺的深耕,坚持为企业用户和开辟者供应最天真易用的财产级深度进修框架,并以『用户体验的延续优化』和『财产实践的打磨』作为迭代向前的两个主要驱动轮。

将来飞桨的成长离不开恢弘年夜开辟者的加持,期待更多的开辟者到场飞桨,飞桨也将延续完善动态图开辟模式,开放更多动态图实现的领先算法模子,优化运行效率,为开辟者进行模子开辟和睁开前沿创新工作供应助力,踏着飞桨的战船疾风向前。

非特殊说明,本文由原创资讯网原创或收集发布。

转载请注明本文地址:http://www.68nw.com/kj/1840.html