百变应用场景下,优酷基于图执行引擎的算法服务框架筑造之路!
作者| 阿里文娱高级专家 随方,
阿里文娱开发专家 轩成
责编 | 屠敏
头图 | CSDN 下载自视觉中国
背景
在阿里的业务中,有广泛的算法应用场景,也沉淀了相关的算法应用平台和工具:基础的算法引擎部分,有成熟的召回和打分预估引擎、在线实时特征服务;推荐算法应用领域,有算法实验平台TPP(源于淘宝个性化平台),提供Serverless形式的算法实验平台,包括资源弹性伸缩,实验能力(代码在线发布、AB分流、动态配置),监控管理(完善的监控报警、流控、降级)等能力,是算法在线应用的基石。
但在实际的算法应用业务中,比如优酷推荐业务,算法应用场景众多(100+活跃场景),需求灵活多变,如果没有一套通用业务框架,用于抽象出通用和定制化的部分来提高算法组件的复用度;会严重拖慢算法实验的节奏。基于图引擎的算法服务框架就是为了封装一套框架,抽象算法在线服务的通用算子,支持运行时的算法流程的装配,提升算法服务场景搭建的效率。
设计概览
算法推荐典型在线处理执行流程:多路粗排召回,合并,预估,打散策略。推荐服务根据用户的设备ID等其他必要信息进行多路并行召回,在召回引擎中进行粗排后,经过必要的过滤处理,截取一定数量的内容调用Rank引擎进行精排预估,预估结果经过一系列算法策略处理后输出最终结果。
整个过程中召回,合并,预估,打散等业务处理有并行处理,有串行处理,根据业务需要能够灵活配置。基于图的推荐业务执行引擎是运行在算法实验平台上的执行引擎,它的典型处理流程是:在AB实验分桶上,通过图形化交互页面配置数据源、业务算子的执行依赖关系,并配置每个算子的运行时动态参数。
系统总体结构如下图所示:分成五个主要的模块(图执行算子元件、图形化配置DAG、图配置动态解析、DAG图执行引擎、Debug调试)。
图:系统总体架构
当推荐请求到达时,引擎读取AB参数,根据参数上配置的算子信息创建算子实例,根据算子的依赖关系配置动态组装成可运行的DAG。根据条件分支配置,动态裁剪运行时的DAG实例,根据图运行占用最大线程数配置,动态调整线程复用。算子通过算法实验平台的底层协程池并行运行。
关键模块
1. 图执行算子元件
1) 数据集
在DAG图中流转的数据统一封装为DataSet数据集,数据集是结构化多行二维数据的封装,在数据集上封装便利的基础算子操作。
数据集上一系列处理操作基于Java的Stream API来进行处理,以此来达到集合处理的最好性能,将非Action操作延迟到最后数据处理时运行。
数据集支持同步数据和异步数据读取,通过异步数据读取方式,可以延迟数据的解析和避免IO的等待,在使用时才进行数据的解析。
2)数据源
将能够返回数据或者数据交互的二方服务封装为通用数据源,所有业务算子围绕数据源的数据进行业务开发,通用数据源包括召回数据集、在线算法需要的辅助数据集(如存放在KV内存存储的旁路召回数据、特征等数据)、打分预估结果集、内存数据源等等。
数据源的封装通过动态参数配置方式实现通用性和可扩展性。数据查询只需要修改配置即可实现数据获取,不需要开发代码。
3)基础算子
在DataSet数据集上封装的基本操作作为基础算子,比如Join、Union、Filter、Sort、Map、Collect等流式操作。在DataSet上重新封装Stream相关API,便于对DataSet进行流式处理。对于大多数非Action类操作,通过流处理API延迟处理。
4)业务算子
召回、预估、合并、打散、过滤等业务操作封装为业务算子,在业务算子中可以查询数据源,返回数据集后通过基础算子计算得到结果。最终业务图中执行单元为业务算子和数据源,业务图中通过对数据源和业务算子的依赖关系进行配置,表达业务逻辑。
2. 图形化配置DAG
算子实现代码上通过标注的方式声明算子可配属性的相关描述,比如属性名称、属性类型、描述、取值范围、是否必填等。图形化配置页面读取算子元数据识别算子可配信息在页面展现。通过拖拽的方式将算子组成DAG执行图,平台内部实现图配置和AB配置的互相转换和兼容,DAG图结构的保存同时会转换为AB键值配置并保存。同时支持配置实时刷新和算子元数据更新。通过分组的方式将大图拆分为多个子图,便于图展现和维护。
图:图形化配置
3. 配置动态解析和优化
1) 根据AB配置实时变更图执行结构
图引擎在运行时为了减少解析图结构的耗时,将图结构进行了缓存,在AB配置更新时需要实时反映到图引擎中,所以根据图配置的哈希值校验的方式检测图配置是否更新,图结构变更后会重新创建引擎实例。
2)子图并行线程优化
在DAG执行时,所有算子都交给线程池异步运行,但是在大多数情况下子图可能是一个顺序执行图,不需要并行,不应该占用其他线程,所以在图执行时,动态根据依赖关系识别节点是否需要占用新线程运行。
3)条件分支动态裁剪
如果图结构中存在条件节点,会根据条件节点的动态结果裁剪后续图节点的运行。如果一个图节点的执行条件为否,后续单独依赖它的节点都不会运行,条件节点具备传递性。如果后续节点不单独依赖不运行的节点,则当前节点可运行。
4. DAG图执行引擎
1) 并发控制
通过图中依赖关系自动解析节点需要通过并行还是串行执行,最大程度复用线程,减少线程切换带来的开销。图执行过程中,并不是线程开的越多越好,在图中可以配置最大并发线程数来控制图的最大并发度,防止并行过多造成开销过大。
2)超时控制
通过整个图上配置超时时间来控制图的超时,根据业务粒度,会将子业务配置为子图,从而通过控制子图的超时时间来控制子业务的超时时间。
3)异步化执行
算子在图中的运行是全异步化的,算子之间通过Reactive模式进行依赖触发。
4)通过协程优化异步执行
AliJDK支持协程,在JVM层面可以将线程优化为协程执行。让用户的代码能够轻量级地分配到多个核上充分利用机器资源,同时遇到阻塞逻辑,也能够通过运行时主动挂起任务,将线程让出给队列中的任务。
DAG运行依赖线程池运行,算法实验平台提供了基础线程池,并同时将线程池在JVM内部优化为协程,通过压测比对,在IO阻塞逻辑比较多的情况下,协程池的性能要优于普通线程池。
5. Debug调试
1) 线程调用树
在所有算子运行时都会通过性能分析工具在最小影响执行性能的情况下记录节点的耗时时间,通过组装为调用树的形式进行输出,在整个请求超时情况下,输出到对应日志,便于性能和问题分析。
2)Debug
在开发时会用到本地调试能力,通过开发SDK本地运行代码,同时将并行图改为串行运行方便本地调试。
3)日志信息
在图框架运行时会捕捉算子运行异常等信息,通过日志文件和统计Counter的方式进行输出,在页面进行报表呈现和监控。
典型业务应用
1. 典型串行图化改造
以推荐场景的简单业务逻辑举例,通过图化执行提高业务算子并行度,降低延时。
图:典型串行图化改造
在图架构之前,模块的封装都以串行逻辑运行,其中会存在一些可并行优化的处理逻辑。比如在播放过滤和内容池过滤部分,内容池的查询和播放内容的查询本身是不相关,没有直接依赖,是可并行执行的操作。在串行编码情况,实际执行逻辑维持串行逻辑。
通过图化改造后,将查询内容池部分和查询播放内容部分提取为算子,在图中并行执行,被过滤算子依赖,这样可以最大程度的并发执行,充分利用CPU,减少执行延时。
2. 典型业务执行图
以推荐典型业务场景为例,对整个图进行分解。
图:典型业务执行图
业务大图:包含多路召回,后续通过模型混排合并、打散、策略执行返回最终结果。
分支子图:单独一路召回子图中,包含了不同类型的召回,通过过滤、排序、策略合并得到单路结果。
DataSet:策略合并算子会基于图中流转的数据集,使用数据集包装的基本API进行数据集的访问操作。
基础数据源:业务算子中通过封装的通用BE、iGraph、Tair等数据源接口查询或写入数据。
通过业务子图、基础数据集、基础数据源等层面的将业务进行分解,基础数据集API和通用数据源算子和业务无关,业务层通过使用基础API进行业务算子实现和依赖组成最后业务逻辑图。最终达到业务层、基础层的复用。
总结&展望
基于图引擎的算法服务框架建设,通过抽象算法业务的通用组件,提供图形化流程编排工具和图执行引擎,实现了0代码、配置化支持算法业务需求。为快速的算法应用,不断提升用户的个性化服务打下了坚实基础。对推荐、搜索、广告等算法应用业务有参考价值。
接下来,为了进一步提升引擎性能,我们将在构图优化和引擎执行性能上做优化,在保持业务表达灵活简洁的同时,追求更优的执行性能。
推荐阅读
重构ncnn,腾讯优图开源新一代移动端推理框架TNN
墨奇科技汤林鹏:如何用 AI 技术颠覆指纹识别?
性能超越最新序列推荐模型,华为诺亚方舟提出记忆增强的图神经网络
研发的未来在哪里?Serverless 云开发来了!
真惨!连各大编程语言都摆起地摊了!
国外小伙怒喷加密货币行业:入行两年,我受够了!
你点的每个“在看”,我都认真当成了AI
百变应用场景下,优酷基于图执行引擎的算法服务框架筑造之路!相关推荐
- 百变冰冰!手把手教你实现CVPR2021最新妆容迁移算法
作者:小潘师兄 来源:AI算法与图像处理 简介 在本文中,我们从不同的角度将妆容迁移问题分解为两步提取-分配过程.为此,我们提出了一种基于风格的可控GAN模型,该模型由三个部分组成,每个部分分别对应于 ...
- 复杂场景下的复杂缺陷检测方法--深度学习算法综述
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|OpenCV学堂 一.背景知识 随着自动化技术的快速发展, ...
- 支持百亿数据场景,海量高性能列式数据库HiStore技术架构解析
支持百亿数据场景,海量高性能列式数据库HiStore技术架构解析 HiStore介绍 HiStore是阿里中间件团队研发的数据库产品,是一款基于独特的知识网格技术的列式数据库,定位于海量数据高压缩比列 ...
- 复杂场景下智能汽车目标检测心得体会
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 引言 一.复杂背景目标检测的复杂是什么? 二.目标检测环境的复杂性包含哪些? 三.复杂场景目标检测的目标复杂性包含哪些? 四 ...
- 直播回顾 | 子芽CCF TF:云原生场景下软件供应链风险治理技术浅谈
CCF TF(技术前线委员会,Tech Frontier Committee)是中国计算机学会(CCF)为企业界计算机专业人士创建的企业间常态化合作交流平台,创始委员由Intel.LinkedIn.M ...
- 优傲机器人UR+平台 打造汽车智造“百变工具”
生产需求百变,UR对策万千:优傲协作新思路闪耀2017汽车装备展 在"中国制造2025"行动纲领和"工业4.0"理念的不断推动下,汽车产业作为落实智能制造的关键 ...
- 优酷智能档在大型直播场景下的技术实践
作者 | 阿里文娱高级技术专家 肖文良 本文为阿里文娱高级技术专家肖文良在[阿里文娱2019双11猫晚技术沙龙]中的演讲,主要内容为如何通过优酷智能档,降低用户卡顿尤其是双11直播场景下,提升用户观看 ...
- MySQL调优篇:单机数据库如何在高并发场景下健步如飞?
在当前的IT开发行业中,系统访问量日涨.并发暴增.线上瓶颈等各种性能问题纷涌而至,性能优化成为了现时代中一个炙手可热的名词,无论是在开发.面试过程中,性能优化都是一个常谈常新的话题.而MySQL作为整 ...
- 聚美优品张川:如何搭建秒杀场景下的运维架构
2016年8月12日-13日,由CSDN重磅打造的互联网应用架构实战峰会.运维技术与实战峰会将在成都举行. 这是继SDCC 2016架构技术峰会(上海站,官网.图文直播.架构峰会PPT.数据库峰会PP ...
最新文章
- 【模板】RMQ问题—st表实现
- 结构体在内存中的对齐规则
- 再见python你好go语言_再见Shell,你好Python
- idea中修改项目代码后,Git没有提示代码有改动(解决办法)
- 2018-3-24Linux系统管理(13)程序包管理(3)yum前端配置及编译
- 惊了!日本街头出现透明公厕,竟有人排队抢着上!
- 2016 年 ACM/ICPC 青岛区域赛 Problem C Pocky
- golang 读取文件最后一行_测试用例是开发人员最后一块遮羞布
- UML类图画法及类之间几种关系
- 未能捍卫科学家的奇思狂想,这家公司与3000亿美元失之交臂
- 关键段 互斥量 以及信号量
- (引)XPath 示例
- 用网站(WebSite而不是WebProject)项目构建ASP.NET MVC网站
- 【IT运维】自动化运维是什么意思?有什么作用?
- 油猴脚本 | 油猴脚本下载 | 油猴脚本大全
- 现代战争——僵尸网络的历史 上篇
- 解决webbench运行时卡住的问题
- CSS3 变形:平移、旋转与缩放
- [原创]fetchmail代码阅读笔记---ESMTP的认证方式
- 品优购注册页html
热门文章
- css左固定右自适应常用方法
- win10 spark+scala+eclipse+sbt 安装配置
- 关于静态方法的使用方式
- linux入门(三)常见Linux指令及其用法
- SHAREPOINT2010数据库升级2013
- Microsoft.NET框架程序设计--20 CLR寄宿、应用程序域、反射
- 美通信与动力公司向WIN-T军事通信计划提供支持
- Log4j使用技巧——让子类使用父类中定义的Logger
- 阅读Book: MultiObjective using Evolutionary Algorithms (2) -- Multi-Objective Optimization: 各种解释多目标
- 力扣—— 三维形体投影面积