总第458篇
2021年 第028篇
1. 业务背景
2. 整体思路
挑战分析
3. 方案设计
3.1 最优档位决策
3.2 系统稳定性保障
4. 实验
4.1 实验设置
4.2 实验一:机器资源持平,提高业务收益
4.3 实验二:业务收益持平,减少机器资源
5. 总结与展望
目前,美团外卖日订单量已突破4000万,成为美团最为重要的业务之一。外卖广告服务也从最初的支撑单一业务线发展到现在的十余条业务线,服务整体承受的流量日益增长,所消耗的机器资源也达到了一定的规模。
在外卖场景下,流量呈现明显的双峰结构,即午餐和晚餐两个时段为流量波峰,其余时段流量较小。在这种流量特点下,外卖广告服务在高峰时段面临较大的性能压力,在非高峰时段存在大量算力冗余,从全局来看,机器算力分配效率低,流量价值仍然具有较大的挖掘空间。一方面,流量消耗的算力没有根据流量价值进行动态的分配,造成系统在高价值流量上算力分配不足,价值没有得到充分的挖掘,而在低价值流量上,却存在浪费大量算力的现象;另一方面,在非高峰时段,系统流量较低,导致系统的整体资源利用率偏低,限制了系统获取更高的业务收益。
因此,算力需要进行更合理的分配来得到更加高效的利用。当前业界对于动态算力分配的研究较少,以阿里巴巴定向广告平台的DCAF[1]为代表,该方案根据流量价值进行差异化的算力分配,对不同价值的流量分配不同的候选队列长度,实现有限资源约束下的收益最大化。DCAF提供了一种优秀的解决方案,但该方案在外卖广告场景下存在一定的局限性。
针对外卖广告场景,外卖广告技术团队在DCAF方案的基础上进行了一系列探索和改进,首次进行了队列弹性分配和模型弹性分配相结合的尝试,并取得了不错的收益。一方面,在机器资源持平的情况下,CPM可以提升2.3%;另一方面,在业务收益持平的情况下,机器资源可以减少40%,最后我们在外卖列表广告精排阶段推全了机器资源持平的方案。
在外卖广告投放引擎中,为应对极大的在线流量压力和庞大的候选集,我们将整个检索过程设计成候选集依次递减的漏斗型级联架构,主要包含召回、粗排、精排、机制等模块。
实现智能算力的整体思路,是在系统算力容量约束下,对不同价值流量进行差异化算力分配,从而提高在广告检索过程中的算力分配效率,实现收益的最大化。智能算力主要包括以下四个要素:
1. 流量价值量化:流量价值指流量为平台、广告商家、用户三方带来的收益,系统需要具备量化流量价值的能力。
2. 流量算力量化:流量算力指流量在系统内消耗的机器资源,在外卖广告场景下,流量消耗的算力和候选集大小、召回通道数量、模型大小、链路复杂度等系统变量紧密相关,同样系统需要具备量化流量算力的能力。
3. 系统算力容量量化:系统算力容量指系统的机器资源总和,和流量算力量化的量纲一致,通常可以通过压测等手段获取系统的算力容量;在系统算力分配过程中,需要保证总体流量算力消耗不超过系统的算力容量。
4. 智能算力分配:基于以上三个要素,在广告投放引擎全链路进行智能算力分配,我们把算力分配的手段定义为“弹性动作”,在外卖广告场景下,我们主要归纳了以下四种动作:
这些弹性动作的可选范围,定义为“弹性档位”,如队列长度100和200对应弹性队列的两个不同档位。在智能算力下,算力的分配过程即弹性动作和弹性档位的智能决策过程。
为了让智能算力在外卖广告场景下落地,我们主要面临着如下的挑战:
经过工程团队和算法团队深度Co-Design后,我们设计了一套多动作组合决策的智能算力框架。整个框架由决策组件、采集组件和调控组件组成,其中决策组件作为智能算力框架的核心,以SDK形式嵌入应用服务,提供可复用可扩展的多动作组合最优档位决策能力和系统稳定性保障能力,为广告投放引擎的各阶段赋能;采集组件和调控组件为系统稳定性保障提供支撑。下面主要对最优档位决策和系统稳定性保障两个模块进行详细介绍。
在业内已有弹性队列求解方案的基础上,我们进行一系列探索和改进:
基于以上策略,我们实现了多弹性动作组合最优化档位决策。
现有方案
DCAF[1]将该问题转化为对应的对偶问题进行求解,得到决策公式,实现弹性队列分配。
方案改进
上述建模方案在外卖广告场景中存在以下问题:
如图所示,由于档位的算力和价值已知,无需对不同模型的价值和算力进行预估,后续的流量价值预估和流量算力预估工作都面向弹性队列即可。
如图所示,最优档位决策模块分为离线和在线两个阶段,包含如下四个子模块:
流量价值预估是智能算力决策的核心,要求具备一定准确性。而线上进行模型预估会增加检索链路耗时,我们采用离线XGB模型预估+在线查找词表的方案,既保证了预估的准确性,又足够轻量。
价值评估指标选取:一般来说,流量价值指当前流量为广告平台带来的收入;在外卖广告场景中,我们关注平台收入的同时,也关注商家的收入,因此我们的流量预估的指标选定为。
如图所示,流量价值预估模块包含离线和在线两个阶段。
离线阶段:
在线阶段:
业内智能算力的落地以弹性队列为主,一般采用队列长度作为流量算力评估指标,而队列长度作为流量算力评估指标面临以下两个问题:
算力评估指标选取:为了解决以上问题,我们采用流量消耗的CPU时间作为流量算力评估指标。
如图所示,流量算力预估包括离线和在线两个阶段。
离线阶段:
在线阶段:
1. 离线 λ 求解
基于价值预估和算力预估模块,通过回放历史流量,利用二分查找算法求解最优 λ。
离线 λ 求解的核心步骤是流量回放:通过重放历史同时段流量,复用线上逻辑,为每个请求模拟决策当前 λ 下的最优档位。
主要问题及解决方案
2. 在线档位决策
首先根据业务场景定义候选档位集合(不包括),然后遍历当前请求的候选档位,计算每个档位的收益,最后按照如下规则进行决策。
最优档位计算:
根据档位执行算力分配动作:
在智能算力下,系统从等额算力分配转换成动态算力分配,为保障系统服务稳定性,我们提供了熔断降级等常规措施,还实现了基于系统状态的PID实时调控功能。
PID(Proportion Integration Differentiation)是一个通过比例、积分、微分进行控制的主流控制算法,我们通过对系统状态的实时监控和变化感知,基于PID算法对系统状态进行实时调控,保证系统状态的稳定。
系统状态通常可以用系统的CPU/GPU利用率、QPS、RT(Avg、TP99、TP999等)、调用失败率(FailRate)等指标衡量。
调控目标
调控目标应该选取最能够快速反映出系统状态变化的指标,基于这个原则,我们选取了TP999、FailRate、CpuUtils作为调控目标。
调控策略
基于PID调控器,支持多种调控策略:
调控过程
智能算力接入PID实时调控后,在系统负载偏高时,可以快速稳定有效的反馈调节,将系统性能保持在目标水位。
收益来源分析
收益来源分析:
这篇文章主要从最优档位决策和系统稳定性保障两个方面,介绍了智能算力在外卖广告从0到1建设过程中的思考和优化思路。
未来在算法策略上,我们将尝试基于进化算法和强化学习算法,对系统全链路组合下的算力最优分配问题进行建模和求解;在引擎架构上,对系统仿真能力、在线决策能力和稳定性保障能力进行持续优化,同时尝试和公司弹性伸缩系统相结合,发挥智能算力的更大价值。
[1] Jiang, B., Zhang, P., Chen, R., Luo, X., Yang, Y., Wang, G., ... & Gai, K. (2020). DCAF: A Dynamic Computation Allocation Framework for Online Serving System. arXiv preprint arXiv:2006.09684.
顺辉、家宏、宋伟、国梁、乾龙、乐彬等,均来自美团外卖广告技术团队。
阅读更多