当前位置: 首页 > 科技观察

爱奇艺机器学习平台搭建实践

时间:2023-03-18 21:24:02 科技观察

在搭建机器学习平台之前,爱奇艺已经有了一个比较成熟的深度学习平台Javis,但是Javis针对的是比较高阶和专业的算法工程师,需要提交代码来运行计算在专用计算集群上,使用门槛比较高。此外,除了深度学习算法,还有机器学习、数据挖掘、数据分析等领域。对于很多小规模的企业来说,没有相应的平台来支撑这些非深度学习,需要自主研发算法和工程平台来支撑实施。这就是常说的建烟囱。每个业务都需要搭建自己的算法平台,容易出现两个问题:一个是在算法方面,很多业务并不是建立在算法的基础上,机器学习的使用可能只是用来辅助或者优化业务,所以可能没有非常专业的算法人员,对模型或算法有更深入的了解;还有一个问题,虽然有算法人员,但是算法的实现还是需要做一些工程化的事情,对于不同的业务来说是重新发明轮子。此外,对于爱奇艺的数据中心战略,智能服务是数据中心的必备功能。从以上三点来看,搭建机器学习平台有了比较明确的定位。机器学习平台服务的人群包括算法工程师、数据分析师、业务研发工程师。我们希望通过构建高效的离线和实时预测服务,降低用户使用机器学习的成本,提高算法的接入效率,利用数据中台的优势,促进数据的标准化和共享化,楷模。发展历程简单介绍一下爱奇艺机器学习平台的发展历程。到现在主要经历了三个大版本,第一个版本也是基于业务搭建烟囱的阶段。由于这个版本是围绕特定业务来构建服务的,所以整个架构中的算法非常少。但是在这个版本中我们使用了SparkML调度算法的核心系统来实现算法的异步分布式调度。上线后,算法接入效率有了明显提升。基于第一版积累的技术经验,我们发现了当前通用机器学习平台的需求,于是迭代第二版,实现了通用机器学习平台。第二版最显着的特点是在用户层面增加了可视化前端,允许用户通过拖放来构建自己的机器学习过程。通过自由构建算法组件,用户可以解决泛化后百花齐放的流程需求。还有一个很重要的一点就是分离调度服务。其中,实验调度子系统监控任务状态,负责任务调度。通过汇总任务心跳,可以随时了解任务集群的全局状态。当任务执行节点异常中断时,可以立即重试或重新分发给其他节点,极大地保证了服务的稳定性。任务执行引擎是任务运行的核心。任务执行引擎接收实验调度服务推送的任务,从模型池中获取模型资源,从数据管理子系统中读写数据,根据任务配置的内容执行脚本。由于任务执行引擎不绑定任何特定的算法框架,因此算法执行的实现可以轻松跨越不同的算法框架和平台。通过消息日志监控,自动收集和调度各种算法和平台产生的日志信息和终端信息,通过配置关键字提取有用的信息和数据,聚合显示在前端,或针对某些功能实现实时图表功能被实现。算法模型池也作为一个独立的服务进行管理,专用于离线和实时预测采集模型和同步模型。系统摒弃v1中通过Europa调度Spark集群任务和自身维护的定时任务,接入爱奇艺大数据平台Babel和定时任务调度服务平台Gear。接入这两个平台后,首先实现与数据中心的连接,其次实现离线服务。在算法的框架上,由于执行引擎是分离的,所以可以方便的加入更多的框架。在第二版中,除了SparkML中的一些常用算法外,还对XGBoost、图等常用算法进行了扩展。算法。3.0的主要目标是完善功能布局,主要实现在线预测服务。针对一些用户提高效率的需求,还提供了自动调参、增加参数服务器、扩展模型数据量的支持。此外,由于用户需要通过其他平台访问机器学习平台,因此也提供了API服务。至此,已经形成了一个一站式的平台,基本涵盖了机器学习的全过程。通过平台运营,用户可以实现从特征工程到模型训练、模型评估、在线和离线预测的整个机器学习过程。通过将机器学习过程的数据来源和数据目的连接到整个大数据开发平台,完成一套完整的闭环。系统经验分享一些实际过程中的心得。自动调参当用户在专门调优模型时,如果模型的参数设置不正确,将极大地影响模型的准确性。模型的参数也不一样,像LR和4个参数的线性回归,更像暴露17个参数的XGBoost。虽然不是每个参数都参与调参,但总会有一些排列组合。如果手动调整参数,参数组的数量可以从几十个到上百个组合不等。比如对于XGBoost来说,用人力去调参基本上是不可想象的。目前的机器学习框架一般都有自己的调参功能,比如SparkML,但是调参能力相当有限,因为只能做随机全组合(穷举搜索)。使用Spark自带的调参方式,如果用户没有一点直观的经验来排除调参范围,那就需要拼计算资源或者拼字符了。算法框架自带的调参系统还有一个局限性,就是不能跨平台复用调参算法。因此,我们设计了一个系统级的调参框架,可以调用Spark、python等不同的算法框架,也可以不受限于算法框架的语言限制,开发自己的调参算法。我们的自动调参系统在流程上还是比较简单的。系统将调参分为多轮迭代。传统的调参算法如随机调参、网格搜索等只有一轮调参,而先进的算法则有多轮调参。根据上一轮调参的评价结果??,适当缩小调参区间,最终收敛到一个最优值。优点。系统读取用户设置的参数区间后,根据用户需要将该区间划分为多个子区间,并随机采样每个子区间内的参数作为第一次参数调整的组合,发送给执行引擎通过任务分发服务,调度相应的算法框架训练和评估。训练任务结束后,执行引擎将评估结果返回给参数助手服务。调参服务收集完本轮的所有评估结果后,会启动算法计算下一轮的调参空间,调整下一轮的样本数,再次发送给执行引擎进行测试,并重复直到达到最大轮数。升华或收敛程度。我们可以把整个调参过程看作一个大规模的模型训练过程,通过结果反馈不断寻找极值的过程。从这个想法出发,可以添加许多适用的算法作为参数调整算法。目前的机器学习平台除了支持随机算法和网格搜索算法外,还实现了贝叶斯优化和自研遗传算法。测试发现,自研算法调参效率远优于传统默认算法。数据规模的支撑系统一开始只支持SparkML框架,几万数据集的正常训练几分钟就可以完成,但是当用户数据集只有几十到几百量级的时候命令,任务也需要运行几分钟,相对于单机python秒级训练完成时间而言相当慢。原因之一是提交到Spark集群的任务需要等待资源分配。真正的训练时间很短,但其他的准备时间也让用户觉得很慢。所以我们也会在后续版本中加入python的单机引擎。当数据量较小时,用户可以直接在单机上进行此操作。另一方面,传统的SparkML训练在上亿数据量时非常缓慢甚至崩溃失败。这是因为Spark不擅长训练非常大规模的模型。Spark训练模型分为多轮迭代。在每一轮中,所有执行器任务都在参数汇总之前完成。根据木桶原理,整个Spark任务都会受到影响。最慢的工作人员运行时影响。另外,所有的执行器都会通过广播的方式共享参数,对于一个参数较多的模型来说会占用大量的网络带宽,也会导致系统使用效果很低。解决方法是使用参数服务器来解决问题。原则上,参数服务器本身对分布式训练做了一些改进。不是等所有executor都运行完,而是等其中部分执行器运行完,超过一个预设值就强行终止。为了提高整个集群的效率,牺牲了一些部分的收敛速度。另外,取消广播机制传递参数,将参数放在独立的参数服务器中。通过阅读,这也节省了网络消耗。爱奇艺的机器学习平台从设计之初就支持跨算法框架的调度。我们调研了多种开源参数服务器,最终集成了腾讯的Angel参数服务器,并对部分典型模型进行了测试。测试证明,在训练亿级以上模型时,参数服务器的训练效率相比Spark有50%以上的显着提升。模型管理平台和算法调度无论是Sklearn还是SparkML模型预测,从代码的角度来看,预测函数都是不同模型的内部方法。没有适用于所有模型的通用预测方法。开发者自己写代码是可以的,但是如果要搭建一个通用的平台,就需要考虑一个统一的预测组件来处理所有的模型预测,并且具有一定的可扩展性。预测组件兼容不同算法框架的模型。.另一个类似预测组件的问题是,如何将不同的算法模型,甚至是跨框架的模型统一部署到在线预测服务中?以上两个问题都可以通过自定义模型文件来解决。模型训练好后,在输出默认模型文件的同时,也会输出自定义文件和PMML文件。PMML是一种标准的模型定义语言,可用于跨平台读取模型,适用于离线训练+在线预测场景。此外,在自定义文件中还可以输出更多有用的平台信息,如模型评估分数、模型类型、模型训练的相关表和字段名称、模型参数、训练上下文等。当模型连接到预测组件时,预测组件读取自定义文件,获取模型的框架和模型类型,通过对应的模型框架加载模型文件。在在线预测中,通过读取训练上下文,可以将上游模型训练所需的预处理过程加载到在线预测过程中,减轻用户单独进行预处理过程的负担。在线预测系统构建在线预测系统,针对不同的用户需求场景提供不同的调用方式。本地模式下,在线预测平台自动将模型信息封装在服务jar包中,为用户提供轻量级调用;在云模式下,在线预报服务平台结合Docker服务生成一套计算集群。云模式支持HTTP服务和RPC服务。在HTTP服务中,系统通过Consul服务申请动态域名,并关联Docker服务与自动发现服务。用户只需通过服务提供的域名访问即可,无需了解后端部署流程。RPC服务基于Dubbo实现。模型预测服务通过Dubbo封装后,通过Docker连接ZooKeeper实现服务发现。客户端只能通过客户端连接指定的连接访问服务。离线预测平台基于流程发布,在线预测基于模型和模型上下文信息发布。模型管理平台在线服务的部署方式有两种:推送方式和拉取方式。拉取模式是用户主动更新服务的模式;而推送模式是模型在模型管理平台更新后被动更新的方式。通过两种方式的结合,在线服务覆盖所有模型更新场景。案例介绍反作弊业务是一个独立的业务系统,管理与反作弊相关的业务逻辑和业务数据。反作弊平台定义构建不同的反作弊识别过滤场景,自动拆解成工作流,在数据中心进行具体运维。算法相关的流程通过数据中心转移到机器学习平台进行处理,处理后的结果也会返回数据中心。下图包含了流量反作弊的所有场景和相关算法,包括常见的监督算法、监督算法、黑白样本,然后是聚类算法、异常检测算法,此外还有类似的基于团伙的算法,还有一些深入学习算法。每天可以过滤数千万条以上的日志,在线峰值预测要超过KPS才能达到10000条。有了这样的平台,效率提升大概在80%以上。