数据科学(和机器学习)所面临的挑战
毫无疑问,这个时代属于人工智能(AI),这导致机器学习在几乎每个领域的使用,试图解决医疗保健、商业领域和技术领域的不同类型的问题,可以说机器学习无处不在。 同时,开源软件(OSS)和基于云的分布式计算也促使了许多工具、技术和算法的出现,而开发机器学习模型来解决问题并不是挑战,真正的挑战在于如何管理这些模型及大规模数据。
在过去的二十年里,让我们对软件开发有了一些深刻的理解,其中很大一部分原因是DevOps的出现及其在整个行业中的广泛运用。数据科学(和机器学习)开发过程需要向SDLC(软件工程)学习,以应对这些挑战,这些挑战是什么呢?
答案是:它们与SDLC(软件工程)通过采用DevOps实践所面临的挑战相同,例如:
- 数据挑战:数据集依赖。模型训练和评估阶段的数据在实际生产场景中可能会有所不同。
- 模型挑战:ML模型是在数据科学家的沙箱中构建,它的开发并没有考虑到可扩展性;相反,它只是为了获得良好的准确性和正确的算法而开发的,而不是为了扩展 ML 应用程序。
- 自动化:训练一个简单的模型并将其用于推理和生成预测结果是一项简单的手动任务。然而在现实世界中(大规模机器学习),必须在任何地方实现一切自动化。自动化是在 ML-SDLC 的不同阶段实现可扩展性的唯一途径。
- 可观察性:监控、警报、可视化以及指标。
在讲述MLOps之前,我们先来简单普及下DevOps。
浅述DevOps
DevOps的定义
DevOps 是开发 (Dev) 和运营 (Ops) 的复合词,它将人、流程和技术结合起来,不断地为客户提供价值。
DevOps 对团队意味着什么?
DevOps 使以前孤立的角色(开发、IT 运维、质量工程和安全)可以协调和协作,以生产更好、更可靠的产品。通过采用 DevOps 做法和工具,团队能够更好地响应客户需求,增强对所构建应用程序的信心,更快地实现业务目标。
DevOps的好处
采用 DevOps 做法和工具的团队将获得高绩效,可以用更快的速度构建更好的产品以获得更高的客户满意度。若要实现以下业务目标,这种改进的协作方式和生产能力不可或缺:
- 缩短上线时间
- 快速适应市场和竞争
- 保持系统稳定性和可靠性
- 缩短平均故障恢复时间
那么,我们应该如何在机器学习软件应用程序开发的生命周期(ML-SDLC)中应用DevOps实践呢?
浅述MLOps
MLOps的定义
MLOps是机器学习和运营的复合词,它是数据科学家和运维专业人员之间协作和沟通的一种实践,以帮助管理生产机器学习(或深度学习)生命周期。与 DevOps 或 DataOps 方法类似,MLOps 希望提高自动化程度并提高生产 ML 的质量,同时还关注业务和监管要求。 虽然 MLOps 也是作为一组最佳实践开始的,但它正在慢慢演变为一种独立的 ML 生命周期管理方法。 MLOps 适用于整个ML生命周期--从模型生成(软件开发生命周期、持续集成/持续交付)、编排和部署的集成,到健康、诊断、治理和业务指标。简单来时,MLOps=ML+DEV+OPS
DevOps与MLOps生命周期的比较
MLOps工具的使用场景
通过利用平台并将其应用于特定的案例,可以减少解决 MLOps 所面临的挑战和所涉及的工作量。AI (ML) 工具领域很复杂,不同的工具专门用于不同的领域,在某些情况下,有竞争力的工具能以不同的方式解决类似的问题。请参阅下面的 Linux 基金会的 AI 项目总览,其中,包括不同类别的工具列表。
选择MLOps工具的标准
如果您已经查看了上述 Linux 基金会的 AI 项目格局(工具分类列表),您就会意识到有许多不同的工具,包括商业的和开源的。
那我们应该以什么样的标准来进行选择呢?
开源
这非常适合早期采用者,也适合轻松实现概念验证或开始您自己的个人项目。
基于Kubernetes
Kubernetes和容器是我们的应用程序(甚至是机器学习应用程序)将要运行的新平台。
平台
我们不想浪费精力集成异构工具。通常,我们想要一个已经无缝集成成熟工具的堆栈或平台。
MLOps涉及的主要功能
端到端的 MLOps 流水线(pipeline)负责持续集成、交付和训练。它们相互补充,以此来缩短了向客户提供 AI 解决方案的途径。
持续集成和持续交付(CI/CD)
MLOps仍然需要DevOps提倡的CI/CD框架,这是一种经过验证的方法,可以频繁地进行高质量的代码更新。然而,机器学习通过数据和模型验证扩展了集成阶段,而交付则解决了机器学习部署的复杂性。总之,CI/CD将数据、模型和代码组件组合在一起,以发布和更新预测服务。
持续训练 (CT)
作为 MLOps 独有的概念,CT 完全是关于模型再训练的自动化。 它涵盖了模型生命周期的所有步骤,从数据接入到在生产环境中跟踪其性能。CT 确保您的算法在生产环境中你的模型出现衰退或变化时第一时间被更新。
为了更好地理解怎么将持续集成、持续交付和持续训练转化为实践,以及 ML 专家和运维专家之间如何分担职责,让我们来研究 MLOps 的关键组成部分。 这包括:模型训练流水线(工作流),模型注册(模型仓库),模型服务(部署),模型监控以及 CI/CD 编排。
当然,这些步骤和整个工作流程在不同情况下可能会有所不同,这取决于项目、公司规模、业务任务、机器学习复杂性和其他因素。
模型训练流水线
构建端到端模型训练流水线的工具:TFX(TensorFlow Extended),MLflow,Pachyderm,Kubeflow
模型注册
作为模型注册中心的平台工具:MLflow Model Registry,AI Hub
模型服务
模型服务工具:Seldon Core,MLflow Models,Algorithmia,Kubeflow
模型监控
CI/CD编排
提高 CI/CD 工作流程效率的工具:GoCD,IBM Urban Code, AutoRABIT
MLOps模型训练流水线
通常,流水线会执行以下步骤:
数据接入。任何 ML 工作流都从数据接入开始--换句话说,从外部存储库或特征存储中获取新数据,其中数据被保存为可重用的“特征”,专为特定业务案例而设计。此步骤将数据拆分为单独的训练集和验证集,或将不同的数据流合并为一个包罗万象的数据集。
数据验证。此步骤的目标是确保接入的数据满足所有要求。如果发现异常,工作流可以自动停止,直到数据工程师解决问题。它还会通知您的数据是否随时间发生变化,突出显示模型在生产中使用的训练集和实时数据之间的差异。
数据准备。这一步,原始数据被清理并获得正确的格式,以便您的模型可以使用它。同时,数据科学家可能会介入,使用 DataRobot、Featuretools 或其他特征工程解决方案,将原始数据与领域知识相结合并构建新特征。
模型训练。最后,我们来到了整个工作流的核心。在最简单的情况下,模型针对新接入和处理的数据或特征进行训练。但是,您也可以并行或按顺序启动多个训练任务运行,以确定生产模型的最佳参数。
模型验证。我们在之前从未见过的数据集上测试最终模型的性能,为部署到生产环境做准备。
数据版本控制。数据版本控制是在软件开发中保存类似于代码版本的数据制品。常用的方法是使用 DVC,DVC 允许数据科学家保存实验并在以后重复使用它们,这是一种基于 GIT 的轻量级 CLI 工具,不过您可以在更复杂的解决方案(如 MLflow 或 Pachyderm)中找到类似的功能。
总结
在MLOps中,通过将数据、模型、配置、代码进行版本化的管理,保障了算法工程师在整个机器学习生命周期中模型的快速迭代、持续训练、持续部署。从而能够保证机器学习模型的可重复性,可追溯性,并且能够对生产模型的健康进行诊断;同时,也能很方便查看业务指标。