其他
新一代CTR预测服务的GPU优化实践
总第470篇
2021年 第040篇
1 背景
2 CTR模型GPU推理的挑战
2.1 应用层的挑战
2.2 框架层的挑战
2.3 硬件层的挑战
3 优化手段
3.1 算子融合
3.2 CPU-GPU数据传输优化
3.3 高频子图手工优化
3.4 CPU-GPU分流
4 压测性能分析
5 整体架构
6 不足之处与未来规划
1 背景
2 CTR模型GPU推理的挑战
2.1 应用层的挑战
CTR模型结构多变,包含大量业务相关的结构,同时新的SOTA模型也层出不穷,硬件供应商由于人力受限,会重点优化常用的经典结构,如ResNet。对于没有收敛的结构,官方没有端到端的优化工具可以支持。 CTR模型中通常包含较大的Embedding表结构,要考虑到Embedding表存在显存放不下的情况。 在典型的推荐场景中,为了达到更快的POI曝光的目的,模型的时效性要求很高,在线模型服务需要提供增量更新模型的能力。
2.2 框架层的挑战
算子层面:目前主流的深度学习框架,如TensorFlow和PyTorch,可以说是深度学习第二代框架,它们首先要解决第一代框架Caffe的问题,Caffe有一个明显问题就是Layer的粒度过粗,导致那个时代的算法开发者都必须有“自己写自定义层”的能力。TensorFlow和PyTorch都把模型表达能力放在较高的优先级,导致算子粒度比较小,无论是对CPU还是GPU架构,都会带来很大的额外开销。 框架层面:TensorFlow和PyTorch本质都是训练框架,对算法开发者比较友好,但非部署友好。其中隐含了很多为了方便分布式训练做的设计,比如TensorFlow为了方便将Variable拆到不同的PS上,内置了Partitioned_Variable的设计。在基于GPU单机预测的场景下,这些结构也会带来额外的开销。
2.3 硬件层的挑战
算子粒度过细,GPU执行效率低下。 模型结构多变,手工优化投入大,通用性差。
3 优化手段
3.1 算子融合
3.1.1 TF-TVM自动切图优化
TF-XLA的实现方案,在Grappler[4]优化图之后,有一个POST_REWRITE_FOR_EXEC(通过这个关键字可以在源码中搜索到)阶段,在这个阶段,会执行三个针对Graph的Pass,分别是用来标记算子,封装子图,改写子图并构建LaunchOp。 TF-TRT的实现方案,TF-TRT在Grappler中注册了一个优化器,在这个优化器中,找到连通子图,并将其替换为TRT Engine。
3.1.2 计算图等价替换
3.2 CPU-GPU数据传输优化
3.3 高频子图手工优化
warp_shuffle
指令,不同线程通过寄存器交换数据,避免了频繁访存的开销,获得了很好的性能。3.4 CPU-GPU分流
4 压测性能分析
CPU模型测试环境为16核Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz,16G内存。 GPU模型测试环境为8核Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz,Tesla T4 GPU,16G内存。
5 整体架构
6 不足之处与未来规划
作者简介
参考资料
阅读更多