从搜推系统设计的角度上看,不同的搜索、推荐入口会自然形成独立的调用链路。在传统的模型设计思路下,会对不同入口链路、不同漏斗环节的CTR/CVR/PRICE多个目标独立设计模型,这也是美团外卖搜推过往模型设计的经典方式。而从2021年起,基于多场景全局优化的考量,搜推场景的CTR/CVR预估模型开始逐步走向多模型统一,综合利用多个入口的数据、结合不同入口自身的业务特点实现多个入口的联动优化,逐步实现“One Model to Serve All”的目标。
与CV、NLP等经典机器学习领域不同,以CTR模型为代表的稀疏模型由于结构多变、包含大量业务特化等原因,硬件供应商难以对这一类未收敛的模型结构提供端到端优化工具。因此,在CTR模型大规模应用的领域中,一般会结合GPU特性,面向使用场景对模型执行Case By Case的优化措施。按模型优化的目标来区分,可以大致分类为系统优化和计算优化:
① 系统优化:一般指通过对计算、存储、传输的调度,使CPU+GPU的异构硬件体系可以更有效率的协同和被使用。典型的系统优化包括:
设备摆放
算子融合
GPU并发/流水线优化
② 计算优化:一般指面向硬件特性,优化模型前向推理网络的结构设计和算子执行逻辑,使模型推理计算在GPU上的计算开销更小,效率更高。典型的计算优化包括:
完成基本的设备摆放优化后,计算较轻的Sparse查询部分在CPU完成,计算较重的Dense计算部分在GPU完成。虽然CPU上计算较轻,但压测发现其仍旧是整体吞吐瓶颈。考虑到整体计算图较小(约2G),我们自然的想到是否可以将整图放在GPU执行,绕开CPU配额的限制,此即All On GPU。为了将原在CPU进行的Saprse查询改为在GPU执行,我们新增了LookupTable op的GPU实现。如下图所示,HashTable放置在GPU Global Memory,它的Key与Value统一存储在Bucket中。针对输入的多组Key,利用多个Block的Threads并行查询。
同时,为提高GPU利用效率,降低kernel launch开销,我们利用TVM对计算图进行编译优化(下文会进行详细介绍)。优化后的All On GPU模型图解决了CPU资源受限带来的瓶颈,整体吞吐提升明显(qps 55->220,约4倍)。
随着深度学习网络越来越复杂(Wider And Deeper),硬件设备越来越多样(CPU、GPU、NPU),神经网络的优化工作也变得越来越困难。在单一硬件、单一框架上的优化会受到优化库限制,很难进一步调优。在不同硬件、不同框架的优化又很难做到通用,优化很难移植。这导致优化神经网络时,需要大量的手动调优工作,成本很高。
利用TVM优化预估(手工优化+TVM+FP16+All On GPU)时,将所有op都放置于GPU计算,CPU只负责基本的RPC,极大缓解了CPU配额的瓶颈。相同qps下latency大幅降低约70%,极限吞吐大幅提升约120%。到达极限吞吐时,GPU利用率较高,成为瓶颈。
经过一系列优化,整体吞吐提升约4倍(qps从55->220),优化效果十分明显。
7 总结
综上,我们针对美团外卖场景的业务特点,将经典的CTR/CVR模型从多入口、多环节、多目标的单体模型,逐步演进到“One Model to Serve All”的多模型统一形态。
同时,结合美团的硬件条件和基础,实现了纯CPU预估架构向CPU+GPU异构架构的切换,在固定成本前提下,有效的释放了算力空间,计算吞吐提升了近4倍。针对GPU BOX机型对CPU资源的限制,我们采用手工优化+DL编译优化结合、模型网络计算All On GPU的思路,有效的提升了GPU在模型预估计算中的利用率,并在本文中详细分享了GPU落地中的优化过程和实测数据指标。