网易云音乐算法平台研发专家黄彬:网易云音乐在线预估系统的实践与思考人工智能

现将演讲内容整理如下,希望对诸君有所启发。

首先,我们来看一下整个预估系统的一个架构,如下图所示:

系统整体架构

中间的PredictServer,是预估系统的核心组件,包括查询组件、特征处理组件,和模型计算组件。左侧的监控系统用于线网服务的监控,确保系统网络的畅通。右侧的PushServer用于模型推送,把最新的模型推送进线上预估系统进行预测。

目标是建设一套高性能、易用,且功能丰富的一个预估系统。

如何提升计算性能?我们常见的计算性能问题有哪些,我从三个方面进行阐述。

在通用方案里,我们的特征计算和模型计算是分进程部署的,这样就会导致有大量的特征存在跨服务、跨语言的传递,会带来多次编解码和内存拷贝,导致会存在比较大的性能开销。

我们知道在模型更新时,会有大块类型的申请和释放。然而在一些通用方案里,它不会自带模型预热的方案,这样就会导致模型更新的过程中有比较高的耗时抖动,无法支持模型的实时化更新。

一般的框架使用的是同步机制,并发度不够,CPU利用率比较低,无法满足高并发的计算需求。

那么,我们在预估系统里面是如何解决这些性能瓶颈呢?

我们为什么要做这样一个事情呢?因为在传统方案里,我们都知道特征处理和模型计算分进程部署,这样就会带来比较多的特定的跨网络传输,序列化、反序化,还有频繁的内存申请和释放。尤其是在推荐场景的特征量特别大时,这样就会带来比较明显的性能开销。下图中,靠上方的流程图就展示了通用方案里具体的情况。

无缝集成计器学习库

为了解决上述问题,我们就在预估系统里面将高性能计算学习框架集成到预估系统内部,这样的好处就是我们能够确保特征处理和模型计算能够同进程部署,能够以指针的形式去实现对特征的操作,避免序列化、反序列化以及网络传输的开销,从而在特征计算以及特征处理这一块带来比较好的计算性能提升,这就是无缝集成机器学习带来的好处。

首先,整个系统采用全异步的架构设计。异步架构带来的好处就是外部调用是无堵塞等待的,所以异步机制可以确保在CPU高负载的情况下,例如在60%到70%的情况下,依旧保持线网服务的耗时稳定性。

其次,访存优化。访存优化主要是基于服务器的NUMA架构,我们采用了绑核运行的方式。通过这种方式能够去解决之前NUMA架构存在的远端内存访问的问题,从而提升了我们服务的计算性能。

第三,并行计算。我们对计算任务进行分片的处理,采用多线程并发的方式做计算,这样就能够较大程度降低服务的时耗,提升资源的利用率。

架构设计考量

以上就是我们在预估系统的系统架构考量上的实践。

多级缓存,主要应用在特征查询阶段和初级阶段。我们封装的缓存机制,一方面能够降低查询的外部调用,另一方面也能够减少特征抽取导致反复无效的计算。

通过缓存的方式,可以极大程度的提升查询和抽取的效率。尤其在查询阶段,我们根据特征的重要程度以及根据特征的量级,我们封装了多种组件,例如同步查询、异步查询以及特征批量导入等组件。

第一种是同步查询,主要适用于一些比较重要的特征,当然同步查询的性能没有那么高效。

第二种是异步查询,主要针对一些“艾特维度”的特征,这些特征有可能重要程度不是那么高,那么就可以采用这种异步查询的方式。

第三种是特征批量导入,主要适用于特征规模不是特别大的特征数据。我们将这些特征批量导入到进程内部,就可以实现特征的本地化查询,性能是非常高效的。

多级缓存

介绍完缓存机制之后,我们来看一下模型计算的行为优化。模型计算,我们主要从模型输入优化、模型加载优化以及内核优化,这三个方面进行优化。

在模型输入这一块,大家都知道TFServering采用的是Example的输入。Example输入会存在Example的构造、Example的序列化反序化以及模型内部调用ParseExample的情况,这样就会存在比较明显的耗时。

在下图中,我们看【优化前】的截图展示了模型计算优化前的数据统计情况。我们可以看到,有一个比较长的ParseExample解析耗时,并且在ParseExample解析完之前,其他op是没有办法执行并行调度的。为了解决模型树的性能问题,我们在预估系统里封装了高性能的模型输入方案。通过新的方案,我们能够实现特征输入零拷贝,从而减少这种Example的构造耗时以及解析耗时。

在下图中,我们看【优化后】的截图展示了模型计算优化之后的数据统计情况,我们可以看到,已经没有了ParseExample解析耗时,就只剩下Example的解析耗时。

模型计算优化

介绍完模型输入优化,我们来看一下模型加载的优化。Tensorflow的模型加载是懒加载的模式,模型加载到内部之后,它并不会进行模型预热,而是要等到线网正式请求来了之后才会进行模型预热,这样就会导致模型加载之后会有比较严重的耗时抖动。

为了解决这个问题,我们在预估系统内部实现了自动的模型预热功能,并且实现了新旧模型的热切换,还实现了旧模型的异步卸载和内存释放。这样通过这些模型加载的一些优化手段,实现模型的分钟级更新能力。

接下来,我们看一下模型内核的优化。目前我们主要是对Tensorflow内核做了一些内核同步优化,以及我们会根据模型去调整op间和op内的一些线程池等等。

以上就是我们在模型计算方面的一些性能优化的尝试。

通过介绍上面的性能优化方案之后,我们来看一下最终的性能优化成果。

性能优化成果

这里我们使用预估系统和通用方案的系统做了一个对比。我们可以看到预估系统在CPU使用达到80%的情况下,整个服务的计算耗时以及超时率都非常稳定,非常低。通过对比,我们可以得出新方案(预估系统)在计算处理这一块,性能是有提升两倍,对CPU的榨取能力更强,服务耗时更低。

得益于我们对系统的优化,我们可以为业务算法提供更多模型的复杂度计算以及更多候选集的计算。

上图中举了一个例子,候选集从之前的300个候选集扩充到1000个候选集,同时我们增加了模型计算复杂度以及使用了一些比较复杂的特征,分别在多个业务里带来了比较好的效果提升。

以上就是预估系统在性能优化上以及性能优化成果的介绍。

系统采用分层的架构设计。我们将整个预估系统分成三层,分为底层架构层、中间模板层和上层结构层。

底层架构层主要提供异步机制、任务队列、并发调度、网络通信等。

上层接口层主要提供Highlevel的接口,业务仅需实现此层接口,大量减少代码开发。

如下图所示,我们通过少量的几行配置,就能够实现复杂的一个查询逻辑。同时,通过查询封装提升了查询的效率。

特征计算可以说是整个预估系统里面,代码开发复杂度最高的一个模块,那么什么是特征计算呢?

特征计算包括离线过程和在线过程。离线过程其实就是离线样本,通过处理得到离线训练平台需要的一些格式,例如TFRecocd的格式。在线过程,主要是对在线的请求做一些特征计算,通过处理得到在线预测平台需要的一些格式。离线过程和在线过程,其实对特征处理的计算逻辑是完全一样的。但是因为离线过程和在线过程的计算平台不一样,使用的语言不一样,就需要开发多套代码来实现特征计算,所以存在以下三个问题。

一致性难以保证的根本原因是离线训练和在线预测对特征处理逻辑难以统一。一方面会影响到算法的效果,另外一方面会导致在开发过程中带来比较高昂的一次性校验成本。

如果要新加一个特征,就需要涉及到离线过程和在线过程的多套代码的开发,导致开发效率非常的低。

复用难,主要原因是框架缺乏对复用能力的支持,导致不同业务之间想要做到特征计算的复用,变得非常难。

以上就是特征计算框架存在的一些问题。

为了解决这些问题,我们将按照如下四点思路来逐步解决。

首先,我们提出算子的概念,将特征计算抽象成算子的封装。其次,算子封装之后,我们建立一个算子库,通过算子库能够提供业务之间算子的复用能力。然后,我们基于算子,定义特征计算描述语言DSL。通过这种描述语言,我们能够完成特征计算的配置化表达。最后,就是前面介绍的,因为在线过程和离线过程存在多套逻辑,会导致逻辑不一致的问题,我们就需要解决特征一次性的问题。

以上四点,就是我们如何对特征计算框架进行封装的思路。

为了实现算子抽象,首先必须实现数据协议的统一。我们利用动态pb的技术,根据特征的原数据信息,将任意的一个特征按照统一的数据进行处理,这样就为我们的算子封装提供了数据基础。接下来,我们对特征处理的过程进行抽样封装,将特征计算过程抽象成解析、计算、组装、异常处理几个过程,并且统一计算过程API,从而实现了算子抽象。

有了算子的抽象之后,我们就可以建立算子库。算子库分为平台通用算子库和业务自定义算子库。平台通用算子库主要是实现公司级的复用。业务自定义算子库主要是针对业务的一些自定义场景及特征,实现组内的复用。我们通过算子的封装以及算子库的建设,实现特征计算的多场景复用,提升开发效率。

特征计算的配置化表达,是指定义特征计算表达的配置化语言叫DSL。通过配置化语言,我们能够实现算子的多层嵌套表达,能够实现四则运算等等。下图中的第一幅截图展示了配置化语言的具体语法情况。

我们通过特征计算的配置化语言能够带来什么好处呢?

第一,我们能够通过配置化完成整个特征计算,从而达到开发效率的提升。

第二,我们能够通过发布特征计算配置化表达,实现特征计算的热更新。

第三,训练和预测使用同一份特征计算的配置,从而实现线上线下一致性。

这就是特征计算表达带来的好处。

前面说到,特征计算分为离线过程和在线过程。因为离线和在线的多平台原因,导致逻辑计算的不一致。为了解决这个问题,我们在特征计算框架里,实现了特征计算框架的跨平台运行能力。核心逻辑采用C++开发,对外暴露的是C++接口以及Java接口。在打包构建的过程中,能够一键实现C++的so库以及jar包,从而确保特征计算能够运行在线计算的C++平台以及离线的Spark平台或者说Flink平台,并且用特征计算表达,可以确保特征计算实现线上线下逻辑的一致性。

上面介绍的是特征计算的具体情况。下面我们来看一下特征计算目前已经取得的一些成果。

我们现在已经沉淀了120家的算子,通过特征计算的DSL语言能够实现配置化,完成整个特征计算。通过我们提供的跨平台运行能力,实现了线上线下逻辑不一致的问题。

下图中的截图展示了通过少量的配置,就可以实现整个特征计算的过程,较大程度提高了特征计算的开发性效率。

上述介绍了我们在开发效率提升的一个探索。总得来说,我们通过系统的分层设计,提高代码的复用度,以及通过对查询、对抽取、对模型计算的封装,能够实现配置化的开发流程。

模型计算同样也是采用封装的形式。通过配置化表达的形式,实现模型的加载、模型的输入构造、模型的计算等等,使用几行配置,实现整个模型计算的表达过程。

下面我们来看一下模型实时化的落地案例。

我们为什么要做这样的模型实时化项目?

主要原因是传统的推荐系统是天级别更新用户推荐结果的系统,它的实时性非常差,无法满足这种实时性要求比较高的场景,例如我们的直播场景,或者说其他一些实时性要求比较高的场景。

还有一个原因是传统的样本生产方式,是存在特征穿越的问题。什么是特征穿越呢?下图中展示了特征穿越产生的根本原因,是因为我们在做样本拼接的过程中,我们采用的是“T-1”时刻的模型预估结构,和“T”时刻的特征进行拼接,这样就会出现特征穿越的问题。特征穿越会非常大程度的影响线网推荐的效果。为了解决实时性的问题,以及为了解决样本穿越的问题,我们就在预估系统里去落地这样一个模型实时化的方案。

模型实时化方案从三个维度进行阐述。

样本实时生成。我们基于在线预估系统,将预估系统的特征实时落地到Kafka,通过RACEID的形式关联,这样我们就能够确保样本实现秒级落盘,并且能够解决特征穿越的问题。

模型增量训练。有了样本的秒级落盘之后,我们就可以修改训练模块,实现模型的增量训练,就能实现模型的分钟级更新。

预估系统实时化。有了模型的分钟级导出之后,我们通过模型推送服务PushServer,将最新的模型推送到线上预估系统,能够使得现场预估系统使用最新的模型进行预测。

模型实时化方案总得来说,就是要实现样本的秒级落盘,实现模型的分钟级训练和分钟级线上更新。

我们现在的模型实时化方案,已经在多个场景进行了落地。通过模型实时化方案,在业务上有比较好的效果提升。

上图中,主要展示了模型实时化方案的具体实验数据。我们可以看到增量训练,它的训练周期越短越好。通过具体的数据,我们可知周期为15分钟的效果远远大于2小时、10小时、一天的。现在的模型实时化方案已经有一套规范化的接入流程,能够批量为业务带来比较好的效果提升。

上述介绍了预估系统如何提升计算性能,如何提升开发效率,以及如何通过工程的手段带来项目算法提升三个方面的探索和尝试。

整个预估系统的平台价值,或者说整个预估系统的平台目的,可以概括成三个字,就是“快、好、省”。

“快”就是前面介绍的应用性建设。我们希望通过持续的应用性建设,使得业务的迭代能够更加高效。

“好”就是希望通过工程手段,例如通过模型实时化方案,以及通过特征计算的线上线下逻辑一致性方案,能够为业务带来比较好的效果提升。

“省”就是使用预估系统的更高性能,能够更加节省计算资源,以及节省计算成本。

THE END
1.微信小程序在线学习平台的设计与实现lw(3)软件方面的需求还有一些逆向的需求,就是系统不能做的事情。可以说,有很多种不同的要求,而开发人员应该能够准确的理解他们的真正需要,并且可以应用到微信小程序的在线学习平台中。还有应该明确地找出一些虽然不属于当前微信小程序的在线学习平台开发的情况,但是据现在的分析,将来是非常可能会需要的可能需求。经过这个https://blog.csdn.net/goyahariko/article/details/144334237
2.基于Web的在线学习平台设计与实现(源码+lw+部署文档+讲解等)具体实现截图 管理员:首页、个人中心、用户管理、学习路线管理、阶段类型管理、博客详情管理、系统管理等功能 普通用户:首页、个人中心、博客详情管理等 论文参考 代码参考 @IgnoreAuth @PostMapping(value = "/login") public R login(String username, String password, String captcha, HttpServletRequest request) https://www.ctyun.cn/zhishi/p-429150
3.关于2017年秋季学期在线必修公共课的开课通知在选课和学习中如遇任何技术问题,可在线咨询超星学习平台客服或致电基础教育部(电话:84811138、84811669)。 基础教育部 2017年9月18日 附件一: 超星尔雅通识课平台使用手册 学生必修课版 学习流程图 如何登录系统 【电脑网页】 1、进入登录页面。打开浏览器(推荐使用谷歌、火狐或IE8以上版本浏览器),输入网址https://www.schxmvc.com.cn/main_mobile/content_m.jsp?urltype=news.NewsContentUrl&wbnewsid=17409&wbtreeid=1414
4.驻马店市专业技术人员在线学习平台专业技术人员学时申报流程图 输入网址https://www.hnzjgl.gov.cn/,也可在百度等搜索引擎中搜索“河南省专业技术人员公共服务平台”进入平台首页 第一步登陆系统:已在该系统注册人员(未注册人员,请查看后面注册说明),以专业技术人员身份登陆进入“河南省专业技术人员公共服务平台”(https://www.hnzjgl.gov.cn/)。 http://zmdpx.jxjyedu.org.cn/2019/content.jsp?id=436&type=1&menu=1
5.计算机毕业设计范例15篇教师可以通过网络教学系统平台发布教学课件、教学内容等相关的教学信息,为学生提供一个开放性的“虚拟校园”.学生可以根据自己的需要随时随地选择适合自己的学习内容。对遇到的疑难问题可以通过以电子邮件的形式请教同学、教师、有关专家等,甚至还可以和他们展开讨论。在这种个别化、交互式的学习环境中学生的个性会得到充分https://www.fwsir.com/fanwen/html/fanwen_20240616130224_3879194.html
6.帮助中心3、点击“确认充值”按钮后,您会进入到充值成功页面,提示您充值成功,此时您便可以购买中国统一教育网为您提供的各种学习服务。如下图所示: 如何登陆知识爱问平台 一、点击下图中红框区域的“登录” 二、在弹出的登录框中输入您的用户名,密码,验证码信息,点击“登陆” 三、登录之后进入到知学爱问的首页面 注https://www.tongyi.com/index.php/help/search
7.C/S系统快速开发框架旗舰版V5.0.NET快速开发平台Winform开发跨平台服务端 (Cross Platform Server) CSFramework.WebApi Server是旗舰版支持的后端服务器开发框架,WebApi服务借助Web平台开发的应用程序编程接口,具有良好的接口封装以及跨平台客户端存取数据等优点,统一使用JSON数据格式,在智能手机APP软件产品领域占用巨大市场。 WCF架构通信流程图 (WCF Communication Flow) 代码混http://www.csframework.com/cs-framework-5.0.htm
8.优选薪酬管理的论文15篇上级部门管理人员能够很便捷的控制和掌握工资发放情况以及资金使用情况,为华彬能源集团总部及子公司薪酬管理的信息化和科学化提供了一个很适用的综合管理平台。 2.系统设计 2.1系统流程图 华彬能源集团的企业信息、岗位信息、人员信息录入系统,集团公司利用EXCEL计算薪酬,并将结果数据上传服务器,并审核生成工资信息。https://www.yjbys.com/hr/xinchouguanli/4509992.html
9.郑大远程教育在线平台网上学习指南一郑大远程教育学院在线平台网上学习指南①郑大现代远程教育主页及课件点播子系统 一、郑州大学现代远程教育在线平台主页网址为http://dls.zzu.edu.cn。 二、如何登录现代远程教育支撑平台? 在郑大远程教育在线平台主页网址的左侧,选择学生学习登陆(下图),然后输入自己的学号和密码(默认密码是个学号相同,请进入后修改)即可https://www.henan-edu.com/wangluojiaoyu/2387.shtml
10.医疗信息平台系统建设方案搭建超融合系统平台 在数据中心机房新建一套超融合系统集群,并对医院现有的 业务系统进行评估,按照评估结果,将适合的业务系统和数据迁移至超融合平台,打破原有竖井式的纵向扩展架构。为了保证HIS/PACS等核 心业务数据库的性能和数据的实时性,需要对先对超融合做详细的POC测试,确定满足条件后再进行迁移。 https://www.360doc.cn/document/81011555_1114122238.html
11.在线学习课程平台系统分析设计流程图.pptx在线学习课程平台系统分析设计 流程图.pptx 10页内容提供方:教育教学资料分享 大小:94.56 KB 字数:约小于1千字 发布时间:2022-05-16发布于山东 浏览人气:899 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)https://max.book118.com/html/2022/0514/7005100033004122.shtm
12.关于做好我校2022年专业技术人员继续教育工作的通知专任教师可凭组织单位出具的学时证明或可折算学时形式在省教师继续教育平台【申报学时】-【填写申报表】模块中登记专业课和选修课学时。 其他专业技术人员可凭组织单位出具的学时证明或可折算学时形式在省专技系统【继续教育记录】模块中申报专业课学时。 继续教育学习及学时申报流程详见附件2。 https://www.gpnu.edu.cn/info/1040/28828.htm
13.笔记软件知识管理协作平台「flowus息流笔记」深度评测全平台应用 支持网页端、桌面端、移动端、小程序。 使用技巧 Tips:可以将 FlowUs小程序嵌入微信公众号文章,从而将 FlowUs 作为你的在线协作知识库,和用户进行深度分享和交流。 丰富的软件联动生态体系 FlowUs 与设计协同、思维导图、流程图、电子白板、信息管理、代码分享与托管等第三方服务形成了软件联动。 https://sspai.com/post/73465
14.济宁市兖州区职业中等专业学校2020年度质量报告学校根据企业需求,遵循“工作过程系统化”和“工学一体化”原则,调整了课程体系,突出实践性教学环节,建有118个学习工作站,工位1700余个,满负荷运转,工学一体化课学时达到总学时的60%以上。聘请了行业、企业及政府部门的38名专家组成了专业建设委员会,定期召开会议,沟通经济、科技发展和行业企业高技能人才需求等信息,http://www.jngyjsxy.cn/nd.jsp?id=37
15.基于MOODLE平台的在线交互式学习设计(2)图7- 4 课堂作业12 表索引 表7- 1 学习过程评价表13 表7- 2 学习成果评价表13 表7- 3 课程效果评价表13 第1 章绪论 1.1 选题的背景和意义 1.1.1 选题的背景 网络的迅速发展,促使了在线学习的进步,使得越来越多的在线学习平台开始逐渐被开发,而网络教学在现在的教育模式中也开始占有一定地位。 基于MOODLEhttp://www.youerw.com/jisuanji/lunwen_205227_2.html
16.线上教学方案(合集15篇)1、“xx中小学网络云平台免费网课资源”的资源网址xxx。 操作步骤点击网址xxx。——进入课程学习页面选择相应学段、科目、年级——选择课题——点击观看课程视频。 2、陇南市智慧教育云平台网址:xxx。 六、保障措施 1、教务处每周定时检查教师教案,各年级主任、班主任负责监管班级群,落实教学情况并进行通报反馈。 https://www.wenshubang.com/fangan/2969132.html