查看原文
其他

斩获GitHub 2000+ Star,阿里云开源的Alink机器学习平台如何跑赢双11数据“博弈”?

The following article is from CSDN Author CSDN App

作者 | 郭芮
来源 | CSDN(ID:CSDNnews)


「AI技术生态论」人物访谈栏目是CSDN发起的百万人学AI倡议下的重要组成部分。通过对AI生态顶级大咖、创业者、行业KOL的访谈,反映其对于行业的思考、未来趋势的判断、技术的实践,以及成长的经历。2020年,CSDN将对1000+人物进行访谈,形成系列,从而勾勒出AI生态最具影响力人物图谱及AI产业全景图! 本文为该系列访谈的第九期,通过和阿里资深算法专家、Alink创始人杨旭的一对一访谈,深入批流一体机器学习平台Alink的“台前幕后”。百万人学AI你也有份!参与文章评论,评论区留言入选,可获得价值299元的「2020 AI开发者万人大会」在线直播门票一张。



每次购物狂欢都是技术平台的一场数据“博弈”。去年双十一,阿里旗下的电子商务平台天猫就再一次刷新了数据记录,而强大的系统处理性能更是让业界敬佩不已:单日数据处理量达到970PB,每秒处理峰值数据高达25亿条,并帮助天猫产品推荐的点击率提高了4%——这一连串的数据背后,离不开Alink的支撑。
作为业界同时支持批式算法、流式算法的机器学习平台之一,Alink基于Flink开发而来,提供了丰富的算法组件库和便捷的操作框架,且目前已被广泛运用在阿里内部的搜索、推荐、广告等多个核心实时在线业务中,以及支持Kafka、HDFS和HBase等一系列开源数据存储平台。
在本文中,CSDN有幸采访到了Alink创始人杨旭,他将从一线开发的视角,带我们了解这个开源机器学习平台的技术路径、典型应用案例及发展规划等内容。


杨旭,机器学习Alink创始人,阿里巴巴集团计算平台事业部的资深算法专家,阿里云机器学习算法平台PAI中基础机器学习算法的负责人。



Alink衍生背景:算法工程师的开发诉求

随着大数据时代的到来和人工智能的崛起,机器学习所能处理的场景更加广泛和多样。构建的模型需要对批量数据进行处理,为了达到实时性的要求还需要直接对流式数据进行实时预测,还要具备将模型应用在企业应用和微服务上能力。为了取得更好的业务效果,算法工程师们需要尝试更多更复杂的模型,需要处理更大的数据集,使用分布式集群已经成为常态;为了及时对市场的变化进行反应,越来越多的业务选用在线学习方式直接处理流式数据、实时更新模型。
杨旭解释道,“我们团队一直从事算法平台的研发工作,感受到了高效能的算法组件和便捷操作平台对开发者的帮助。”针对正在兴起的机器学习广泛而多样的应用场景,他和所带领的团队在2017年开始基于Flink研发新一代的机器学习算法平台,使得数据分析和应用开发人员能够轻松搭建端到端的业务流程。

Alink究竟是什么?

Alink 是阿里巴巴计算平台事业部PAI团队从2017年开始基于实时计算引擎 Flink 研发的新一代机器学习算法平台,提供丰富的算法组件库和便捷的操作框架,开发者可以一键搭建覆盖数据处理、特征工程、模型训练、模型预测的算法模型开发全流程。项目之所以定为Alink,是取自相关名称(Alibaba, Algorithm, AI, Flink, Blink)的公共部分。
借助Flink在批流一体化方面的优势,Alink能够为批流任务提供一致性的操作。杨旭提到,在2017年初,他们通过调研团队看到了Flink在批流一体化方面的优势及底层引擎的优秀性能,于是基于Flink重新设计研发了机器学习算法库,即Alink平台。该平台于2018年在阿里集团内部上线,随后不断改进完善,在阿里内部错综复杂的业务场景中锻炼成长。
“作为业界首个同时支持批式算法、流式算法的机器学习平台,Alink 提供了 Python 接口,开发者无需 Flink 技术背景也可以轻松构建算法模型。”
据杨旭介绍,Alink 已被广泛运用在阿里巴巴搜索、推荐、广告等多个核心实时在线业务中。在此前落幕的天猫双 11 中,单日数据处理量达到 970PB,每秒处理峰值数据高达 25 亿条。Alink 成功经受住了超大规模实时数据训练的检验,并帮助提升 4% CTR(商品点击转化率)。

Alink功能简介


1、丰富的算法库
Alink拥有丰富的批式算法和流式算法,帮助数据分析和应用开发人员能够从数据处理、特征工程、模型训练、预测,端到端地完成整个流程。如下图所示,Alink提供的开源算法模块中,每一个模块都包含流式和批式算法。比如线性回归,包含批式线性回归训练、流式线性回归预测和批式线性回归预测。



2、友好的使用体验
“为了提供更好的交互式和可视化体验,我们在开源的同时推出了PyAlink,用户可以通过PyAlink的Python包以notebook的方式使用Alink。”杨旭表示,PyAlink不仅支持单机运行,也支持集群提交,并且打通了Operator(Alink算子)和DataFrame的接口,从而使得Alink整个算法流程无缝融入Python。PyAlink也提供使用Python函数来调用UDF或者UDTF。PyAlink在notebook中使用如下图,展示了一个模型训练预测,并打印出预测结果的过程。



3、与Spark对比
在离线学习算法方面,Alink 跟 SparkML 性能对比基本相当,下图给出的是一些经典算法的性能对比:



通过上图可以看出,Alink在大部分算法性能优于Spark,个别算法性能比Spark弱,整体是一个相当的水平。
但是,“在功能的完备性方面,Alink更有优势”,Alink除了覆盖Spark的算法,还包含流式算法、流批混跑、在线学习、中文分词等。

阿里和Alink的开源之路

在2018年,GitHub新增活跃用户数量超过了前六年的总和,相较于2017年新增了40%的组织机构和30%的代码仓库。从全球趋势来看,开源无疑是软件发展的大势所趋。目前在国内,阿里是贡献开源最出色的企业。GitHub上有大量的开源项目由阿里创建,据阿里经济体GitHub开源生态报告统计,国内Top10的开源项目中,阿里的开源项目有6个。
在谈Alink开源之前,杨旭首先介绍了与之相关的Flink与FlinkML。“Flink是一个面向数据流处理和批量数据处理的可分布式的开源计算框架,我们看好Flink引擎的优秀性能,希望基于Flink解决流程机器学习场景的问题。”FlinkML为Flink自带的机器学习算法库,分为旧的版本和新的版本。“在做Alink前,我们首先认真调研了当时的FlinkML(即旧版本FlinkML)的情况,其仅支持10余种算法,支持的数据结构也不够通用,在算法性能方面做的优化也比较少,而且其代码也很久没有更新。所以,我们放弃了基于旧版FlinkML进行改进、升级的想法,决定基于Flink重新设计研发机器学习算法库,随后发展为现在的Alink。”
Alink在发展的过程中一直与Flink社区紧密关联,在每年的Flink Forward大会上,团队一直有汇报项目的进展,共同探讨技术问题,获取反馈和建议。随着Alink功能的不断增强和完善,“社区中欢迎Alink进行开源的呼声日益高涨,我们也开始和Flink社区更紧密联系,推动开源Alink的代码进入FlinkML。”
与此同时,社区中更多的人意识到旧版FlinkML的问题,决定整个废弃掉旧版FlinkML,建设新版FlinkML。“我们积极参加新版FlinkML API的设计,分享Alink API设计的经验;Alink的Params等概念被社区采纳;之后开始为新版FlinkML贡献算法实现代码,已提交了40余个PR,包括算法基础框架、基础工具类及若干算法实现。”
Alink包含了非常多的机器学习算法,在向FlinkML贡献的过程中,需要社区commiter的讨论设计与审查代码,这个过程有助于代码的精益求精,但由于社区commiter的资源有限,代码完全贡献到FlinkML的过程会持续很长时间。“这时,我们不得不考虑是否有其他方式,可以让用户先用起来”,“Alink单独开源是个很好的解决方式”,它与向FlinkML继续贡献算法实现,可以同时进行。用户的使用反馈也有助于更好的改进算法实现。
此想法获得了社区的支持,获得了阿里内部的支持,在Flink Forword Asia 2019大会上,Alink正式宣布开源。
目前,Alink开源已经四个多月,在这段时间里Alink在开源社区的声望越来越高,Alink在Github上已经有2000多颗Star,400多次fork。杨旭感叹道,“目前为止,我们的开源用户群已经将近1000人,并且已经有多位社区开发者向Alink提交算法code,有几十位社区的Alink用户向我们提出Alink算法bug或者算法改进需求。Alink开发团队也积极和社区互动,共同推进Alink平台的发展。”一方面,Alink团队积极支持社区用使用Alink,帮助数百位社区用户解决他们在使用Alink算法遇到的困难。另一方面,针对社区用户提出的算法bug和算法改进需求,Alink团队第一时间作出响应,对这些bug和改进需求进行排期,并在开发完成后及时开源到社区,解决社区用户的需求。
“虽然Alink的开源已经取得了阶段性成果,我们仍然在积极向FlinkML贡献代码”,杨旭最后表示,他希望将更多优秀的机器学习算法贡献给Flink项目,也希望和社区一起努力,共同促进Flink社区机器学习生态的发展和繁荣。

End


推荐阅读

    你点的每个“在看”,我都认真当成了AI

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存