|速度超快!字节跳动开源序列推理引擎LightSeq( 二 )


机器翻译性能
在机器翻译场景下 , 笔者测试了 Transformer base 模型(6层 encoder、6层 decoder 、隐层维度 512 )采用 beam search 解码的性能 , 实验结果如下:
|速度超快!字节跳动开源序列推理引擎LightSeq
本文插图

|速度超快!字节跳动开源序列推理引擎LightSeq
本文插图
可以发现 , 在小 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
本文插图

可以发现 , 在需要使用采样解码的任务中 , LightSeq 在大部分配置下领先于 Faster Transformer , 最多也能达到 1.4 倍的额外加速 。 此外 , 相比于 TensorFlow 实现 , LightSeq 对 GPT 和 VAE 等生成模型也达到了 5 倍以上的加速效果 。
服务压力测试
在云服务上 , 笔者测试了在实际应用中 GPT 场景下 , 模型服务从 Tensorflow 切换到LightSeq 的延迟变化情况(服务显卡使用 NVIDIA Tesla P4) 。 可以观察到 , pct99 延迟降低了 3 到 5 倍 , 峰值从 360 毫秒左右下降到 80 毫秒左右 , 详细结果如下图所示:
|速度超快!字节跳动开源序列推理引擎LightSeq
本文插图

更多的对比实验结果可以在 LightSeq 性能评测报告 [10] 中查看到 。
技术原理
|速度超快!字节跳动开源序列推理引擎LightSeq
本文插图

以 Transformer 为例 , 一个机器翻译/文本生成模型推理过程包括两部分:序列编码模块特征计算和自回归的解码算法 。 其中特征计算部分以自注意力机制及特征变换为核心(矩阵乘法 , 计算密集型) , 并伴随大量 Elementwise(如 Reshape)和 Reduce(如Layer Normalization)等 IO 密集型运算;解码算法部分包含了词表 Softmax、beam 筛选、缓存刷新等过程 , 运算琐碎 , 并引入了更复杂的动态 shape 。 这为模型推理带来了众多挑战:
1. IO 密集型计算的细粒度核函数调用带来大量冗余显存读写 , 成为特征计算性能瓶颈 。
2. 复杂动态 shape 为计算图优化带来挑战 , 导致模型推理期间大量显存动态申请 , 耗时较高 。
3. 解码生成每一步字符过程逻辑复杂 , 难以并行化计算从而发挥硬件优势 。


推荐阅读