在机器学习的任务过程中,可能面对以下几个问题:
面对这样繁杂的数据、工作量,跨组织的、重复性的工作就迫切需要自动化的流水线设计,该类设计通常迫切需要快速开发迭代。
在软件工程中,DevOps旨在为开发团队缩短开发周期,提高部署速度。这对于一个流水线式机器学习的服务平台开发具有非常大的帮助。近年来,DevOps逐渐向机器学习领域延伸,并逐渐形成一个新的概念—MLOps:应用于管理大规模生产环境中机器学习和深度学习的平台部署。两者的本质都是软件系统,因此DevOps的原理也适用于MLOps。但是,两者仍然存在很多差异,例如前者的输出主要包括源代码、软件等比较单调的成果,而后者不仅包含DevOps的所有输出形式,还包括数据源、模型等。个人认为,MLOps的开发更加繁杂、更具有挑战性。
MLOps的开发对象为机器学习平台。机器学习平台,顾名思义,为集成式机器学习环境而设计,方便缺乏领域知识的相关用户实现流水线式机器学习任务。一个机器学习平台的基础,是将最原始数据经过数据处理(采集、标注、清洗、特征工程等)后作为输入数据,然后在输入和输出的数据中应用灵活可控的模型接口,最后部署、上线训练好的模型以实现应用。在此过程中,数据处理、模型训练、模型预测、测试、部署等都可以抽象成独立可执行单元,实现模块内高内聚、模块间低耦合标准,根据任务之间的依赖关系实现模块的流水线设计。
在学习了Google的MLOps指导及相关综述后,对机器学习系统有了大概的理解。MLOps指导叙述了机器学习平台的各个模块功能及耦合关系,相当全面。这里我从个人角度出发,简单列举了目前认为机器学习平台应具备的必要功能。
在开发机器学习平台时,数据接入是一个重要且必不可少的阶段。机器学习中具有非常多数据源,例如data warehouses, data lakes, data meshes等。这些数据的格式可能多样性,需要统一规范化数据处理,以方便后续流水线式任务对接。
原生数据很有可能不满足模型或需求的输入数据要求及形式,通常需要进一步数据处理操作。例如,大规模机器学习任务需要海量数据的引入及特征的有效表示,而现实世界的数据既缺乏标签(即缺乏训练的目标),且存在属性偏差、缺失、冗余、矛盾等问题,这些数据通常需要修订或重定义,包括但是不限于:数据标注、数据清洗、数据增强、特征工程等。针对这些流程,通常需要具备交互式的各类平台及底层支持,例如Google MLOps指导中定义的数据&特征库、数据处理接口及平台、数据测试流水线等。相关领域中有大量文献致力于解决数据处理中遇到的问题。
机器学习平台的一个核心功能是完善的模型构建流水线。开源机器学习库如Tensorflow,pytorch等需要一定的技术门槛,但大大缩减了机器学习模型的开发难度。机器学习库的多样性同样增加了机器学习规范化统一的难度,例如多用户对不同语言的支持。针对于这一点,Google Vertex AI平台在模型构建阶段提供了支持多类机器学习库的自定义编程。
个人总结了机器学习平台中模型构建的3类的接口:
机器学习平台的一个目标是降低机器学习项目部署的门槛,在模型部署方面,尽量避免过多模型编程的代码(偏向于上述的A和B类)。因此,在模型构建时,需提供完备的预训练模型、面向数据特征匹配的模型推荐、面向任务的模型筛选等;在模型训练时,需提供动态的训练可视化(如tensorboard)、超参数搜索、硬件资源调度支撑等。
在构建模型之后,通常需要大量的测试之后才能部署上线使用。模型验证阶段的目标是多方面的,因为机器学习模型应该泛化未知的输入,实现边界情况的合理处理和整体健壮性,以及满足所有功能需求。
模型验证的形式很多,在模型质量层面上,通常可以利用基于测试用例的模型验证方法+评估指标的形式实现。机器学习平台需要提供充足的测试用例,以辅助模型的开发。但其他形式的模型验证内容,我暂时了解不深,这里先不做叙述,以后再补充。
在数据及模型准备好后,需要将模型及相关依赖资源打包、压缩、甚至蒸馏等操作实现将模型到线上、app等平台的部署。Flyte框架将所有依赖资源打包为Docker镜像,但相对笨重。
模型监控是机器学习平台中模型质量的保证。上线服务后,机器学习模型的输入数据往往是动态的,例如用户歌曲情感趋势、购物倾向、网络舆论等。这些数据可能在数据处理阶段实现矫正,但仍然需要模型监控阶段有倾向性介入,实现数据纠正或进行重训练。对于重训练来说,需要综合考虑模型效果变化,数据更新频率,训练开销,部署开销,重新训练的精度提升幅度,重训练的触发机制等。除此之外,也可抛弃了原始的静态训练并支持模型参数的在线实时更新,实现对模型的调整与优化。
作为软件开发的一部分,完备的日志系统能够记录异常信息、操作规范等。
可视化其实在各个行业中应用非常广泛,与机器学习最为相关的是VIS4AI,即用可视化的手段解释AI中的黑匣子或帮助AI的开发探索。在数据处理阶段,可视化能够通过图表的形式呈现数据的分布、异常的信息、特征的维度等;在模型构架阶段,可视化能够辅助用户构建模型(例如阿里PAI平台中交互式创建模型)、实现AI的可解释性(帮助理解每个layer、特征及训练参数);在模型验证,可视化同样可通过图表形式呈现各类评估指标;在模型监控阶段,可视化能够帮助实现历史版本追踪、模型质量监控等。
传统的Devlop中,只需要对代码、文档进行简单的版本控制。机器学习平台的实际需求扩大了版本控制的范围。数据、模型、实验、配置等是机器学习平台中的重要维护对象,通常需要健壮稳定的版本控制系统。
以实验为例,在开发/使用过程中,实验的历史记录也是也是相当重要的。每个实验可能有许多影响结果的各个组件,例如硬件(GPU)、平台(操作系统和依赖的软件版本)、源代码(模型训练和预处理)、模型参数、训练数据(输入数据和输出数据)以及模型状态、训练模型的版本等。在模型确定的过程中,通常需要执行并记录大量的实验(例如自动化超参搜索),这类实验的所有信息都应该进行详细的版本控制。
现有一些开源机器学习平台,能够在一定程度上实现机器学习项目部署的灵活性和便捷性。
文档比较丰富。
机器学习生命周期管理平台,主要提供实验跟踪、项目打包、模型部署,简化机器学习应用程序的训练、部署和管理。
采用类似于git的管理机制,实现对数据集、ML实验、模型版本等控制。
文档简陋,部署依赖于环境,具有一定门槛;
将所有模块拆分为Task,将Task组装成Workflow;
支持简单的workflow可视化;
UI交互式管理界面;
具有强大的版本管理功能;
用于跟踪和维护以及自动化 Kubernetes原生机器学习流水线;
通过跟踪模型的更改、版本控制、将模型及依赖项通过容器化操作实现可重用性机器学习;
支持Python、R、Scala。
开源的平台大多从软件工程角度上维护机器学习平台的开发,例如系统维护、版本控制、打包部署等。然而,它们仅仅提供了脚手架,大量机器学习平台所需要的功能仍需要从0开发。目前一些机器学习平台逐渐商用化,例如Google Vertex AI、阿里PAI等。
Vertex AI由2021年创建,旨在允许跨技能水平的开发人员和数据科学家快速训练模型,并提供管理模型整个生命周期等功能。该平台着重采用了Google的Auto ML自动化搜索超参数。功能强大,具有一系列数据导入、数据处理、模型自动化选择、模型部署、版本控制、可视化界面等常见功能。
优点:
缺点:
PAI起初是服务于阿里巴巴集团内部(例如淘宝、支付宝和高德)的机器学习平台,致力于让公司内部开发者更高效、简洁、标准地使用AI技术。随着PAI的不断发展,2018年PAI平台正式商业化,目前已经积累了数万的企业客户和个人开发者,是中国领先的云端机器学习平台之一。
个人感觉阿里PAI的突出功能是可视化,以可视化为辅导,创建数据标注、处理、模型构建等一系列流水线任务。PAI在模型测试、验证、维护方面还具有一定的上升空间。
PAI将机器学习任务拆分开,分别维护如下几个模块:
智能标注(iTAG):该模块支持图像、文本、视频、音频等多种数据类型的标注以及多模态的混合标注。该模块覆盖面相对较广,但缺乏深度用户使用的功能。例如图像标注功能中只能实现简单的规则多边形,无法实现类似画刷、蒙版等高阶标注任务。
可视化建模(PAI-Designer):支持大规模分布式的传统机器学习、深度学习、强化学习训练,支持流批一体训练,该子模块封装了上百种机器学习算法,可以拖拽式建模、自动调参,从而无编程玩转人工智能。该部分是PAI面向商用化用户的核心功能,封装大量机器学习算法并提供交互式拖拽定制功能。这种交互式拖拽的功能实现了无代码式简单的机器学习流水线布置工作,模块间耦合度低,容易维护,类似于voreen,inviwo框架。
值得注意的是,DSG也提供了Auto ML的自助式机器学习组件,提供自动化调参及特征工程。在该功能完备的情况下,PAI的优势略比Vertex AI明显。
但是,组件化的缺点也比较明显,即无法自主式实现复杂的模型,且目前缺乏一些较大型深度学习模型的组件,例如目标跟踪、视频处理、目标分割等。基于此,交互式建模方式可称为替代品。
交互式建模(PAI-DSW):PAI-DSW集成了JupyterLab,并以插件化的形式进行深度定制化开发。无需任何运维配置,即可进行Notebook编写、调试及运行Python代码。该模块弥补了可视化建模中无法深度定制的缺点,并且能够灵活调用远程硬件资源,自定义实现数据导入、数据处理、模型构建、模型部署等操作。除此之外,该模块提供一些示例工程、官方镜像等,确实比较方便。
模型在线服务(PAI-EAS):PAI针对在线推理场景提供了在线预测服务,支持基于异构硬件(CPU和GPU)的模型加载和数据请求的实时响应,能够快速部署为RESTful API,实现模型在线服务。
推理优化(PAI-Blade): PAI专门提供了模型的通用推理优化工具,融合了计算图优化、TensorRT/oneDNN等vendor优化库、AI编译优化、Blade手工优化算子库、Blade混合精度及Blade Auto-Compression等多种优化技术,会先对模型进行分析,再对其部分或全部应用优化技术。该工具可以直接通过接口调用,不需修改模型代码。Vertex AI中缺乏该功能。
机器学习平台是一种基于软件工程与机器学习交叉的新兴起方向,其每个功能都需要大量的探索和实践。构建机器学习平台涵盖了大量的工程工作,目前的需求及存在问题也非常明显。机器学习平台方兴未艾,无论是面向集团内部还是面向商用,都具有其独特的用途和技术。
经调研,机器学习平台在各个开发阶段中均具有非常大的挑战,简单总结如下:
个人作为机器学习平台的初学者,暂时缺乏更深层次的认知。文献[8]和[9]详细叙述了机器学习平台开发的历史进程及尚存在的技术难点,这里简单展望一些机器学习平台可锦上添花的部分功能:
[1] [博客]MLOps简介
[2] [课程]Software Engineering for AI-Enabled Systems (SE4AI)
[3] [课程]MLOps (Machine Learning Operations) Fundamentals
[4] [博客]机器学习开源平台1
[5] [博客]机器学习开源平台2
[6] [博客]机器学习云平台应具备哪些功能?
[7] [博客]为什么我们需要机器学习平台?
[8] [论文]Giray, Görkem. “A software engineering perspective on engineering machine learning systems: State of the art and challenges.” Journal of Systems and Software 180 (2021): 111031.
[9] [论文]Paleyes, Andrei, Raoul-Gabriel Urma, and Neil D. Lawrence. “Challenges in deploying machine learning: a survey of case studies.” arXiv preprint arXiv:2011.09926 (2020).