京东广告算法架构体系建设——高性能计算方案最佳实践|京东零售广告技术团队
Tech
01 前言
在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!
推荐领域算法模型的在线推理是一个对高并发、高实时有较强要求的场景。算法最初是基于Wide & Deep相对简单的网络结构进行建模,容易满足高实时、高并发的推理性能要求。但随着广告模型效果优化进入深水区,基于Transformer用户行为序列和Attention的建模逐渐成为主流,这个阶段模型的特点是参数的体量、网络结构复杂度呈指数级增长,算法建模的创新工作往往由于吞吐和耗时的性能算力问题,导致无法落地于在线推理获得效果收益。传统通过扩容资源的方式,其边际效应也在减弱,算力优化存在诸多挑战:
02
分布式分图异构计算框架
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
03 高算力推理引擎
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。 1.位图原理
为了打造高算力推理引擎,开始深入调研基于GPU推理引擎优化推理性能的可行性,GPU作为一种高度并行的多核处理器,具备极强的并行计算能力,由于GPU高度并行化的结构,先天适合以稠密矩阵计算为主的NLP、CV领域。但直接应用于推荐领域会存在TP99耗时上涨,资源利用率不高等问题。这主要与推荐领域模型的自身特点相关:
1、建模过程复杂:为建模用户与商品关系,推荐领域模型建模不仅包含DNN等稠密计算部分,还存在大量针对稀疏特征的Embedding建模方式以及特征预处理等模块,集合了IO密集与计算密集两大特性,造成计算过程与GPU亲和性不高,难以充分发挥GPU的硬件优势。
2、模型规模大:推荐领域模型以稀疏参数为主,百G规模参数无法完全加载至GPU显存,稀疏参数交换导致带宽需求高,造成GPU无法充分利用。
3、模型结构复杂:用户行为序列建模成为模型建模的主流方法,而用户特征的多样性(浏览行为、购买行为、加购行为)需要单独建模以提升模型对用户的感知能力,因此造成模型分支结构多,结构复杂。TensorFlow推理框架虽然提供了算子级别的建模方案,通过堆叠细粒度算子完成各种复杂的模型建模,灵活的支撑了多种行为序列建模方式。但也因此造成了算子粒度过细,单算子计算量小,不易于GPU充分调度的问题,尤其是对于在线推理本身计算量就相对较小的场景问题更为致命。
得益于分布式分图异构计算框架,有效解决了上述1,2问题,并且可以让我们针对GPU算子调度和计算逻辑精细化优化,深入挖掘GPU专用计算设备的潜力,实现对推理性能的显著提升。具体工作体现在以下三个方面:a)TensorBatch:通过聚合计算请求提升GPU计算吞吐;b)深度学习编译器:通过自动化的算子融合、图优化等方式优化模型推理性能;c)多流计算:通过打造GPU多计算通道,构建真正的并行计算推理引擎。
广告精排模型推理主要表现是单个请求耗时较短(毫秒级),同时每个请求中gpu kernel调用次数较多,每次gpu kernel的调度都会伴随相应的kernel launch,琐碎繁多的kernel launch会严重制约GPU模型的吞吐能力,同时会导致模型系统耗时较高,通过Nsight性能分析性能数据如下。
在深度学习编译器技术加持下,我们将广告推荐精排模型的算子调度次数从553次优化至190次,XLA子图模块的算子执行的TimeLine得到极大改善,单次推理耗时从14ms优化至9ms。
b)推理过程动态选择,命中分桶情况则选择XLA Runtime执行,未命中则选择原图执行,同时服务后台触发异步XLA编译,供下次请求使用。
3.3、多流计算
我们对Tensorflow框架中的底层GPU通道的创建和分配机制进行了深入的改造与升级,赋予了其在面对同一模型时,针对不同的在线请求,动态选择GPU通道进行运算的能力。每个GPU通道独立持有一份CUDA Stream和CUDA Context,既消除了算子并发调度导致的GPU资源争抢问题,也使得不同请求拥有独立的计算通道,提升GPU并行粒度。
多GPU通道(多CudaStream + 多CudaContext)解决了KernelLaunch调度问题,算子调度可以并行执行,减少了执行的GAP。但在GPU硬件层面,CudaContext采用分时复用原则,即此某一时刻只有一个CudaContext被调度执行,没有完全达到算子计算间的并行。
MPS局限性:MPS(Multi-Process Service)是英伟达为充分利用GPU资源的一种解决方案。MPS多进程服务,每个进程有自己的上下文管理机制,MPS使用合并共享的并行模式,即将多个任务合并成一个上下文,因此可以同时跑多个任务,是真正意义上的并行。但MPS方案需要多进程服务的场景下才能生效,这种情况下单卡显存无法承载多进程任务,显存成为瓶颈,MPS机制失效,无法充分利用GPU算力。
因此,我们升级了多流计算架构,将MPS与自研的多CudaStream + 多CudaContext的多流计算架构相结合,解决了显存瓶颈的问题,最终通过单进程模型部署实现真正的并行计算。
综上,我们实现了完整的GPU多流计算框架:创建多组通信渠道打通软件和硬件通道,融合调度Context实现真正的计算并行化。
04 总结
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。 1.位图原理
综上,通过设计高性能的计算方案,打造新一代算法架构推理体系,在架构层面通过分布式分图异构方案很好的解决了高算力需求下的资源成本边际效应问题,在高算力推理引擎层面,通过一系列的专项优化,让GPU的算力得到充分的释放,实现复杂算法模型算力的扩展。目前新一代的高性能计算方案已经在广告多个业务线进行了落地实践,推荐首页CTR模型、推荐通用信息CTR模型、推荐商详CTR的规模扩展至千亿,助力推荐、搜索等核心业务取得显著的效果收益。
求分享
求点赞
求在看