Flink 在机器学习领域的进展一直是众多开发者关注的焦点。今年,Flink 迎来了一个新的里程碑:机器学习算法平台 Alink 开源,这标志着 Flink 正式进入了人工智能领域。
随着大数据时代的到来和人工智能的迅猛发展,机器学习的应用场景变得越来越广泛和多样化。构建的模型需要处理大量的批量数据,并且为了满足实时性要求,还需要直接对流式数据进行实时预测。此外,这些模型还需应用于企业的各种应用和服务。为了实现更好的业务效果,算法工程师们需要尝试更加复杂的模型,并处理更大规模的数据集。分布式集群已成为处理这些任务的常见手段。为了快速响应市场变化,越来越多的企业选择在线学习方式,直接处理流式数据并实时更新模型。
我们团队一直致力于算法平台的研发工作,深刻体会到高效能的算法组件和便捷的操作平台对开发者的巨大帮助。针对新兴的机器学习应用场景,我们于2017年开始基于 Flink 研发新一代的机器学习算法平台,命名为 Alink,旨在帮助数据分析和应用开发人员轻松搭建端到端的业务流程。
Alink 是阿里巴巴计算平台事业部PAI团队基于实时计算引擎 Flink 研发的新一代机器学习算法平台。它提供了丰富的算法组件库和便捷的操作框架,使开发者可以轻松搭建从数据处理、特征工程、模型训练到模型预测的完整流程。
利用 Flink 在批流一体化方面的优势,Alink 为批处理和流处理任务提供了统一的操作方式。在实践中,我们发现 Flink 原有的机器学习库 FlinkML 存在一些局限性(例如只支持十几种算法,且支持的数据结构不够通用)。因此,我们基于 Flink 重新设计并开发了机器学习算法库,于2018年在阿里集团内部上线,并持续改进和完善,以适应复杂的业务场景。
自 Alink 开发之初,我们就与社区紧密合作。多次在 Flink Forward 大会上介绍我们在机器学习算法库研发方面的最新进展,并分享技术心得。
作为业界首个同时支持批式算法和流式算法的机器学习平台,Alink 提供了 Python 接口,即使不具备 Flink 技术背景的开发者也能轻松构建算法模型。
Alink 已被广泛应用于阿里巴巴的搜索、推荐、广告等多个核心实时在线业务中。在刚结束的天猫双11活动中,单日数据处理量达到 970PB,每秒处理峰值数据高达 25 亿条。Alink 成功应对了大规模实时数据训练的挑战,并提升了 4% 的商品点击转化率(CTR)。
去年 Blink 开源时,我们就开始考虑是否要把 Alink 一起开源。但考虑到当时只开源了一个项目,我们担心一步迈得太大。因此,我们决定逐步推进,先开源 Blink,再考虑 Alink。
Blink 开源后,我们意识到将 Alink 的算法贡献给 Flink 的过程可能比较复杂。当时 Blink 已经占用了大量社区资源,而社区资源有限,无法同时处理多个大型项目。因此,我们决定先消化 Blink 的贡献,然后再逐步贡献 Alink。这是一个不可逾越的过程。
FlinkML 是 Flink 社区现有的机器学习算法库,已经存在很久且更新速度较慢。Alink 是基于新一代 Flink 完全重写的一套算法库,与 FlinkML 没有代码上的关系。Alink 由阿里巴巴计算平台事业部PAI团队开发,并已在阿里巴巴内部广泛应用,现在正式开源。
未来我们希望 Alink 的算法逐渐取代 FlinkML 的算法,最终 Alink 将成为新一代的 FlinkML。这一过程将是漫长的。上半年我们积极参与新版 FlinkML API 的设计,并分享了 Alink API 设计的经验;Alink 的 Params 等概念已被社区采纳。6月份开始贡献 FlinkML 代码,已提交了四十多个 PR,包括算法基础框架、基础工具类及若干算法实现。
Alink 依赖于 Flink 计算引擎,并且 Flink 框架中的 UDF 算子提供了很多优化,包括通讯、数据访问和迭代数据处理等方面的优化,这些优化提高了算法的运行效率。我们还开发了许多配套工具,提升了易用性。Alink 的核心技术之一是在线学习算法,这种算法需要高频快速迭代,Alink 在这方面具有天然优势,适用于今日头条、微博等频繁出现在线场景的平台。
在离线学习方面,Alink 与 SparkML 基本相同,只要工程化做得足够好,两者在性能上差异不大。真正的差异在于设计理念和产品形态。相比 SparkML,Alink 支持所有常用算法,包括聚类、分类、回归、数据分析和特征工程等,并且在流式算法和在线学习方面具有独特优势。
Alink 提供了丰富的批式算法和流式算法,不仅实现了高效的算法库,还提供了便捷的 Python 使用接口,帮助数据分析和应用开发人员从数据处理、特征工程、模型训练到预测,实现端到端的流程。
为了提供更好的交互和可视化体验,我们提供了 PyAlink on notebook,用户可以通过 PyAlink 的 Python 包使用 Alink。支持单机运行和集群提交,并且打通了 Operator 和 DataFrame 的接口,使得 Alink 的整个算法流程无缝融入 Python。PyAlink 还提供了使用 Python 函数调用 UDF 或 UDTF 的功能。
我们还开源了 Alink 的中间函数库,这是在基于 Flink 开发机器学习算法过程中总结和积累的技术。对于 Flink 社区的算法开发者,这些中间函数库可以极大地提高开发效率,快速开发新算法,且功能提升显著。
中间函数库中最重要的是 Iterative Communication/Computation Queue (ICQ),这是我们在迭代计算场景中总结出的一套迭代通讯计算框架。它集成了内存缓存技术和内存数据通讯技术。每个迭代步骤抽象为多个 ComQueueItem(通讯模块与计算模块)串联而成的队列。相对于 Flink 基础的 IterativeDataSet,ICQ 显著提升了性能,代码量相当,且更具可读性。
情感分析是对带有情感色彩(褒义贬义/正向负向)的文本进行分析,以确定文本的观点、偏好和情感倾向。在这个案例中,我们对一个酒店回复的数据集进行了分析。
在网络广告中,点击率(CTR)是衡量广告效果的重要指标。因此,点击预测系统在资助搜索和实时竞价中具有重要意义。该演示使用 Ftrl 方法实时训练分类模型,并进行实时预测和评估。
Alink 已经迈出了开源的第一步。接下来我们将继续与社区合作,根据用户反馈不断完善 Alink 的功能、性能和易用性,解决 Flink 用户在使用机器学习算法时遇到的问题。同时,我们还将继续积极向 FlinkML 提交算法代码。如果贡献进展顺利,Alink 将完全合并到 FlinkML,成为 Flink 生态系统的主干部分。这将是 Alink 的最佳归宿,届时 FlinkML 将与 SparkML 完全对应。
作者:杨旭,花名,品数
本文为云栖社区原创内容,未经允许不得转载。