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

阿里重磅开源全球首个批流式集成机器学习平台Alink,Blink的功能已全面贡献给Flink

时间:2023-03-20 23:19:42 科技观察

11月28日,FlinkForwardAsia2019在北京国家会议中心举行。阿里在会上发布了Flink1.10版本的功能,前瞻同时宣布基于Flink的机器学习算法平台Alink正式开源。这也是全球首个批流集成算法平台,旨在降低算法开发门槛,帮助开发者掌握机器学习的全生命周期。在去年的FlinkForward中国峰会上,阿里宣布开源Flink的内部分支Blink,将阿里内部的Flink优化工作全部开放给开源社区。这引发了业内热议,有期待,也有质疑。一年后的今天,阿里是否兑现了去年的承诺?Blink的合并进展如何?刚刚开源的Alink算法平台有哪些独到之处?AI前线在会上对阿里巴巴高级技术专家、实时计算负责人王峰(名莫文)进行了专访。让我们来看看Flink的最新变化,以及阿里巴巴基于Flink有哪些新的工作成果。自2019年1月起,阿里巴巴逐步将内部维护的Blink归还给Flink开源社区,贡献代码量已超过100万行。国内包括腾讯、百度、字节跳动,国外包括Uber、Lyft、Netflix等公司都是Flink的用户。今年8月发布的Flink1.9.0是阿里内部版本Blink合并到Flink后的第一个版本。在今天的FlinkForward2019大会上,阿里发布了Flink1.10的功能预览。正式版预计2020年1月发布。Flink1.10版本功能预览:Blink的所有功能都进入了Flink据介绍,Flink1.10版本可以算是一个比较重要的里程碑版本。至此,Blink的所有功能都进入了Flink,包括Blink中的关键设计和通用优化。以下是该版本将包含的主要功能和技术亮点的预览:完成Blink/Flinkmerge1。更强大的BlinkQueryProcessorDDL增强,支持在建表语句中定义计算列和watermark生产级Batch支持,全面支持TPC-H和TPC-DS测试集,其中TPC-DS10T性能为7是Hive3.0的几倍2.完成调度器的重构,支持更灵活的批量调度策略3.更完善、更细粒度、更灵活的资源管理整理了TaskExecutor的内存模型,解决了长期存在的问题比如RockDB内存配置控制困难,TM启动前后内存计算不一致等。简化了内存计算逻辑,降低了配置难度。在operator层面更细粒度的资源使用管理,解决operator资源过度使用带来的性能和稳定性问题,提高资源利用效率Hive兼容生产可用Meta兼容,支持直读Hive目录,版本涵盖1.x、2.xto3.x数据兼容格式,支持直接读取Hive表,也支持写Hive表格式UDF兼容,支持在FlinkSQL中直接调用HiveUDF、UDTF、UDAF。更强大的Python支持增加了对NativePythonUDF的支持,用户可以使用Python开发自己的业务逻辑,很好的支持Python类库的依赖管理。Python用户不仅可以自定义PythonUDF,还可以与其他现有的Python库集成。架构中引入BeamPortabilityFramework、Flink和Beam社区,共同打造功能便捷、性能优越的PythonUDF支持框架,并与Flink资源管理框架集成,实现对PythonUDF资源的管控。支持原生K8S集成原生资源管理,根据作业的资源需求动态申请TaskManager。依赖外部系统或组件,更容易提交任务,不需要安装kubectl等工具,可以达到类似Yarn的体验。新增多个主流机器学习算法库,包括逻辑回归、随机森林、KMeans等。AI前线:1.10版本,Blink的所有功能都进入了Flink,并且这距离上一次1.9发布仅仅三个月,这也是Blink合并到Flink的第一个版本,距离阿里去年宣布开源Blink也只有一年的时间。为什么Blink的Merge进度这么快?过程中遇到了哪些问题?你是怎么解决的?莫文:我们投入了很多资源,包括几十个技术人员来做这个。并行度比较大,所以我们可以在比较短的时间内贡献多达150万行代码。AI前线:整个过程中有没有遇到什么棘手的问题?莫文:社区是一个比较开放透明的场景。不像你自己的项目可以随意改,它要经过一个民主的过程,包括社区讨论,大家认可,代码质量保证。我们既要取得快速进步,又要保证社区的质量和公平性。这个挑战还是很大的。AIFrontline:那么你如何平衡这两者呢?莫文:整个Flink社区的合作模式是比较高效的。社区不同模块的负责人每周都有视频会议,可能是不同国家的社区讨论。这些都非常高效,项目管理也非常好。在这种机制的保障下,我们可以在保证迭代速度的同时让代码快速进入。其实这对工程效率的发展也是一个非常大的挑战。说白了,我们在这件事情上投入了很多技术人员,但是我们不光看数量。我们投资的很多人都是Apache项目的PMC和Committer,而不是普通的工程师。这些人熟悉Apache项目的工作机制和流程,效率和实战能力都不能算一个人。社区就是这样,不是人太多的问题,还需要对的人。AIFrontline:您在今天上午的演讲中提到,Flink正在成为一个真正的UnifiedEngine。有趣的是,最近我们不止一次听到不同计算引擎的类似说法。比如Spark的核心理念也是成为“统一的数据分析平台”。能否请您谈谈Flink的设计理念?两者有何异同?莫文:我们已经多次强调了Flink的核心概念。其本质的计算思想是流处理的核心。流处理的核心是一切都基于Stream进行处理,一个batch可以看成是一个有限的stream。像今天说的线上StatefulFunction,也是EventDriven。AllEvent不断进入做函数计算,做onlinestateful计算,然后把结果给用户,然后不断迭代。事实上,在线服务也是无限的,处理不会停止。人们不断地访问和处理。Flink的核心是基于流计算覆盖Offline和Online的Core,所以和Spark不一样。Spark认为一切都基于Batch,而streaming是无数个Batch的集合,这是不一样的。但是大家宏观的眼光都差不多,用一套计算引擎技术或者大数据处理技术去解决尽可能多的场景,这样从用户的角度来说,学习成本更低,开发效率更高,运维成本更低也更低。所以每个人的目标和理念都是一样的,只是为了达到这个目标所选择的方法是不一样的。AIFrontline:下??面这个问题我们之前问过Databricks的工程师,今天想问大家,如果我要做一个统一的平台,你也要做一个统一的平台,有没有谁可以的问题?到底要真正统一谁??莫文:我不觉得大家都在说你做什么就一定能赢,就一定能做好。从我个人的角度来看,技术还是需要有一定的良性竞争,才能取长补短。同时,条条大路通罗马,不一定只有一条是对的。不同的场景可能有不同的偏好或不同的特定区域需求。或者适应不同的场景。两三个公司解决类似的问题是比较健康的。比如数据库领域有MySQL和PostgreSQL,在线服务也类似。至少要有两家大公司一起竞争,才比较合适。但到底哪个更好,就看你能不能把自己的理论发挥到极致。因为理论就是理论,你的理论和我的理论听上去不一样,但最后谁赢,还要看细节,包括用户体验。做的对不对,细节做的够不够好,并不是说大家说的一样就没有区别。细节和社区生态的发展和推广过程非常重要。开源Alink:Flink机器学习进度几何?Flink在机器学习领域的进展一直是众多开发者关注的焦点。今年,Flink迎来了一个小小的里程碑:机器学习算法平台Alink开源,这也宣告了Flink正式进入AI领域。Alink开源项目链接:https://github.com/alibaba/AlinkAlink是阿里巴巴机器学习算法团队从2017年开始基于实时计算引擎Flink开发的新一代机器学习算法平台,提供了丰富的库算法组件化、便捷的操作框架,开发者一键构建涵盖数据处理、特征工程、模型训练、模型预测的算法模型开发全流程。作为业界首个同时支持批处理算法和流处理算法的机器学习平台,Alink提供了Python接口,让开发者无需Flink技术背景也能轻松构建算法模型。Alink的名称取自相关名称(Alibaba、Algorithm、AI、Flink、Blink)的公共部分。据悉,Alink已广泛应用于阿里巴巴的搜索、推荐、广告等实时在线核心业务。刚刚结束的天猫双11,单日数据处理量达到970PB,峰值每秒处理数据量高达25亿条。Alink成功经受住超大规模实时数据训练的考验,助力CTR(商品点击转化率)提升4%。AI前线:能否先介绍一下FlinkML和Alink的概况,以及两者之间的关系?墨文:FlinkML是Fl??ink社区现有的一套机器学习算法库。这套算法库已经存在很久了,更新比较慢。Alink基于新一代Flink,完全重写,与FlinkML无代码关系。Alink由阿里巴巴大数据团队开发。开发出来之后也在阿里巴巴内部使用,现在正式开源了。未来,我们希望Alink的算法能够逐步替代FlinkML的算法。也许Alink会成为新一代的FlinkML。当然,更换需要很长时间。Alink包含了很多机器学习算法。在向Flink贡献或发布时,也需要比较大的带宽。我们担心整个过程时间比较长,所以先单独开源了Alink。如果你需要它,你可以先使用它。起来。如果后面的贡献顺利的话,Alink应该会完全并入FlinkML,也就是直接融入Flink生态的主干。这是Alink最好的归宿。这时候FlinkML就可以和SparkML完全对应了。AI前线:除了Alink,Flink目前在机器学习领域的工作有哪些进展?与其他计算引擎相比,您如何评价Flink目前在机器学习和AI领域的工作?是否足够有竞争力?莫文:其实我们还有很多工作在进行中。机器学习的核心是迭代计算。机器学习训练就是不断迭代训练数据,训练出一个模型然后上线。在核心训练的基础上,Flink正在设计新的迭代计算。因为Flink是基于流计算的,它的迭代计算可以转化为mini-batch迭代计算,可以根据数据条目的数量或者数据段的持续时间,在流上打印出很多细粒度的数据段。Flink的优势在于在流上创建细粒度的数据分段的可行性没有问题,因为它本来就是一个纯流,切分分段是没有问题的。Spark的迭代就是对一个数据集迭代一次,然后再迭代一次。很难将这个数据集切成小块。切出一段是任务操作,细粒度挑战比较大。Flink的优点是可以把粒度切的很细,重构原来的迭代计算是可行的。Flink最早的迭代计算和Spark一样,要么一批迭代,要么一个个迭代,完全是两个极端。我们想把它做一个抽象,我们可以根据时间和大小来设置迭代的batchsize,就像基于Flinkwindow的概念,可以支持嵌套迭代,增量迭代等。我们完成流程后基于引擎层面的迭代技术,整个机器学习训练将大大加速。虽然算法本身的效果可能是一样的,但是性能和运行速度是不一样的。同时,也可以解决在线培训的问题。例如,不断产生互联网日志流和用户行为。FlinkStreaming迭代可以持续处理用户产生的实时数据,可以在线迭代更新。模型可以每5分钟更新一次,也可以每1分钟更新一次。这样,它的模型发布就是7×24小时的循环更新。这样的在线学习系统会给用户带来很大的改变。这个改变不是简单的30%的提升或者工程优化,而是在使用机器学习的理念上会有优化。这是我们目前正在做的工作,社区也已经开始讨论,可能是明年Flink1-2个版本的重点。你可以这么想,Flink去年是UnifiedEngine,今年开始拥抱AI。我们在2019年做的很多工作都是面向SQL的优化。明年我们会更多切入AI,就是FlinkML和AI场景。AI前线:阿里是什么时候决定开源Alink的?莫文:去年Blink开源的时候,我们就在考虑要不要一起开源Alink。但是后来觉得第一个开源项目还没做完,不敢一下子迈出这么大的一步,只能一步步来,而Blink开源要准备一个很多东西。当时我们没有办法同时开源两个大项目,所以我们先把Blink开源了。Blink开源之后,我们觉得把Alink的算法推到Flink上就好了。但是,我发现为社区做贡献确实是一个比较复杂的过程。Blink在推送的时候已经占用了很多带宽,而社区的带宽又多到没有办法同时做多件事情。社区也需要一段时间消费,所以我决定先消费Blink。贡献完了,社区就可以吃了,然后逐步把Alink贡献回社区。这是一个不能跳过的过程。开源是一个非常谨慎的过程,不能随便开一个。孩子们不能关心他们的孩子。如果你想分配东西,你需要有一个长期的计划。想要负责任,就得给大家一个非常明确的信号。这是一个长期计划。有网友问你放上去照顾了吗?如果我们不想解决这些问题,对用户来说只会适得其反。大家觉得你没有给大家一个明确的信号,大家都不敢用。AI前线:与SparkML相比,Alink有哪些亮点?哪些方面更能吸引开发者?莫文:首先,Alink依赖于Flink计算引擎层;第二,Flink框架中有UDF算子。Alink本身对算法做了很多优化,包括在算法实现上的细节优化,比如通信、数据访问、迭代数据处理过程等诸多优化。基于这些优化,算法可以更高效地运行,我们也做了很多配套工具,让它更容易使用。同时Alink还有一个核心技术,就是做了很多FTRL算法,自然是针对在线学习的。在线学习需要高频、更新快的迭代算法。在这种情况下,Alink有着天然的优势。今日头条、微博等信息流经常会遇到这样的线上场景。在离线学习方面,Alink和SparkML的对比基本一致。只要大家都把工程做好,线下学习就不会有代际差异。真正的代际差异一定是不同的设计理念。只有设计、产品形态、技术形态不同,才会有明显的代际差异优势。与SparkML相比,我们的基调是批处理算法基本相同,包括功能和性能。Alink可以支持所有算法工程师常用的算法,包括聚类、分类、回归、数据分析、特征工程等,这几类算法是算法工程师常用的。我们在开源前还对SparkML的所有算法进行了对标,实现了100%对标。另外,Alink最大的亮点在于它有流式算法和在线学习。可以独树一帜,让用户没有短板,同时优势也很明显。AlinkAI支持的机器学习算法后续规划及未来展望:Flink接下来多久更新一次?能否介绍一下Flink未来有哪些新特性或功能值得期待?墨文:3-4个月,基本上每个季度都会更新一个版本,比如2020年1月发布1.10,4月发布1.11。现在还很难说什么时候切换到2.0。2.0应该是一个非常具有里程碑意义的版本。现在Flink社区可以看到很多点,不仅有AI,机器学习,还有StephanEwen在今天的主题演讲中提到的StatefulFunction,也是很有前途的。其实线上场景还有很多值得探索的东西,Serverless(Faas)也是Flink背后的方向。Flink社区非常好。刚刚进化到1.x版本,还有很大的改进空间。社区的活力和地位非常好,大家也有很多想法可以投入其中。AIFrontline:未来大数据领域有哪些新的技术方向或趋势比较重要?莫文:大数据和人工智能的融合可能是一个很好的机会。现在大数据大家都玩过了,基本玩遍了各种东西,各种项目层出不穷。AI也是百花争鸣,但其实用户要的不仅仅是AI,数据呢?没有数据AI怎么玩?只有计算好特征和样本,才能训练出好的模型。只有通过不断的迭代反馈,这个模型才能越来越好。数据处理和数据分析在这个过程中非常重要。没有完备的反馈体系,大数据+AI的链接是行不通的。再好的引擎,如果没有闭环的计算路径,也无法在生产或业务中真正发挥作用。所以需要把整套的大数据+AI处理做成一个非常好用好用的解决方案,这也是大家最需要的。现在大家可能已经一一做了,很多东西都可以找到对应的开源项目,但是需要有一个整体的平台来连接所有的技术。AI前线:Flink一定程度上也想做这个?莫文:明年我们会开源一个新项目AIFlow,目前还没有Ready。我们希望AIFlow能够通过一个工作流对数据进行处理和预处理,包括模型训练、模型管理、模型上线、动态更新、更新得到反馈后,如何反向优化反馈后的流程,整个系统打通。这些链接中的每一个都可以使用不同的引擎来实现。用Flink可以,用Spark也可以。就看最后哪个好用了。比如Flink可以做大数据处理,TensorFlow可以做深度学习训练,FlinkML可以做流式训练。将这些连接起来为用户提供端到端的解决方案是一个很有前途的项目。AIFrontline:这个和Databricks的MLflow是不是很像?莫文:AIFlow大于MLflow,因为MLflow只是定义了数据格式,AIFlow可能更类似于Kubeflow,AIFlow更多的是工作流,MLflow更多的是数据格式,并没有涵盖特别完整的工作流,但不排除MLflow在未来会越做越大。我们为什么要做这件事?因为我们非常熟悉阿里巴巴整个搜索推荐广告这个核心系统是怎么玩的,怎么一步步加工形成一套大脑来控制整个流量,甚至是搜索流量、推荐流量、广告流量、业务流量和现金流。流量上阵等,这是整个商业化的核心系统。这个系统是基于大数据+AI的解决方案,这个解决方案离不开工作流,数据格式的定义,不同计算引擎的集成。协作,这是一个更大的概念。明年我们会在这方面投入更多的资源,我们也会联合其他公司一起做。