这应该是业界第一款完整支持 transformer、gpt 等多种模型高速推理的开源引擎。
2017 年 google 提出了 transformer [1] 模型,之后在它基础上诞生了许多优秀的预训练语言模型和机器翻译模型,如 bert [2] 、gpt 系列[13]等,不断刷新着众多自然语言处理任务的能力水平。与此同时,这些模型的参数量也在呈现近乎指数增长(如下图所示)。例如最近引发热烈讨论的 gpt-3 [3],拥有 1750 亿参数,再次刷新了参数量的记录。
如此巨大的参数量,也为模型推理部署带来了挑战。以机器翻译为例,目前 wmt[4]比赛中 sota 模型已经达到了 50 层以上。主流深度学习框架下,翻译一句话需要好几秒。这带来了两个问题:一是翻译时间太长,影响产品用户体验;二是单卡 qps (每秒查询率)太低,导致服务成本过高。
因此,今天给大家安利一款速度非常快,同时支持非常多特性的高性能序列推理引擎——lightseq。它对以 transformer 为基础的序列特征提取器(encoder)和自回归的序列解码器(decoder)做了深度优化,早在 2019 年 12 月就已经开源,应用在了包括火山翻译等众多业务和场景。据了解,这应该是业界第一款完整支持 transformer、gpt 等多种模型高速推理的开源引擎。
lightseq 可以应用于机器翻译、自动问答、智能写作、对话回复生成等众多文本生成场景,大大提高线上模型推理速度,改善用户的使用体验,降低企业的运营服务成本。
相比于目前其他开源序列推理引擎,lightseq具有如下几点优势:
1. 高性能
lightseq推理速度非常快。例如在翻译任务上,lightseq相比于tensorflow实现最多可以达到14倍的加速。同时领先目前其他开源序列推理引擎,例如最多可比faster transformer快1.4倍。
2. 支持模型功能多
lightseq支持bert、gpt、transformer、vae 等众多模型,同时支持beam search、diverse beam search[5]、sampling等多种解码方式。下表详细列举了faster transformer[7]、turbo transformers[6]和lightseq三种推理引擎在文本生成场景的功能差异:
3. 简单易用,无缝衔接tensorflow、pytorch等深度学习框架
lightseq通过定义模型协议,支持各种深度学习框架训练好的模型灵活导入。同时包含了开箱即用的端到端模型服务,即在不需要写一行代码的情况下部署高速模型推理,同时也灵活支持多层次复用。
使用方法
利用 lightseq 部署线上服务比较简便。lightseq 支持了 triton inference server[8],这是 nvidia 开源的一款 gpu 推理 server ,包含众多实用的服务中间件。lightseq 支持了该 server 的自定义推理引擎 api 。因此只要将训练好的模型导出到 lightseq 定义的模型协议[9]中,就可以在不写代码的情况下,一键启动端到端的高效模型服务。更改模型配置(例如层数和 embedding 大小)都可以方便支持。具体过程如下:
首先准备好模型仓库,下面是目录结构示例,其中 transformer.pb 是按模型协议导出的模型权重,libtransformer.so 是 lightseq 的编译产物。
-model_zoo/-model_repo/-config.pbtxt-transformer.pb-1/-libtransformer.so
然后就可以启动triton inference server[8],搭建起模型服务。
trtserver–model-store=${model_zoo}
性能测试
在 nvidia tesla p4 和 nvidia tesla t4 显卡上,笔者测试了 lightseq 的性能,选择了深度学习框架 tensorflow v1.13 和解码场景支持较为丰富的 faster transformer v2.1 实现作为对比。turbo transformers 解码方法比较单一(只支持 beam search ,不支持文本生成中常用的采样解码),尚未满足实际应用需求,因此未作对比。
机器翻译性能
在机器翻译场景下,笔者测试了 transformer base 模型(6层 encoder、6层 decoder 、隐层维度 512 )采用 beam search 解码的性能,实验结果如下:
可以发现,在小 batch 场景下,faster transformer 和 lightseq 对比 tensorflow 都达到了 10 倍左右的加速。而随着 batch 的增大,由于矩阵乘法运算占比越来越高,两者对 tensorflow 的加速比都呈衰减趋势。lightseq 衰减相对平缓,特别是在大 batch 场景下更加具有优势,最多能比 faster transformer 快 1.4 倍。这也对未来的一些推理优化工作提供了指导:小 batch 场景下,只要做好非计算密集型算子融合,就可以取得很高的加速收益;而大 batch 场景下则需要继续优化计算密集型算子,例如矩阵乘法等。
最后在 wmt14 标准的法英翻译任务上,笔者测试了 transformer big 模型的性能。lightseq 在 tesla p4 显卡上平均每句翻译延迟为 167ms ,tesla t4 上减小到了 82ms。而作为对比, tensorflow 延迟均为 1071ms,lightseq 分别达到了 6.41 和 13.06 倍加速。另外,笔者尝试了其他多种模型配置,得到了比较一致的加速效率。例如更深层的模型结构上(encoder加深至 16 层),lightseq 得到的加速比,分别是 6.97 和 13.85 倍。
文本生成性能
上述机器翻译通常采用 beam search 方法来解码, 而在文本生成场景,经常需要使用采样( sampling )来提升生成结果的多样性。下图展示了 transformer base 模型采用 top-k/top-p sampling 的性能测试对比:
可以发现,在需要使用采样解码的任务中,lightseq 在大部分配置下领先于 faster transformer,最多也能达到 1.4 倍的额外加速。此外,相比于 tensorflow 实现,lightseq 对 gpt 和 vae 等生成模型也达到了 5 倍以上的加速效果。
服务压力测试
在云服务上,笔者测试了在实际应用中 gpt 场景下,模型服务从 tensorflow 切换到lightseq 的延迟变化情况(服务显卡使用 nvidia tesla p4)。可以观察到,pct99 延迟降低了 3 到 5 倍,峰值从 360 毫秒左右下降到 80 毫秒左右,详细结果如下图所示:
更多的对比实验结果可以在 lightseq 性能评测报告 [10] 中查看到。
技术原理
以 transformer 为例,一个机器翻译/文本生成模型推理过程包括两部分:序列编码模块特征计算和自回归的解码算法。其中特征计算部分以自注意力机制及特征变换为核心(矩阵乘法,计算密集型),并伴随大量 elementwise(如 reshape)和 reduce(如layer normalization)等 io 密集型运算;解码算法部分包含了词表 softmax、beam 筛选、缓存刷新等过程,运算琐碎,并引入了更复杂的动态 shape。这为模型推理带来了众多挑战:
1. io 密集型计算的细粒度核函数调用带来大量冗余显存读写,成为特征计算性能瓶颈。
2. 复杂动态 shape 为计算图优化带来挑战,导致模型推理期间大量显存动态申请,耗时较高。
3. 解码生成每一步字符过程逻辑复杂,难以并行化计算从而发挥硬件优势。
lightseq 取得这么好的推理加速效果,对这些挑战做了哪些针对性的优化呢?笔者分析发现,核心技术包括这几项:融合了多个运算操作来减少 io 开销、复用显存来避免动态申请、解码算法进行层级式改写来提升推理速度。下面详细介绍下各部分的优化挑战和 lightseq 的解决方法。
算子多运算融合
近年来,由于其高效的特征提取能力,transformer encoder/decoder 结构被广泛应用于各种 nlp 任务中,例如海量无标注文本的预训练。而多数深度学习框架(例如 tensorflow、pytorch 等)通常都是调用基础运算库中的核函数(kernel function)来实现 encoder/decoder 计算过程。这些核函数往往粒度较细,通常一个组件需要调用多个核函数来实现。
以层归一化(layer normalization)为例,tensorflow 是这样实现的:
mean=tf.reduce_mean(x,axis=[-1],keepdims=true)variance=tf.reduce_mean(tf.square(x-mean),axis=[-1],keepdims=true)result=(x-mean)
腾讯云香港服务器如何备案大数据软件商标申请类别手机能连投影仪吗 手机连接投影机的步骤涨知识!seo建站的支出费用如何?腾讯发布Q2财报 腾讯云稳步增长上云服务器怎么样 知乎域名的访问原理知识主机速度超级卡-虚拟主机/数据库问题