预训练模型小型化与部署实战

133 篇文章 9 订阅
108 篇文章 9 订阅

预测部署

模型训练完成之后接下来我们实现模型的预测部署。虽然训练阶段使用的动态图模式有诸多优点,包括Python风格的编程体验(使用RNN等包含控制流的网络时尤为明显)、友好的debug交互机制等。但Python动态图模式无法更好的满足预测部署阶段的性能要求,同时也限制了部署环境。

静态图是预测部署通常采用的方式。通过静态图中预先定义的网络结构,一方面无需像动态图那样执行开销较大的Python代码;另一方面,预先固定的图结构也为基于图的优化提供了可能,这些能够有效提升预测部署的性能。常用的基于图的优化策略有内存复用和算子融合,这需要预测引擎的支持。下面是算子融合的一个示例(将Transformer Block的FFN中的矩阵乘->加bias->relu激活替换为单个算子):
在这里插入图片描述
高性能预测部署需要静态图模型导出和预测引擎两方面的支持,这里分别介绍

动转静导出模型

基于静态图的预测部署要求将动态图的模型转换为静态图形式的模型(网络结构和参数权重)。
在这里插入图片描述
Paddle静态图形式的模型(由变量和算子构成的网络结构)使用Program来存放,Program的构造可以通过Paddle的静态图模式说明,静态图模式下网络构建执行的各API会将输入输出变量和使用的算子添加到Program中。

结合Paddle的静态图机制,Paddle提供了从动态图模型转换并导出静态图模型(包括网络结构和参数权重)的功能,通过jit.to_static和jit.save完成。

paddle.jit.to_static 完成动态图模型到静态图模型的转换。
网络结构:将动态图模型的forward函数转写(重点将Python控制流转换为Paddle对应API的调用),然后以静态图模式执行,生成Program。
参数权重:将动态图模型的参数在生成Program时对应到其中的变量上。
动转静时还需要使用InputSpec提供模型输入的描述信息(shape、dtype和name)保证Program构建过程中形状和数据类型的正确性。

使用推理库预测

获得静态图模型之后,我们使用Paddle Inference进行预测部署。Paddle Inference是飞桨的原生推理库,作用于服务器端和云端,提供高性能的推理能力。

Paddle Inference采用 Predictor 进行预测。Predictor 是一个高性能预测引擎,该引擎通过对计算图的分析,完成对计算图的一系列的优化(如OP的融合、内存/显存的优化、 MKLDNN,TensorRT 等底层加速库的支持等),能够大大提升预测性能。另外Paddle Inference提供了Python、C++、GO等多语言的API,可以根据实际环境需要进行选择,为了便于演示这里使用Python API来完成,其已在安装的Paddle包中集成,直接使用即可。使用 Paddle Inference 开发 Python 预测程序仅需以下步骤:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值