目录
计算量最大的地方就是在encoder和decoder中,transformer中的self-attention的计算
通过减少GPU的空闲时间,优化transformer的性能。也就是尽可能的把要计算的东西融合起来。
解码策略2:beam search,每次解码选择累积概率最高的两个,对当前结果打分,进入下一步解码,累积得分最高的两个会被留下,不断迭代每轮最后得到两个得分最高的,其实也是贪心,但是搜索空间变大了
本课以机器翻译为例介绍整个文本到文本生成预测的优化工作,其中很常用的transformer结构,transformer参数量越大效果越好,这也使基于transformer的模型规模越来越大,但QPS(每秒处理句子的个数)却上不去。其中self-attention性能瓶颈在于在具体的计算(kernel)之前,会有API调用算子,算子调用cuda kernel的过程,因为是CPU在调用,所以GPU处于空闲状态。
通过减少GPU的空闲时间,优化transformer的性能。也就是尽可能的把要计算的kernel融合起来。
transformer性能优化上的一个工作fastertransformer的做法:
- 解码:融合了decoder、融合了embedding,position encoding、融合了beam search,sampling解码策略。
- encoder融合:将除去GEMM矩阵乘法的计算部分,进行了最大程度的融合,在一些配置下性能提升一倍以上。共计调用38个算子
- decoder融合:decoder比encoder多一层multi-head attention,同样将除去GEMM矩阵乘法的计算部分,进行了最大程度的融合。共计调用63个算子。faster transformer已经支持pre-normalization,PaddleNLP扩展又使其能支持post-normalization。(pre-normalization的结构能在一定程度上消除post-normalization在训练中的不稳定性)支持多种解码策略
介绍了三种生成解码策略:
- 贪心搜索,直接选概率最大的词,将选择的单词补充道生成的句子最后,用于下次解码,停止的条件时生成EOS终止token或者达到了指定最大的生成长度,用局部最优期望找到全局最优
- beam search,每次解码选择累积概率最高的两个,对当前结果打分,进入下一步解码,累积得分最高的两个会被留下,不断迭代每轮最后得到两个得分最高的,其实也是贪心,但是搜索空间变大了,虽然不一定能找到全局最优的结果,但可以找到一个相对更优的结果
- T2T beam search,搜索空间相比beam search更大了
如何使用这个性能加速:
- 数据准备:分词,转化为id
- 模型准备
- 使用PaddleNLP调用fastertransformer的api,需要提供一些超参数
- just in time自动编译
- 载入checkpoint
- 实现预测加速
且支持多种结构,encoder-decoder,单向结构,encoder,双向编码,单向解码生成等
1 文本生成介绍
本课是文本到文本的生成,以机器翻译为例介绍整个预测的优化工作
1.1 什么是机器翻译
平行语料:两种语言的同时出现,则可对应起来
转成向量+隐藏状态,序列依赖的
编码部分:先向量化表示,encoder中会进行self-attention(将输入线性变换后得到qkv,求一个w,权重越大注意力越高,然后得到输出),encoder会得到输出其中已经编码了位置信息,且容易学到长程依赖
transformer的参数量越大越好,但是LSTM不是,因为transformer的这个特性,很多基于transformer的模型的规模越来越大
但是规模越来越大,QPS上不去。QPS:每秒处理句子的个数。也就难以用到产业级
2 transformer性能瓶颈分析和优化
计算量最大的地方就是在encoder和decoder中,transformer中的self-attention的计算
self-attention的实现在pp中调用了20个左右的基本算子
在具体的计算之前,会有API调用算子,算子调用cuda kernel的过程,也就是白色部分,因为是CPU在调用,所以GPU处于空闲状态。
通过减少GPU的空闲时间,优化transformer的性能。也就是尽可能的把要计算的东西融合起来。
如fastertransformer所做的,将两个GEMM之间的计算尽可能的全部融合成了一个kernel。如下图
解码策略1:贪心搜索,直接选概率最大的词
解码策略2:beam search,每次解码选择累积概率最高的两个,对当前结果打分,进入下一步解码,累积得分最高的两个会被留下,不断迭代每轮最后得到两个得分最高的,其实也是贪心,但是搜索空间变大了
解码策略3:T2T beam search,
因为decoder时间占比很大,所以需要进一步优化
优化策略总结
3 PaddleNLP机器翻译应用示例
效果