其他
飞桨深度学习开源框架2.0抢先看:成熟完备的动态图开发模式
点击左上方蓝字关注我们
WHY动态图?
模型开发时,采用动态图模式,编程效率高调试方便; 模型训练部署时,支持动态图一键式自动转静态图,实现高性能训练,并无缝衔接模型存储和部署。
成熟完备的动态图开发模式
带来便捷体验
调试程序的便利性。在动态图开发模式下,用户运行飞桨提供的API后,可即时返回运行结果,不需要先创建计算图再运行,这样便于用户更加方便地组织代码,交互式地调试程序。 组建网络的高效性。在动态图开发模式下,用户可以使用Python的条件判断、循环等控制语句来执行模型算法的运算,不再需要使用静态图中的控制操作来执行运算,这样便于用户更加高效地组建网络。 构建模型的灵活性。在动态图开发模式下,用户可以根据控制流选择不同的分支网络,也可以更自然地构建权重共享的网络,更自然地实现自定义损失函数和循环网络、以及其他新颖的网络结构,从而灵活地进行深度学习模型的创新。
极致优化的动态图运行效率
享受卓越性能
model = MyModel()
optimizer = paddle.optimizer.SGD(parameters=model.parameters())
scaler = paddle.amp.GradScaler(init_loss_scaling=1024) # initialize a GradScaler object
for data in data_loader():
with paddle.amp.auto_cast():
loss = model(data) # run in mixed precision
scaled = scaler.scale(loss) # scale the loss
scaled.backward() # do backward
scaler.minimize(optimizer, scaled) # update parameters
一行代码实现动转静
无缝衔接高速推理部署
一行代码实现动转静。
from paddle.static import InputSpec
from paddle.fluid.dygraph import Layer
from paddle.jit import to_static
class SimpleNet(Layer):
def __init__(self):
super(SimpleNet, self).__init__()
self.linear = paddle.nn.Linear(10, 3)
@to_static(input_spec=[InputSpec(shape=[None, 10], name='x'), InputSpec(shape=[3], name='y')])
def forward(self, x, y):
out = self.linear(x)
out = out + y
return out
net = SimpleNet()
paddle.jit.save(net, './simple_net')
控制流相关关键词,例如if-elif-else条件,while循环等;
运算类型,例如and、or、not逻辑运算,类型转化等;
Python函数相关,例如print,len,lambda表达式等;
报错异常相关,例如assert等;
Python基本容器,例如list,dict等。
报错信息对应到动态图代码行。
设置断点功能:通过 pdb.set_trace(),用户可以进行断点调试。
中间状态转换查看:飞桨框架为用户开放接口设定日志级别,让用户可以打印中间状态转换的代码。
查看转换后的静态图代码:飞桨框架为用户提供一个可以直接调用的StaticLayer class,可以让用户获取转换后的静态图代码。
动转静后性能媲美静态图。
闻说双飞桨,翩然下广津
飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个开源开放、技术领先、功能完备的产业级深度学习平台,包括飞桨开源平台和飞桨企业版。飞桨开源平台包含核心框架、基础模型库、端到端开发套件与工具组件,持续开源核心能力,为产业、学术、科研创新提供基础底座。飞桨企业版基于飞桨开源平台,针对企业级需求增强了相应特性,包含零门槛AI开发平台EasyDL和全功能AI开发平台BML。EasyDL主要面向中小企业,提供零门槛、预置丰富网络和模型、便捷高效的开发平台;BML是为大型企业提供的功能全面、可灵活定制和被深度集成的开发平台。
END
精彩活动