:腾讯开源TurboTransformers,推理加速性能超TensorRT主流优化引擎( 二 )


类似于 NVIDIA FasterTransformers 方案 , TurboTransformers 将所有 GEMM 运算之间的计算融合成一个调用核心 。 这样有两个好处 , 一是减少了内存访问开销 , 二是减少多线程启动开销 。
对于这些核心 , TurboTransformers 在 CPU 上采用 openmp 进行并行 , 在 GPU 上使用 CUDA 进行优化实现 。 对于比较复杂的 LayerNorm 和 Softmax 算子 , 它们包含了不适合 GPU 上并行的规约操作 , TurboTransformers 为它们设计了创新并行算法 , 极大降低了这些算子的延迟 。
框架层优化
由于 NLP 的采用变长输入特性 , 每次运算中间结果的大小其实并不相同 。 为了避免每次都分配释放内存 , TurboTransformers 通过 Caching 方式管理显存 。
此外 , 团队为 TurboTransformers 提供了一些脚本 , 将二者的预训练模型转化为 npz 格式供其读入 , 以无缝支持 pytorch/tensorflow 训练好的序列化模型 。 考虑到 pytorch huggingface/transformers 是目前最流行的 transformer 训练方法 , TurboTransformers 支持直接读入 huggingface/transformers 预训练模型 。
应用部署
为了减少用户开发难度 , TurboTransformers 提供了 C++和 Python 调用接口 , 可以嵌入到 C++多线程后台服务流程中 , 也可加入到 pytorch 服务流程中 , 增加几行代码即可获得端到端 BERT 加速 。 现阶段更建议通过 docker 部署 TurboTransformers , 一方面保证了编译的可移植性 , 另一方面也可以无缝应用于 K8S 等线上部署平台 。
性能测试
团队首先在三个 CPU 硬件平台上测试了 TurboTransformers 的性能 , 下图显示了在 Intel Xeon 6133 CPU 上的性能测试结果(150 次迭代的均值):
:腾讯开源TurboTransformers,推理加速性能超TensorRT主流优化引擎
本文插图
接下来在四个 GPU 硬件平台上进行测试 , 下图显示了在 NVIDIA RTX 2060 GPU 和 NVIDIA V100 GPU 上的性能测试结果(150 次迭代的均值):
:腾讯开源TurboTransformers,推理加速性能超TensorRT主流优化引擎
本文插图
NVIDIA RTX 2060 GPU 测试结果 。
:腾讯开源TurboTransformers,推理加速性能超TensorRT主流优化引擎
本文插图
NVIDIA V100 GPU 测试结果 。
此外 , 团队还在多个CPU和GPU等平台上测试了 TurboTransformers , 更多性能测试结果可见项目主页 。
【:腾讯开源TurboTransformers,推理加速性能超TensorRT主流优化引擎】目前 , TurboTransformers 暂时只支持 FP32 的计算 , 未来腾讯将对其进一步改进 , 包括对 GPU FP16 的支持等能力等 。