基于图引擎的算法服务框架|头图|CSDN下载

但在实际的算法应用业务中,比如优酷推荐业务,算法应用场景众多(100+活跃场景),需求灵活多变,如果没有一套通用业务框架,用于抽象出通用和定制化的部分来提高算法组件的复用度;会严重拖慢算法实验的节奏。基于图引擎的算法服务框架就是为了封装一套框架,抽象算法在线服务的通用算子,支持运行时的算法流程的装配,提升算法服务场景搭建的效率。

头图| CSDN从视觉中国下载

背景

在阿里的业务中,算法应用场景广泛,也积累了相关的算法应用平台和工具:基础算法引擎部分,有成熟的召回和评分预测引擎,在线实时特征服务推荐算法应用领域有算法实验平台TPP(衍生自淘宝个性化平台),提供算法实验平台形式,包括资源弹性伸缩、实验能力(代码上线发布、AB分流、动态配置) 、监控管理(完善的监控报警)、流量控制、降级)等能力是算法上线应用的基石。

但在实际的算法应用业务中,比如优酷推荐业务,算法应用场景很多(100+活跃场景),需求灵活多变。如果没有通用的业务框架,可以用来抽象通用和定制的部分,提高算法组件的复用性;会严重拖慢算法实验的节奏。基于图引擎的算法服务框架是封装一套框架、抽象算法在线服务的通用算子,支持运行时算法流程的组装,提高算法服务场景构建效率。

设计概述

算法推荐典型的在线处理执行流程:多通道粗行召回、合并、估计和分解策略。推荐服务根据用户的设备 ID 和其他必要信息执行多个并行召回。在引擎中粗排序后,经过必要的过滤处理,截取一定量的内容,调用Rank引擎进行细排序和估计。一系列算法策略经过处理,输出最终结果。

整个流程有并行处理,串行处理,根据业务需要灵活配置。基于图的推荐业务执行引擎是运行在算法实验平台上的执行引擎。其典型的处理流程是:在AB实验桶上,通过图形化交互页面配置数据源和业务算子的执行依赖,为每个算子配置运行时动态参数。

系统整体结构如下图所示:分为五个主要模块(图执行算子组件、图配置DAG、图配置动态分析、DAG图执行引擎、调试)。

百变应用场景下,优酷基于图执行引擎的算法服务框架筑造之路

图:整体系统架构

当推荐请求到达时,引擎读取AB参数,根据参数上配置的算子信息创建算子实例,并根据算子依赖配置动态组装成可运行的DAG。根据条件分支配置,动态修剪运行时的DAG实例,配置图操作占用的最大线程数,动态调整线程复用。算子通过算法实验平台底层协程池并行运行。

关键模块

1.图形执行算子元素

1)数据集

在 DAG 图中循环的数据被统一封装成一个数据集。数据集是结构化多行二维数据的封装,方便的基本算子操作封装在数据集上。

基于Java API处理对数据集的一系列处理操作,以达到集合处理的最佳性能,将非操作延迟到最后一次数据处理。

数据集支持同步数据和异步数据读取。通过异步读取数据,可以延迟数据解析,避免IO等待,只有在使用时才进行数据解析。

2)数据源

将可以返回数据或数据交互的两方服务封装为通用数据源。所有业务运营商都围绕数据源的数据开展业务。通用数据源包括在线算法所需的召回数据集和辅助数据集(如召回数据、特征等存储在KV内存存储中的数据)、评分预测结果集、内存数据源等。

数据源的封装通过动态参数配置实现通用性和可扩展性。数据查询只需修改配置即可实现数据获取,无需开发代码。

3)基本运算符

封装在数据集上的基本操作作为基本操作,如Join、Sort、Map等流式操作。将上面的相关API重新打包,方便推流。对于大多数非类操作,处理通过流处理 API 延迟。

4)经营者

召回、估算、合并、拆分、过滤等业务操作都被封装为业务操作符。可以在业务算子中查询数据源,返回数据集后由基础算子计算结果。最终业务图中的执行单元是业务算子和数据源,通过配置业务图中数据源和业务算子的依赖关系来表达业务逻辑。

2. 图形配置 DAG

算子实现代码通过注解的方式声明算子可配置属性的描述,如属性名称、属性类型、描述、取值范围、是否需要等。图形化配置页面读取算子元数据并标识页面上的运营商配置信息。平台通过将算子拖放到一个DAG执行图中,实现了图配置和AB配置的相互转换和兼容,DAG图结构的保存也将转换为AB键值配置保存。它还支持实时刷新和算子元数据更新的配置。大图通过分组划分为多个子图,方便图的展示和维护。

百变应用场景下,优酷基于图执行引擎的算法服务框架筑造之路

图:图形配置

3. 配置动态解析和优化

1)根据AB配置实时改变图执行结构

为了减少解析图结构的耗时,图引擎在运行时缓存图结构。 AB配置更新时,需要实时反映在图引擎中,所以根据图配置的哈希值验证方法检测图配置是否更新,之后会重新创建引擎实例图结构发生了变化。

2)子图并行线程优化

DAG执行时,所有算子都交给线程池异步运行,但大多数情况下,子图可能是顺序执行图,不需要并行,不应该占用其他线程。因此,当图执行时,动态的根据依赖关系判断一个节点是否需要占用一个新的线程来运行。

3)条件分支动态切割

如果图结构中存在条件节点,后续图节点的操作将根据条件节点的动态结果进行裁剪。如果一个图节点的执行条件为No,则后续单独依赖它的节点不会运行,条件节点是传递的。如果后续节点不完全依赖于非操作节点,则当前节点是可操作的。

4.DAG 图执行引擎

seo的算法是怎么算的_seo指纹算法_seo工作岗位绩效算法

1)并发控制

通过图中的依赖关系自动解析节点。无论是需要并行还是串行执行,都最大限度地复用了线程,减少了线程切换带来的开销。在图执行的过程中,并不是开启的线程越多越好。可以在图中配置最大并发线程数,以控制图的最大并发,防止过多的并行造成过多的开销。

2)超时控制

图的超时时间是通过在整个图上配置超时时间来控制的。根据业务粒度,将子服务配置为子图,从而通过控制子图的超时时间来控制子服务的超时时间。

3)异步执行

图中算子的操作是完全异步的,算子是由模式触发的。

4)通过协程优化异步执行

支持协程,线程可以针对 JVM 级别的协程执行进行优化。它允许将用户的代码轻量分配到多个内核,以充分利用机器资源。同时,在遇到阻塞逻辑时,还可以在运行时主动挂起任务,将线程让给队列中的任务。

DAG 的运行依赖于线程池的运行。算法实验平台提供基础线程池,同时将线程池优化为JVM内部的协程。池的性能优于普通线程池。

5.调试

1)线程调用树

当所有算子都在运行时,性能分析工具会记录对执行性能影响最小的节点的耗时,并以调用树的形式输出。当整个请求超时时,会输出到相应的日志中,方便性能和问题分析。

2)

开发时会使用本地调试能力,通过开发SDK在本地运行代码,将并行图改为串行运行,方便本地调试。

3)日志信息

图形框架在运行时会捕捉算子操作异常等信息,通过日志文件和统计输出,并在页面上进行报表展示和监控。

典型的业务应用程序

1.典型的串行图形变换

以推荐场景的简单业务逻辑为例,通过图形化执行提高业务算子的并行度,减少延迟。

百变应用场景下,优酷基于图执行引擎的算法服务框架筑造之路

:典型的串行图变换

在图架构之前,模块的封装是用串行逻辑运行的,会有一些处理逻辑可以并行优化。例如,在播放过滤和内容池过滤部分,内容池的查询和播放内容的查询是不相关的,没有直接的依赖关系,是可以并行执行的操作。在串行编码的情况下,实际执行逻辑维护串行逻辑。

经过图形化改造,将查询内容池部分和查询回放内容部分提取为算子,在图中并行执行,依赖于过滤算子,可以最大化并发执行,充分利用CPU,并减少执行延迟。

2. 典型业务执行图

以推荐的典型业务场景为例,分解整个图。

百变应用场景下,优酷基于图执行引擎的算法服务框架筑造之路

图表:典型的业务执行图表

业务大图:包括多次召回,然后通过模型洗牌、合并、拆分、策略执行返回最终结果。

分支子图:单向召回子图包含不同类型的召回,通过过滤、排序和策略合并得到单向结果。

:策略合并算子会使用数据集封装的基础API,根据图中流动的数据集访问数据集。

基础数据源:业务操作者通过封装的通用BE、Tair等数据源接口查询或写入数据。

业务通过业务子图、基础数据集、基础数据源等层次进行分解。基础数据集API和通用数据源算子与业务无关。业务层使用基础API实现,依赖业务运营商。形成最终的业务逻辑图。最终实现了业务层和基础层的复用。

总结与展望

基于图引擎构建算法服务框架,通过抽象算法业务通用组件,提供图形化流程编排工具和图执行引擎,实现0代码和配置支持算法业务需求为算法的快速应用和用户个性化服务的不断完善奠定了坚实的基础。对推荐、搜索、广告等算法应用业务具有参考价值。

接下来,为了进一步提升引擎性能,我们将优化组合和引擎执行性能,在保持业务表达灵活简洁的同时,追求更好的执行性能。

免责声明:本文来自网络用户投稿,不代表本站观点和立场。如有侵权请发送邮件至tzanseo@163.com告知本站删除,本站不负任何责任及承诺。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

发表评论

登录后才能评论