MLOps:构建生产机器学习系统的最佳实践(下)

简介: MLOps:构建生产机器学习系统的最佳实践

3、数据ETL

在这个步骤中,为ML任务准备数据。这包括数据清理、过滤、数据转换和特性调整。它应该做一些事情,比如为整数映射生成特性。此外,该组件准备可能在训练组件中需要的特征元数据(例如,这包括特征规范化训练步骤中需要的元参数,分类变量编码所需的字典,等等)。这些称为转换工件;它们帮助构建模型输入。

重要的是,生成的任何映射都必须保存并在服务时重用(当训练过的模型用于进行预测时)。如果不能始终做到这一点,就会导致我们之前谈到的培训服务倾斜问题。

640.png

4、模型训练

模型训练组件负责训练我们的模型。在大多数用例中,模型可以训练数小时、数天甚至数周。优化一个需要数周训练的模型是不可行的。在其他情况下,用于训练模型的数据甚至无法装入内存。

在这种情况下,模型训练组件应该能够支持数据和模型并行性;并扩大到大量工作线程。它还应该能够处理内存不足的数据。

理想情况下,ML系统的所有组件都应该是可伸缩的,并运行在支持可伸缩性的基础设施上。

这个模型训练组件还应该能够在训练时自动监视和记录一切。我们不能训练一个机器学习模型很长一段时间,而不去观察它的运行情况,并确保它的正确配置能够随着迭代次数的增加而最小化损失函数。最后,训练组件还应该支持超参数调优。

5、模型分析

在模型分析组件中,我们对训练结果进行深入分析,并确保导出的模型具有足够的性能,可以推向生产。

这一步帮助我们保证模型只有在满足框架阶段预设的质量标准时才会被提升服务。标准必须包括与以前部署的模型相比的性能改进,以及在不同数据子集/切片上的性能。在下面的图中,我们在特性切片trip_start_hour上显示我们训练过的模型的性能。

640.png

该步骤的输出是一组性能指标,以及是否将模型推广到生产环境的决策。

6、模型服务部署

与训练组件相反,我们通常关注的是数据和模型复杂性的缩放。在服务部署组件中,我们感兴趣的是通过最小化响应延迟和最大化吞吐量来响应可变的用户需求。

因此,服务组件应该具有较低的延迟以快速响应用户、高效率以便在需要时可以同时运行多个实例、水平扩展、可靠和健壮地应对故障。

我们还需要我们的服务组件能够轻松地更新到模型的新版本。当我们获得新的数据或触发新的管道运行,或测试新的模型架构思想时,我们将希望推出模型的新版本,并希望系统无缝地过渡到这个新版本。

7、监控

正如我们前面提到的,由于不断变化的数据配置文件,部署的ML模型的性能会随着时间的推移而下降,我们需要确保我们的系统正在监视并响应这种下降。

因此,我们需要跟踪数据的汇总统计数据,并监控模型的在线性能,以便发送通知、在值偏离预期时进行回滚,或者潜在地调用ML流程中的新迭代。

640.png

因此,在线监控是检测性能退化和模型过时的关键。它作为一个线索,以新的实验迭代和再训练模型的新数据。

我们刚才描述的步骤的自动化水平定义了我们的ML系统的成熟度,它也反映了由模型衰退或给定的新数据触发的新模型的训练速度。

管道编排组件:目前,手工流程在许多用例中非常普遍。当模型由于静态数据分布而很少更改时,这可能就足够了。但在实践中,这种情况很少发生。数据通常是动态的,模型在实际部署时经常会中断。静态模型肯定不能适应描述环境的数据的变化。

手工处理也可能是危险的,因为它会导致ML训练和ML服务之间的断开。它将创建模型的数据科学家和作为预测服务操作模型的工程师分开。而这一过程会导致训练服务的倾斜问题。

业务流程组件的目标是连接系统的不同组件。它按顺序运行管道,并根据定义的条件自动从一个步骤移动到另一个步骤。这是自动化的第一步,因为我们现在可以使用基于实时管道触发器的新数据自动培训生产中的新模型。

640.png

我们需要注意的是,在生产环境中,我们并没有将训练过的模型部署为预测服务。我们实际上正在部署一个完整的训练管道,它会自动且反复地运行,以作为预测服务来服务训练过的模型。

管道的元数据存储:管道元数据存储的作用是记录ML管道执行的所有细节。这对于保持组件之间的沿袭和在任何需要的时候重新生成已部署的模型非常重要。它还可以帮助我们调试遇到的任何错误。

每次执行管道时,存储都会记录所有关于管道执行的细节,例如:

  • 我们的管道和组件的版本被执行的源代码。
  • 传递给我们管道的输入参数。
  • 管道中每个执行组件产生的工件/输出,如原始数据的路径、转换的数据集、验证统计数据和异常、训练的模型……
  • 模型评估度量标准,以及关于模型部署的模型验证决策,这些决策是在模型分析和验证组件期间产生的……

640.png

CI / CD管道自动化

到目前为止,我们只讨论了如何自动化ML管道的持续执行,以基于新数据的可用性或模型衰减来捕捉新出现的模式等触发器来重新训练新模型。

但是,如果我们想测试一个新的特性,一个新的模型架构,或者一个新的超参数呢?这就是自动化CI/CD管道的意义所在。CI/CD管道让我们能够快速探索新的想法和实验。它允许我们自动构建、测试和部署新管道及其组件到预期的环境。

以下是CI/CD流水线自动化如何补充连续ML流水线自动化:

  • 如果给定新的实现/代码(新的模型架构、特性工程和超参数……),一个成功的CI/CD管道会部署一个新的连续ML管道。
  • 如果给定新的数据(或模型衰减触发器),成功的自动连续管道将部署新的预测服务。要用新数据训练新的ML模型,需要在新数据上执行之前部署的ML管道。

640.png

完整的端到端自动化管道应该如下所示:

640.png

  • 我们迭代地尝试了新的ML想法,其中对一些管道组件进行了更新(例如,引入新功能将看到我们更新数据转换组件……)。此阶段的输出是新ML管道组件的源代码,然后将其推送到目标环境的源存储库中。
  • 新源代码的存在将触发CI / CD管道,而CI / CD管道将反过来构建新的组件和管道,运行相应的单元和集成测试,以确保一切均已正确编码和配置,最后将新管道部署到目标环境是否通过所有测试。机器学习系统的单元测试和集成测试本身值得一篇独立的文章。  
  • 根据计划,新训练数据的存在或响应触发器,新部署的管道将在生产中自动执行。此阶段的输出是经过训练的模型,该模型被推送到模型注册中心并进行连续监视。

为什么Tensorflow ?

在这最后一节中,我想谈谈为什么Tensorflow是我开发集成ML系统时首选的框架。当然,TensorFlow可能并不适合并适用于所有的用例,有时甚至可能是一种过度使用,特别是在不需要深度学习的情况下。然而,我倾向于在可能的情况下使用Tensorflow,原因如下:

Tensorflow自带Tensorflow Extended (TFX)。TFX使我们能够专注于优化ML管道,同时减少对每次重复的样板代码的关注。像数据验证和模型分析这样的组件可以很容易地完成,而不需要开发自定义代码来读取数据并在两次管道执行之间检测异常。使用TFX,只需要很少几行代码就可以完成,从而节省了大量开发管道组件的时间。数据验证和模型分析组件中的截图来自TFX。

我们可以设计自定义模型,我们可以使用TF layers API、TF losses API、....来构建这些模型如果我们正在构建一些相当标准的东西,TensorFlow有一组我们可以尝试的预估器。Tensorflow 2可以很好地与Keras模型一起工作。随着数据和培训时间的增加,我们的需求也会增加。检查点允许我们在需要时暂停并恢复训练,如果预先设定的时间不够,则继续训练。

Tensorflow设计了一个数据集API,可以很好地处理内存不足的数据集。

模特训练需要几个小时,有时几天。我们不能在不检查模型是否按预期运行的情况下对模型进行长时间的训练Tensorboard是TensorFlow的可视化工具包。TensorBoard提供了机器学习实验所需的可视化和工具。它允许我们将在训练期间实时生成的TensorFlow关键指标显示出来,并将它们可视化在训练和验证集上,以便查看我们的模型是否正确地配置为收敛。如果情况不是这样,我们可以停止训练。

我们可以将TensorFlow分布在一个集群上以使它更快。从一台机器到多台机器可能听起来很复杂,但有了Tensorflow,我们就可以开箱即用了。TF为训练和评估抽象了分布式执行的细节,同时也支持跨本地/非分布式和分布式配置的一致行为。

目录
相关文章
|
10天前
|
机器学习/深度学习 自然语言处理 Linux
Linux 中的机器学习:Whisper——自动语音识别系统
本文介绍了先进的自动语音识别系统 Whisper 在 Linux 环境中的应用。Whisper 基于深度学习和神经网络技术,支持多语言识别,具有高准确性和实时处理能力。文章详细讲解了在 Linux 中安装、配置和使用 Whisper 的步骤,以及其在语音助手、语音识别软件等领域的应用场景。
40 5
|
10天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
26 1
|
1月前
|
机器学习/深度学习 API 计算机视觉
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
24 2
|
1月前
|
机器学习/深度学习 存储 算法
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
30 1
|
1月前
|
机器学习/深度学习 算法 数据挖掘
机器学习入门(二):如何构建机器学习模型,机器学习的三要素,欠拟合,过拟合
机器学习入门(二):如何构建机器学习模型,机器学习的三要素,欠拟合,过拟合
|
2月前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
50 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
1月前
|
机器学习/深度学习 算法 数据可视化
【机器学习】决策树------迅速了解其基本思想,Sklearn的决策树API及构建决策树的步骤!!!
【机器学习】决策树------迅速了解其基本思想,Sklearn的决策树API及构建决策树的步骤!!!
|
3月前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
3月前
|
机器学习/深度学习 人工智能 Android开发
揭秘AI编程:从零开始构建你的第一个机器学习模型移动应用开发之旅:从新手到专家
【8月更文挑战第29天】本文将带你走进人工智能的奇妙世界,一起探索如何从零开始构建一个机器学习模型。我们将一步步解析整个过程,包括数据收集、预处理、模型选择、训练和测试等步骤,让你对AI编程有一个全面而深入的理解。无论你是AI初学者,还是有一定基础的开发者,都能在这篇文章中找到你需要的信息和启示。让我们一起开启这段激动人心的AI编程之旅吧! 【8月更文挑战第29天】在这篇文章中,我们将探索移动应用开发的奇妙世界。无论你是刚刚踏入这个领域的新手,还是已经有一定经验的开发者,这篇文章都将为你提供有价值的信息和指导。我们将从基础开始,逐步深入到更复杂的主题,包括移动操作系统的选择、开发工具的使用、
|
3月前
|
机器学习/深度学习 数据采集 缓存
Elasticsearch与机器学习集成的最佳实践
【8月更文第28天】Elasticsearch 提供了强大的搜索和分析能力,而机器学习则能够通过识别模式和预测趋势来增强这些能力。将两者结合可以实现更智能的搜索体验、异常检测等功能。
104 0

热门文章

最新文章