前言
机器学习的核心即为深度学习,通过不断的模型训练和预测,机器学习的价值越来越得到明显,深度学习技术在当代社会发挥的作用越来越大。目前深度学习被广泛应用于个性化推荐、机器翻译、自动驾驶、商品搜索、人脸识别等多个领域,此外还在向社会各个领域迅速渗透。
当前,社会结构变得复杂化和多元化,各种生态再适应时代的过程中也在不断突破和衍生,深度学习就是一个典型的案例,它孵化出来的应用越来越多样化,随之涌现出诸多优秀的计算框架。其中 PyTorch,TensorFlow,MXNeT 作为广泛使用的框架更是备受瞩目。在将深度学习应用于实际业务的过程中,往往需要结合数据处理相关的计算框架如:模型训练之前需要对训练数据进行加工生成训练样本,模型预测过程中需要对处理数据的一些指标进行监控等。在这样的情况下,数据处理和模型训练分别需要使用不同的计算引擎,增加了用户使用的难度。
本文将分享如何使用一套引擎搞定机器学习全流程的解决方案,通过link-ai-extended支持模型训练和模型的预测。
机器学习工作流程
先介绍一下典型的机器学习工作流程。如图所示,整个流程包含特征工程、模型训练、离线或者是在线预测等环节。
在此过程中,无论是特征工程、模型训练还是模型预测,中间都会产生日志。需要先用数据处理引擎比如 Flink 对这些日志进行分析,然后进入特征工程。再使用深度学习的计算引擎 TensorFlow 进行模型训练和模型预测。当模型训练好了以后再用 TensorFlow serving 做在线的打分。
上述流程虽然可以跑通,但也存在一定的问题,比如:
同一个机器学习项目在做特征工程、模型训练、模型预测时需要用到 Flink 和 TensorFlow 两个计算引擎,部署相对而言更复杂。
TensorFlow 在分布式的支持上还不够友好,运行过程中需要指定机器的 IP 地址和端口号;而实际生产过程经常是运行在一个调度系统上比如 Yarn,需要动态分配 IP 地址和端口号。
TensorFlow 的分布式运行缺乏自动的 failover 机制。
针对以上问题,我们通过结合 Flink 和 TensorFlow,将 TensorFlow 的程序跑在 Flink 集群上的这种方式来解决,整体流程如下: