Flink ML 2.0改进算法可用性,还添加Python支持

Apache Flink社群发布机器学习函数库Flink ML 2.0.0,在这个新版本中,开发团队重构Flink ML早期的函数库,扩展Flink ML API并更新Runtime主要功能,像是开始支持多输入和多输出,和添加流媒体批次统一函数库等,另外,这个版本还添加了5个算法实例。

Flink ML是Apache Flink流媒体处理框架的一部分,提供机器学习API和基础设施函数库,能够简化机器学习工作管线构建工作。

Flink ML和基于Flink的机器学习算法平台Alink开发人员合作,一起重新设计API,来提供高性能算法,现在官方开始在Flink ML添加算法,目前这个版本官方已经实例了5种算法,包括对数几率回归、k-means、K-近邻算法、单纯贝氏分类器以及One-hot编码器,除了加入新的算法外,官方也会持续进行压力测试和优化,确保算法的性能。

由于机器学习工作流程的各阶段,可能需要多个输入,并回传多个输出,例如图嵌入算法需要读取两个表格,分别获取图的边和节点资料,又或是工作流程可能有一个阶段,需要将输入资料集拆分成为两个人信息料集,分别用于训练和测试。

而在Flink ML 2.0.0中,算法开发人员可以使用多输入和多输出功能,将机器学习工作流程,组装成为预定义阶段的有向无环图(DAG),并可以在不清楚细节的情况下,配置和部署该工作流程,而这大幅扩展了Flink ML的可用性和应用性。

Flink ML新版本更好地支持线上学习,使用公开模型资料的API,官方解释,在原生的线上学习场景中,用户可能拥有一个长期执行的工作,不断地处理训练资料,并更新机器学习模型,用户能够在网页服务器上,部署多个工作来进行线上推理,而这需要将最新的资料,以接近即时的延迟,从训练工作传输到推理工作。

但问题是,传统的Estimator/Transformer范式,并不提供API以流媒体的方式暴露模型资料,因此用户就许要反复调用fit来更新模型资料,官方表示,用户虽然可以每隔数分钟更新一次模型资料,但是这种方法效率非常差。而新版本中提供了getModelData API,供用户将资料模型即时传输到网页服务器,并使用最新的模型资料进行线上推理,这项功能可以明显强化Flink ML的线上学习应用能力。

另外,Flink ML 2.0.0还加入了流媒体批次统一迭代函数库,官方表示,为了支持训练机器学习算法,并根据预测结果,动态调整模型参数,需要原生支持迭代资料处理,但Flink是使用DAG来描述流程逻辑,因此需要在Flink之上,单独提供迭代函数库,而且Flink要能支持脱机训练和线上训练,迭代函数库还要同时支持流媒体和批处理用例。

因此在这个新版本中,官方实例流媒体批次统一迭代函数库,提供将记录回传给优先运算符,并在迭代中关注进度的功能。用户可以使用DataStream API和Table API来表达迭代内部的执行逻辑。

由于Python广受欢迎,许多机器学习开发者,已经习惯使用Python开发机器学习工作流程,因此Flink ML现在还提供Python组件,来满足Python开发者的需求,接下来官方还会强化Python组件,增加与Java函数库的互通性。