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

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

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

系统整体架构

中间的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.UML在线学习系统需求规格说明书流程图《UML在线学习系统-需求规格说明书-流程图》 UML(统一建模语言)是一种在软件工程中广泛使用的标准化建模语言,用于可视化、构造和文档化系统的静态方面和动态行为。在这个UML在线学习系统中,我们关注的是其作为教育工具的功能和流程,以满足用户在线学习和测试的需求。 1. **系统概述** UML在线学习系统旨在为用户提供https://download.csdn.net/detail/haha19880514/1426524
2.在线学习课程平台系统分析设计流程图.pptx在线学习课程平台系统分析设计 流程图.pptx,1.1 教师注册、验证;1.2 教师个人信息维护;1.2 教学班创建与成员管理;1.4学生注册、教师审核业务数据流;1.5教师、学生 作业业务数据流;1.6 课程教学、学生学习业务数据流;1.7 话题讨论业务数据流;任务4:作业,独立于课程,可以引https://max.book118.com/html/2022/0514/7005100033004122.shtm
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.微服务[学成在线]day16:基于SpringSecurityOauth2开发认证服务一个微信用户没有在学成在线注册,本系统可以通过请求微信系统来验证该用户的身份,验证通过后该用户便可在本系统学习,它的基本流程如下: 从上图可以看出,微信不属于本系统,本系统并没有存储微信用户的账号、密码等信息,本系统如果要获取该用户的基本信息则需要首先通过微信的认证系统(微信认证)进行认证,微信认证通过后https://cloud.tencent.com/developer/article/1674649
5.帮助中心(如下图所示) 问题正常结束后,系统自动给提问者和专家各一次摇奖机会。(如下图所示) 七、投诉专家 如果提问者对专家的回答不满意,提问者可以投诉专家。点击【投诉专家】按钮,填写投诉理由后提交。等待管理员处理。如果投诉成功,将退还提问者所扣积分,并给与50积分以资奖励。如果投诉失败,则正常扣分。 专家https://www.tongyi.com/index.php/help/search
6.基于Python+百度语音的智能语音ChatGPT聊天机器人(机器学习+深度系统流程图 运行环境 Python 环境 Pycharm 环境 ChatterBot 环境 模块实现 1. 模型构建 2. 服务器端 3. 客户端 4. 语音录入 5. 接口调用 6.模型训练及保存 系统测试 1. 模型效果 2. 模型应用 源代码下载地址 其它资料下载 前言 本项目基于机器学习和语义识别技术,让机器人理解文本并进行合适的答复。伙伴们https://blog.51cto.com/u_14943402/10335135
7.在线学习系统的功能模块介绍!在线学习系统包括六大模块:即:登录登录系统,学习资源库,自主学习途径,教训解答,在线考试,网络讲堂直播讲堂。 注册登陆模块主要完成用户注册,用户登录,账户信息处理,账户权限处理,创建账户,删除账户;完成教学资源库的主要任务是完成视频,网络课件资源的分类,视频资源的输入和删除过程;教学大纲,教学计划;自主学习方式模块主要https://zhuanlan.zhihu.com/p/692929095
8.在线教育系统学习路线模块的设计与实现论文在学习着选择课程,并且进行了学习路线类型的判断之后,学习者要按照预设的学习路线进行学习,为了简化串行学习路线和并行学习路线设计流程图。如串行学习所描述的那样,当学习着选择学习课程A 时,必须先学习课程B 和课程C。在学习课程B 和课程C 时需要经过和课程A 相同的判断过程。经过类型判断得到课程A 的前导课程数量https://www.unjs.com/lunwen/jiaoyu/20181031162259_1744560.html
9.《世界十大学习方法》之费曼技巧通用方法论包括是拆分(分而治之)、类比、联想、溯因、广义动量定理和系统思考这六种方法,以及每种方法还有对应的图解方式(如图1-10所示)。 图1-10 通用方法论1.3.1 学习金字塔解释费曼技巧学习金字塔是美国缅因州的国家训练实验室研究成果,它用数字形式形象显示了采用不同的学习方式,学习者在两周以后还能记住内容https://www.360doc.cn/mip/1027860177.html
10.优途UX教育怎么样?2023年课程介绍,深圳UX+UI设计培训机构我们课程结构的差异在于以用户体验、交互设计、UI界面设计为核心,深入讲解互联网大厂研发全流程,从用户体验设计、用户研究、场景分析、痛点分析、用户画像、数据分析、竞品分析、产品定位、业务流程图、产品信息架构、产品原型、DRD文档、UI规范、UI组件搭建、UI界面设计和开发对接、项目提案等多个真实项目环节进行教学,不https://www.yoojia.com/ask/17-11562387145828738598.html
11.学习系统图片学习系统高清图片素材大全摄图网汇聚学习系统图片大全:学习系统素材、学习系统高清图片、学习系统背景图片等。你可以找学习系统设计灵感、摄影创意,我们欢迎您下载学习系统vrf正版授权图片,商用无压力https://699pic.com/image/xuexixitong.html
12.初中综合实践课教学设计(精选16篇)①通过学习,提高学生审美情趣,体验劳动创造美的思想情感,树立正确的劳动价值观。 ②通过作品的设计、探究,发展学生的创造性思维。 ③通过独立或与他人合作完成作品设计,培养合作意识和团队精神。 二、【教学重点与难点】 1、重点:平面图设计技能。 2、难点:相架结构设计和工艺流程设计。 https://xiaoxue.ruiwen.com/jiaoxuesheji/379612.html
13.面向“可感知能学习善治理自适应”的智慧国土空间规划图13 耕地质量预警流程图 利用预警信息系统所提供的预测功能,针对不同的警兆指标,选择合适的预测方法得出各警兆指标的预测值,再用扩散指数对区域耕地质量警情进行外推和预警。 图14 区域耕地质量警情诊断与预警 4.6系统集成 在国土空间规划政策施行、编制和实施过程中,需要对国土空间开发利用和资源保护情况进行长期监测https://www.thepaper.cn/newsDetail_forward_3272486
14.Kafka系统学习Kafka 架构图 Kafka 的整体架构非常简单,是分布式架构,Producer、Broker 和Consumer 都可以有多个。 Producer,Consumer 实现 Kafka 注册的接口。 数据从 Producer 发送到 Broker 中,Broker 承担一个中间缓存和分发的作用。 Broker 分发注册到系统中的 Consumer。Broker 的作用类似于缓存,即活跃的数据和离线处理系统之间的https://www.jianshu.com/p/780e9d9da6cc
15.2020届计算机科学方向毕业设计(论文)阶段性汇报本次汇报主要内容为这段时间的进度展示:平台框架的论文叙述部分,通过系统图展示;交互流程的论文叙述部分,通过流程图展示;模型泄漏程度及定价问题的定义,通过公式展示;以及第一、第二种计算模型泄漏程度的方式,通过例子介绍。 谢杰 基于格的range proof的关键构件 https://zhiyuan.sjtu.edu.cn/html/zhiyuan/announcement_view.php?id=3709
16.什么是CanvasLMS学习系统?TONYLABSCO.,LTD.Canvas LMS 是一种开放且可靠的基于网络的在线学习系统,辅助学校管理数字式学习、教育工作者创建和展示在线学习材料并评估学生的学习情况,学生、家长参与课程获取相关技能发展和学习成就的反馈。 Canvas 的基本功能 Canvas 包括各种内置的课程构建和管理工具,可以自定义这些工具以创建独特且易于访问的教学和学习体验。教学设https://www.tonylabs.com/support/canvas-lms/what-is-canvas-learning-management-system
17.PKSPlantCruise系统培训视频培训软件视频学习课程DCS工程流程图上Popup,弹出窗口的使用 流量补偿回路的组态 自定义算法回路的组态 流量累计回路的组态 比值控制回路的组态 第六天: 选择控制回路的组态 分程控制回路的组态 复杂逻辑回路的组态 顺序控制回路的组态(SCM) 第七天: SCM中Handler的使用 批量建点 PKS系统与第三方通讯的组态(SCADA) http://www.elearndcs.com/
18.信息技术2.0学习心得体会范文(精选29篇)我有幸参加了20xx年中小学教师信息技术应用能力提升工程2.0培训,在此次培训中我深刻意识到现代教学技术的日益进步和发展,而多媒体课件的使用已经成为一名现代教师不可或缺的一种教学手段,这次培训正好给了我们一个能够系统学习多媒体课件制作并运用多媒体课件的机会。现在我将对本次学习情况做以简单小结: https://www.yjbys.com/xuexi/xinde/3434920.html