查看原文
其他

关于机器学习全流程溯源管理的思考

黄绿君 京东科技技术说 2022-03-15

点击「京东数科技术说」可快速关注

「摘要」人工智能和机器学习是挖掘、利用海量数据价值的关键技术。近年来,越来越多的企业、机构借助人工智能和机器学习技术,从大数据中提炼商业见解,辅助商业决策,创造了巨大价值。但机器学习模型的构建和上线服务是一个快速试验和多次探索研究的复杂过程,如何对机器学习全流程进行溯源管理,是减轻模型构建和服务维护人员负担,提升模型构建和服务的效率和质量的重要基础。本文梳理了机器学习流程管理面临的挑战,回顾了当前机器学习全流程溯源管理的方法及其优缺点,提出了为实现机器学习从模型构建到上线服务的全流程管理亟待解决的技术问题。同时,探讨了从模型训练、模型预测、模型线上服务三个环节对机器学习进行全流程溯源管理的方法和技术方案,以及为模型开发平台类产品的规划、设计提供参考。



01
背  景



伴随着现代信息技术的快速发展,人类社会进入大数据时代,大数据正深刻改变着人类社会发展方向。大数据的核心是利用数据的价值,人工智能和机器学习是利用数据价值的关键技术。近年来,越来越多的企业、机构借助人工智能和机器学习技术,从大数据中提炼商业见解,辅助商业决策,推动现代商业运营,解决了许多传统方法难以解决的问题,创造了巨大价值。


随着大数据的积累、机器学习算法的改进、新算法的提出、先进硬件资源提供的算力不断增强、以及机器学习和深度学习各种基础框架和工具箱的发展,在生产环境开发和部署一个新的复杂机器学习系统逐渐变得简单,但是,应用者们经过几年持续地在真实系统中积累了各种机器学习模型后,发现维护它们会非常困难,且成本昂贵。



1.1机器学习流程管理面临的挑战


(1) 机器学习模型的构建和上线服务是一个快速试验和多次探索研究的复杂过程。构建一个性能指标表现良好的可用于生产环境的模型服务,需对用什么数据源、如何加工处理、构建哪些模型特征、选择什么算法和模型架构、如何调整模型参数和超参数、模型性能指标表现如何等多方面进行多次探索研究、对比验证,并根据之前试验表现指导设计下一轮试验。然而,目前缺少对这些过程的合理记录和管理的方法和工具,试验设计难以对比,模型结果难以复现。


(2) 一个真实系统中的模型服务包括数据清洗预处理、特征工程、模型开发构建、模型性能评估、模型上线服务以及模型更新迭代等主要内容,流程长、环节多,且各环节关联紧密,上游环节的变化会直接对下游环节产生复杂的影响,根因溯源困难。


(3) 由于一个完整的机器学习模型构建和上线服务过程的上述特点,一般会将流程中相对独立的环节拆分出来,分配给团队中的相应角色,多人协作,以缩短开发周期,尽快上线服务于相关产品。但是,如果各环节版本对应关系、接口规范缺乏统一科学管理,则团队成员之间沟通成本增加、协作困难,甚至影响模型输出结果的可用性。


(4) 由于产品、业务的需要,模型会进行迭代更新,模型服务在生产环境可能存在多个版本,对模型服务的多版本管理难于常规的代码管理。一方面,模型服务不同于传统软件,它不仅包含代码,还包含模型服务依赖的模型文件和数据等大型文件以及其运行时软硬件环境参数和模型参数;另一方面,生产环境中的线上模型可能由于多种原因出现异常,需要便捷及时地复现结果和溯源根因,切换到另一版本模型服务,而切换版本时需要对该版本的性能指标表现、运行时软硬件环境参数和模型参数有全面的了解,以确保版本回滚正常。


Google科学家D. Sculley等人在《Hidden Technical Debt inMachine Learning Systems》一文中提出CACE原则:改变任何东西改变所有东西(ChangingAnything Changes Everything)。CACE原则不仅适用于模型输入数据,也适用于超参数、学习设置、采样方法、收敛阈值、数据选择以及其它每个可能的改变。



1.2机器学习流程管理方法及存在问题


针对上文阐述的机器学习项目中模型构建到上线服务流程的特点以及对该流程各环节进行全流程溯源管理的必要性和重要性,当前,部分产品和系统从不同角度有侧重地提出了一些技术解决方案。


(1)Git (https://git-scm.com/)。Git是一个免费、开源的分布式的版本控制系统,用以高效地处理从很小到非常大型项目的版本管理。能够在项目生命周期中追踪、查看软件系统的变更和演进,并方便开发者进行协同开发,使得项目中各开发者能够在本地完成开发而最终通过版本控制系统将各开发者的工作合并在一起进行管理。该工具被广泛应用于软件开发和部署,GitLab、GitHub是对Git开源工具的商业化实现。


Git是一个代码版本管理的优秀工具,但它不太适用于机器学习模型全流程溯源管理,尽管代码是一个主要组成部分。模型构建和上线服务过程往往涉及其它多个环节的重要依赖,例如上下游的触发作业、模型运行的软硬件环境参数、模型运行时参数和超参数以及模型性能表现等等,这其中很多参数是建模人员在训练或上线模型过程中配置产生的,不是写在代码或文件中,每一次运行对比可能会有部分变化,难以通过Git进行版本管理。如果强制要求将所有配置参数写到文件中,会增加建模人员维护成本,且这些模型配置通过Git进行版本管理时,不便进行直观的可视化管理和对比,也难以应用于模型开发全流程。


(2)Comet (https://www.comet.ml/)。Comet是一个对机器学习试验历史、代码变更和模型性能表现进行跟踪、可视化对比的机器学习项目版本管理解决方案,允许数据科学家和开发人员轻松地监控、比较和优化其机器学习模型,且能够与Git集成,支持团队协作。


Comet侧重解决模型试验环节变更历史追溯、版本对比管理以及协作开发中的问题,但未能够将模型试验的结果与生产环境中的模型服务对应起来,需用户在说明文档中维护对应关系,当线上模型服务异常或版本变更时,无法很好的与模型试验进行关联溯源;另外,对于模型线上服务的运行时参数也缺乏管理,不利于降低线上模型维护的难度和成本。


(3)华为云Model Arts。Model Arts是2018年10月华为云在HUAWEI CONNECT 2018会上发布的面向AI开发者的AI全流程开发平台与工具,实现在AI开发全生命周期中,为原始数据、标注数据、训练作业、算法模型、推理服务等,提供全流程可视化管理。


华为云Model Arts侧重于对建模流程和计算软硬件资源以及运行时参数配置的管理,而缺少对机器学习项目主要组成部分代码的版本管理,需用户通过文件名来区分代码不同版本。另外,模型服务不是一个孤立的过程,线上服务的运行往往需要上游作业的触发,输出也会作为下游作业的输入和启动触发条件,而且不同模型服务的运行周期不同。Model Arts尚未支持线上模型服务依赖配置的管理和监控,从而难以溯源分析上游变化对模型服务的影响以及模型本身版本变化对下游的影响范围。



02
机器学习流程管理亟待解决问题



为实现机器学习模型从模型构建到上线服务的全流程管理,亟待解决以下技术问题。


(1) 机器学习模型构建环节。如何对数据清洗、特征工程、模型训练、模型构建时的软硬件环境参数、运行时参数和超参数、模型评估、模型性能表现以及涉及到的数据集进行全流程版本溯源管理?数据清洗、特征工程、模型训练、模型评估等环节如何进行流畅协作?


(2) 机器学习模型预测环节。如何对数据清洗、特征工程、模型预测、模型预测时的软硬件环境参数、运行时参数和超参数以及涉及到的数据集进行全流程版本溯源管理?数据清洗、特征工程、模型预测等环节如何进行流畅协作?模型预测环节如何与上一步模型构建环节输出的模型文件版本、下一步的生产环境模型上线服务进行有效衔接与溯源、协作?模型预测时如何便捷地从训练好的多版本模型中筛选合适的模型?


(3) 如何对生产环境模型服务的运行软硬件环境参数、运行周期、上下游依赖作业进行溯源管理?对线上服务如何进行模型预测结果监控和预警消息传达?如何进行线上模型自动或半自动回滚,以便进行模型异常的根因溯源定位和影响范围分析?


(4) 为减轻建模人员维护成本,使整个模型构建和上线服务过程中复杂的处理过程清晰化、可追溯、可对比、可复现,缩短迭代出更优模型周期,如何对全流程各步骤版本管理和可视化对比,以方便建模人员清晰的了解哪些步骤做了哪些调整,对模型性能评估结果产生了什么影响?



03
机器学习全流程溯源管理方法


未解决上文提到的机器学习全流程溯源管理中存在的亟待解决的技术问题,本文提出从模型训练、模型预测、模型线上服务三个环节对机器学习进行全流程溯源管理的方法和技术方案。


图1 模型训练、预测环节模型溯源流程图



3.1模型训练环节溯源管理方法


模型训练环节一般包括原始数据清洗加工、特征工程、模型训练和模型评估四个步骤。这四个步骤紧密关联,会随着模型探索、验证的情况进行多次迭代。因此,原始数据清洗加工、特征工程、模型训练和模型评估这四个步骤对应的代码会有不同的版本,代码不同,其输出的数据文件、模型文件和模型评估性能指标也会相应地产生对应的版本。对各步骤多次迭代的版本进行管理,提供不同版本对比工具和各步骤之间的对应关系追溯工具,方便建模人员分析版本之间的差异和模型评估结果的关系,能够缩短迭代出更优模型周期,也方便复现各版本结果。


如图1模型训练部分(虚线上半部分)所示。模型训练过程中数据清洗模块、特征工程模块、模型训练模块、参数配置模块由于探索迭代的需要,会产生一个或多个版本 (由模块上v1v2v3示意);相应地,各模块的输出也有对应的版本 (由输出文件上v1v2v3示意),虚线矩形框是模型训练的上下游作业,不在本文的考虑范围之内。通过Git和DVC(Data Version Control, https://dvc.org)对模型训练过程中的代码(数据清洗代码、特征工程代码、模型训练代码、模型评估代码)、数据文件(原始数据集、清洗加工后数据集、模型训练集)和模型文件进行版本管理,在页面配置每一步操作的上一步依赖版本,由关系型数据库记录各步骤之间的对应关系、各步骤选用的代码或数据的版本、页面配置的模型训练参数和软硬件环境参数、模型训练好的模型文件以及模型评估的性能指标。一条数据库的记录对应一个模型训练作业版本。当对当前版本进行某一个或多个步骤的修改时,保存后则会在数据库生产一条新的记录,对应该模型训练作业的一个新版本。


用户在模型训练页面配置一个模型训练作业时,填写模型训练作业名称和版本号,选择模型训练特征集和标签集(+版本号),从Git仓库中选择模型训练代码(+版本号),配置模型训练参数(包括训练集/验证集拆分比例、模型迭代训练次数、批次数据大小、学习率等运行参数)和软硬件环境参数(包括计算引擎、软件镜像、硬件规格、分布式训练节点数等参数)、输出模型文件路径、模型评估代码(+版本号)以及模型评估性能指标值。然后该过程涉及的信息按存储至数据库。


通过上述方案对模型训练环节各步骤进行版本溯源管理后,建模人员可便捷地进行不同版本对比工具和各步骤之间的对应关系追溯。例如:建模人员可将同一模型的多个版本进行对比,并进行多维度的排序、筛选过滤。对比示意图如表1所示,建模人员可从数据清洗、特征工程、模型训练和模型服务四个环节的多个对比项进行对比,从而分析版本之间的差异与模型评估结果的关系,更明了、深入地理解某步骤修改对模型性能评估指标的影响。


表1 模型版本对比项



3.2模型预测环节溯源管理方法


模型预测环节一般包括待预测数据清洗加工、特征工程、模型预测三个步骤。这三个步骤相对于模型训练环节,变动相对较少,但也需对各步骤的版本以及各步骤之间的对应关系进行溯源管理。



核心原理


如图1中模型预测部分(虚线下半部分)所示。原理与模型训练环节类似,但需依赖于模型训练环节模型好的模型文件,需要依据模型训练环节模型评估的性能指标从多个版本中挑选出一个最优模型文件用于模型预测。通过Git和DVC对模型预测过程中的代码(数据清洗代码、特征工程代码、模型预测代码)、数据文件(原始数据集、清洗加工后数据集、模型预测集)和模型预测结果进行版本管理,在页面配置每一步操作的上一步依赖的版本,由关系型数据库记录各步骤之间的对应关系、各步骤选用的代码或数据的版本、页面配置的模型预测参数和软硬件环境参数、模型训练好的模型文件以及模型预测结果集。一条数据库的记录对应一个模型预测作业版本。当对当前版本进行某一个或多个步骤的修改时,保存后则会在数据库生产一条新的记录,对应该模型预测作业的一个新版本。然后将该过程相关信息进行记录维护从而将整个流程的上下游完整的记录在数据库中。


根据模型训练环节的阐述,相同预测功能的模型有不同的版本,精度不同、模型文件大小不同、对应的数据预处理脚本、预测脚本版本不同,需要进行对比,从而决定选择哪个版本部署为线上某种类型的服务(批量服务、在线服务或边缘服务)。因为不同的服务形态对模型的要求(精度不同、模型文件大小不同、对于的数据预处理脚本)不同,为线上预测服务挑选最优模型可采用以下三种方式:


(1)由建模人员对模型不同版本对比,挑选出最优模型。


(2)在部署线上模型预测服务挑选最优模型时,设置挑选规则如:1) 定期从当前众多版本中筛选出模型性能评估指标最优的一个模型;2)定期从当前众多版本中筛选出模型性能评估指标在一定阈值之上的最新迭代的一个模型


(3)方式一与方式二结合。由挑选规则从当前众多版本中筛选出模型性能评估指标在一定阈值之上的N个模型,再由建模人员对规则筛选出的模型不同版本对比,挑选出最优模型。



3.3模型线上服务溯源管理方法


核心原理


如图2所示,模型线上服务是把模型预测环节的流程部署为一项线上服务,接收上游作业产生的待预测数据作为输入,经模型预测Pipeline输出预测结果作为下游作业的输入。对于一项线上服务时,需要对服务的状态和质量进行监控,当出现异常时快速对出错的环节和原因进行定位和分析,并对相关人进行预警通知,同时根据用户定义的策略决定是否对下游作业采取“熔断触发”机制,即当检测到预测结果相关质量指标低于设定阈值时,是否继续输出给下游作业。另一方面,当检测到预测结果相关质量指标低于设定阈值时,可由模型筛选模块根据配置的策略从表1中自动或加人工决策的半自动地筛选出备用模型,替换线上异常模型,进行版本归滚。本文提出一种模型线上服务进行溯源管理的方法。


图2  模型线上服务模型筛选、全流程溯源示意图


为方便阐述,将模型预测环节待预测数据清洗加工、特征工程、模型预测三个步骤抽象为一个模型预测Pipeline,版本号与模型预测作业版本号一致,模型预测Pipeline的输入来自于上游作业的输出或模型预测请求中传递的特征参数;将模型性能指标评估所需的实际标签加工过程抽象为一个标签处理Pipeline。模型性能指标评估模型整合预测结果和实际标签,根据模型类型计算出相应的模型性能评估指标,例如:分类模型指标包括准确率、召回率、F1得分等,回归模型指标包括平均绝对值误差、均方误差、R平方值等。根据监控质量指标与设定阈值的差异决定是否触发预警通知模块和模型筛选模块。



04
结  论



通过上述模型训练、模型预测、线上服务三个环节溯源管理以及三个环节之间的关联的整合,本文探讨了对机器学习模型从模型构建到上线服务的全流程各步骤进行溯源管理和版本之间参数配置对比的方法,即便捷地追溯某一版本线上模型来自于哪个版本的预测脚本和模型文件,分别依赖和被依赖于哪些上游作业和下游作业,模型文件来自于哪个模型训练作业,模型训练作业来自于哪个版本的训练脚本和哪个版本的训练数据,当模型预测服务出现异常,溯源定位是哪个环节出现问题并预警通知哪些相关人。同时,也讨论了为线上预测服务从多版本中挑选最优模型以及对模型预测质量进行监控、预警的方法。本文提出的技术原理和解决方案应用于模型开发平台类产品,可减轻模型构建和服务维护人员负担,提升模型构建和服务的效率和质量。


参考文献:

1. Sculley, D., et al. (2015). Hidden technical debt in machine learning systems. Advances in neural information processing systems.

2. https://git-scm.com

3. https://dvc.org

4. https://www.comet.ml

5. https://www.huaweicloud.com/product/modelarts.htm




你可能还喜欢作者的其他文章
点击下方图片,即可阅读

AutoML系列 | 01-自动化机器学习技术原理



全是技术干货,快关注它!

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

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