阿里 Alink:基于 Flink 的机器学习平台

分享嘉宾:杨旭 阿里巴巴 资深算法专家
编辑整理:朱荣

导读: Alink 是基于 Flink 流批一体的机器学习平台,提供一系列算法,可以帮助处理各种机器学习任务,比如统计分析、机器学习、实时预测、个性化推荐和异常检测。除了提供 Java API 也提供了 PyAlink,可以轻松部署到单机及集群环境,通过 Jupyter、Zepplin 等 notebook 使用。Alink 已在阿里巴巴内部支持了众多的应用场景,并在 2019 年 11 月的 Flink Forward Asia 大会上宣布开源,随后不断迭代发布新的版本,增强功能,提升易用性。

本文主要介绍基于 Flink 平台的机器算法的功能、性能与使用实践,帮助大家快速上手 Alink 机器学习平台。其中重点介绍了 python 语言使用的 PyAlink 的方法和实例,同时对 FM 算法进行了详细的介绍,帮助大家更好上手 Alink 并在实际工作中得到广泛应用。

主要围绕下面俩点展开:

  • Alink 基本介绍
  • ALink 快速入门

01 Alink 基本介绍

首先跟大家介绍一下 Alink 的基本情况:

1. 什么是 Alink?

Alink 是由阿里计算平台事业部研发的基于 Flink 的机器学习算法平台,名称由 Alibaba Algorithm AI Flink Blink 单词的公共部分组成。

Alink 提供了丰富的算法库并天然可以支持批式和流式的处理,帮助数据分析和应用开发人员完成从数据处理、特征工程、模型训练、预测多节点端到端整体流程。

Alink 提供 Java API 和 Python API 两种方式进行调用,Java API 方便工程人员快速将 Alink 接入到现有系统中,Python API 也叫 PyAlink 是方便提供机器学习同学完成快速的实验。

2. Alink 功能介绍

Alink 作为一个重要的机器学习的平台,覆盖机器学习各阶段 13 大类的 62 项功能点,囊括了机器学习核心的分类算法、聚类算法、回归算法三类算法,并附带了 4 项模型评估的方法,同时还包括关联规则和协同过滤算法、相似度算法等数据挖掘方面算法。

  • 在算法完成部分后,也提供了评估模型的评估方法,包括二分类评估、多分类评估、回归评估、聚类评估。
  • 在算法应用之前 Alink 为使用者准备了数据预处理、异常检查、文本处理等辅助功能处理工具。
  • 在在线学习方面 Alink 也准备了 FTRL,可以在线状态中训练,在实时场景中提供模型实时更新机制,增强学习模型调整等时效性。
  • 在机器学习中的模型选择与调试参数服务,为大家提供有效的参数调优。

3. Alink 性能比对

利用加速比对 Alink 与 Sparkml 进行性能评测。具体的测试方法是使用相同的测试数据,相同的参数,用 Sparkml 的计算时间除以 Alink 的计算时间。从下图实际测试对比数据可知,Alink 在大部分算法性能优于 Spark,个别算法性能比 Spark 弱,整体是一个相当的水平。

4. Alink 建设进展

2019 年 7 月发布 Alink version 1.2.0:

  • 支持 Flink 多版本 1.11、1.10、1.09;
  • 支持多忘记系统:本地文件系统,Hadoop 文件系统,阿里云 oss 文件系统;
  • CSV 格式读取、导出组件支持各文件系统;
  • 推出 AK 格式读取、导出组件,简化文件数据操作;
  • 支持模型信息摘要、输出;
  • FM 分类、回归算法;

2019 年 6 月发布 Alink version 1.1.2:

  • 新增 30 个数据格式转化组件;
  • 支持多版本 Hive 数据源;
  • 在 Pipline 和 LocalPredictor 中指出 SQL Select 操作;

2019 年 4 月发布 Alink version 1.1.1:

  • 提升使用体验,参数检查方面更加智能;

2019 年 2 月发布 Alink version 1.1.0:

  • 支持 Flink1.1.0 和 Flink1.9 的平台部署问题,PyAlink 增加兼容 PyFlink 的功能;
  • 改进 UDF/UDTF 功能;
  • 支持 Java Maven 安装和 Python PyPl 安装;
  • 支持多版本的 Kafka 数据源;

2018 年 12 月发布 Alink version 1.0.1:

  • 重点解决 windows 系统上的安装问题。

2018 年 11 月首次发布 Alink version 1.0,在 Flink Forword Aisa 大会上开源。

02 Alink 快速入门

接下来为大家详细的介绍 Alink 的使用方式:

1. 使用 Maven 构建 Alink 项目简介

Java 使用者借助 Maven 中央仓库,大家只需要 4 步就可以很容易的构建出 Alink 项目。第一步:创建项目;第二步:修改 pom 文件,导入 Alink 项目 jar 包;第三步:拷贝修改 Alink Java Demo Code;第四步:构建运行;

详细过程可以参考:

http://zhuanlan.zhilu.com/p/110059114

2. PyAlink 安装实践

Python 使用者借助 PyPl,也可以两部构建 Alink 的使用环境。第一步,针对不同操作系统调整部署环境,包括 MacOS、Windows、阿里云服务器。第二步,从 PyPl 选择最新版本的 PyAlink 安装,如果之前有 PyAlink 需要先卸载旧版本,再通过 PyPl 进行安装。

① PyAlink 任务在 notebook 上运行

PyAlink 的运行方式分为两种,一种是本地运行,一种是集群运行;在 Alink1.1.1 以后优化了运行集群运行地址指定的方式,用户可以更简洁的运行 PyAlink 的任务。

② 基于 PyFlink 的 Alink

Alink Operator 与 PyFlink Table 可以相互转化,方便串联 Flink 和 Alink 的工作流。在 1.1.1 新版本中还提供了 getMLEnv 接口,能直接使用 flink 的提交运行方式直接进行提交 run -py *.py 往集群提交作业。例如:直接使用 python keans.py 。

③ PyAlink 使用体验的改进

为方便的使用 PyAlink,最新版本也对于两个方面进行了优化。一个是 Python UDF 运行中将自动检测 python3 命令,确定运行版本。另一个优化是对 DataFrame 和 BatchOperator 互转性能做了提升,优化后性能提升了 80% 左右;对 collectToDataFrame 进行了同样的优化。

3. Alink 支持的数据源

Alink 支持批式和流式 5 种类型的数据源,其中批式数据源包括文件数据源、Hive、MySQL、内存数据;流式数据源主要是针对 Kafka。



① 读写 Kafka 示例

以逻辑回归模型为例使用 Kafka 分为四步:第一步定义 Kafka 数据源;第二步使用 JSON 提取组件解析 Kafka 中的数据,完成数据类型转换;第三步加载逻辑回归模型,对流数据进行预测;第四步将预测结果再次写出到 Kafka。

② 将 JSON 格式的字符串解析为多列

Alink 也针对 JSON 格式的数据进行解析组件 JsonToColumnsStreamOp,比 json_parser 更方便的处理 JSON 格式到表格字段列格式的数据转化。

③ 日志的字符串解析为多列

在 PyPlink 中可以通过分布方式进行处理,先处理【】括号内的数据,再处理 CSV 格式的数据,PyPlink 提供了 select 选择组件和 link 管道组件。

④ Alink 类型转换组件

Alink 框架中常用 Columns、Vector、Triple 等类型的数据作为算法的输入输出,但用户可能会有多种输入输出数据类型的需求。因此 Alink 提供了全面的类型转换组件,作为衔接使用户数据与 Alink 算法数据的桥梁。

Alink 共支持 Tripile、CSV、JSON、KV、Columns、Vector 等 6 种类型的数据两两相互转换。

批组件中,Alink 实现了 6 种类型的数据两两相互转换的全部 30 个组件;流组件中,实现了除 Triple 作为输入外的共 25 个组件。

Alink 对于众多的组件使用有一些组件命名规律,组件命名格式参考:原始格式 A To 目标格式【流式 |批式】Op(),例如:TripleToJsonBatchOp()可以通过批式处理将 Trip 类型的数据转化为 JSON 格式的数据。

在数据相互转化时,输入类型和输出类型具有特定的参数。输入对应参数即可对组件进行配置。大家可以看到这样的转化规律性是非常强的,使得大家对于格式转化的工作变的更加轻松。

⑤ 优化枚举类型参数

在实际开发过中,Alink 结合 Java 开发 IDE 编辑器的自动提示功能,为选择器提供了参数联想选择的提示功能。

方便开发者对于模型参数的调整,避免参数过多,反复查手册的情况。

对于数量列名称的优化,也有针对原始数据的优化,针对错位列名也提供错误提示功能。

对于开发的开发速度和开发质量的帮助。

4. 统一的文件系统操作介绍

Alink 提供了统一的文件系统操作接口,为开发者屏蔽掉对接各类文件系统的繁琐差异。无论是本地文件系统、hadoop、云存储的 oss 相同功能都可以使用相同名称的接口获得相同的调用意图和返回结果。

在确定文件的位置后,获取到文件的输入流输出流,提供文件拷贝、保存、读取功能的完备性。

在针对不同环境的文件系统构造实例是需要进行特定配置后,就可以利用统一的文件操作,使用标准化接口完成。

5. 数据文件

了解统一文件对象创建和操作接口后,我们看一下一个实际 CSV 文件的操作转化实例。构建一个基于 httpl 网址数据文件,针对实际的处理过程是创建文件操作实例,使用数据格式转化组件 CSVSrouceBatchOp 完成数据 schema 的构建,完成批次文件的处理操作执行。输出执行后的文件内容并通过内容计数来验证文件在转化过程中内容。

统一文件系统代带来的好处,通过一样的代码完成各环境中的数据处理逻辑。

6. FM 算法

Alink 在处理大规模稀疏数据场景,提供具有线性计算复杂度的 FM 算法。针对线性模型的特点,最大的特征是每个函数有一个特征,并且这个特征跟整体函数关系有一个权重。为解决线性模型的表达力,也可以组织一个二阶多项模型来增强线性模型对于复杂度的描述能力。

在二阶模型中参数更丰富,效果更好的代价是权重矩阵w_{ij}将是一个 1/2 N 方的计算复杂度,当特征增加时,维度也将随之增大,造成实际计算中计算力的不足。

因子分解机将是一个较好的折中,在分解机中,每个特征对应着一个向量,向量的权重就是两个向量的内积。一个向量取几十维或者上百维,一般就是取一百维,权重系数就是 100xn,计算更可控。模型所带来的计算量就可以带来更好的计算效果和更合理的计算代价。

  • 附录,Alink 开源地址:

https://github.com/alibaba/Alink


本文地址:https://www.6aiq.com/article/1605626365631
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出