大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
个人主页-Sonhhxg_柒的博客_CSDN博客
欢迎各位→点赞 + 收藏⭐️ + 留言
系列专栏 - 机器学习【ML】 自然语言处理【NLP】 深度学习【DL】
foreword
✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。
如果你对这个系列感兴趣的话,可以关注订阅哟
文章目录
将 ML 与传统编程进行比较
探索 DevOps 的好处
了解 MLOps
机器学习
开发运维
数据工程
机器学习项目生命周期
快速反馈回路
在项目生命周期内进行协作
OSS 在 ML 项目中的作用
在 Kubernetes 上运行机器学习项目
概括
进一步阅读
大多数具有软件工程背景的人都知道术语开发运营(DevOps)。对我们来说,DevOps 是关于软件开发生命周期( SDLC )中不同团队之间的协作和共同责任。团队不限于少数信息技术(IT)团队;相反,它涉及组织中作为项目利益相关者的每个人。构建软件(开发人员的责任)和在生产中运行它(运营的责任)之间不再分离。相反,团队拥有产品。DevOps 很受欢迎,因为它可以帮助团队提高正在开发的软件的速度和可靠性。
在本章中,我们将介绍以下主题:
在我们将 DevOps 应用到 ML 项目之前,我们必须首先了解传统软件开发和 ML 开发流程之间的区别。
与传统应用开发,ML 项目也是一个软件项目,但它们的交付方式存在根本差异。让我们了解 ML 项目与传统软件应用程序有何不同。
在传统的软件应用程序中,软件开发人员编写的程序包含一组明确的手工规则。在运行时或预测时,构建的软件将这些定义明确的规则应用于给定的数据,程序的输出是基于编码规则计算的结果。
下图显示了传统软件应用程序的输入和输出( I/O ):
图 2.1 – 传统软件开发
在 ML 项目中,规则或模式是不完全知道,因此我们不能像在传统编程中那样在代码中明确描述规则。在 ML 中,有一个过程可以根据给定的数据样本对及其相关的预期结果来提取规则。这个过程称为模型训练。在模型训练过程中,选择的 ML 算法根据给定的数据和经过验证的答案计算规则。这个过程的输出是ML 模型。然后可以使用此生成的模型在预测期间推断答案。与传统的软件开发相比,我们没有使用明确的书面规则,而是使用生成的 ML 模型来获得结果。
下图显示了 ML 模型是在训练时生成的,然后在预测时用于生成答案或结果:
图 2.2 – 机器学习开发
尽管传统的软件开发和机器学习有着根本的不同,但是这两种方法在工程过程中有一些协同作用。鉴于传统软件开发在当前时代已经非常成熟,我们可以将其中的经验教训应用到我们的 ML 项目中。当然,首先,传统编程和 ML 都是软件。无论我们在传统世界中应用哪种流程来构建软件,例如版本控制、将软件打包为容器、自动化部署以及等等——这些可以是也适用于 ML 项目。但是,我们还必须适应 ML 中的附加流程,例如模型训练。
那么,为什么我们在 ML 项目中真的需要 DevOps?它带来了什么?让我们在下一节中看看这个。
DevOps 不是只是关于工具集。假设您有一个可以为您运行单元测试的工具。但是,如果团队没有编写测试用例的文化,那么该工具将毫无用处。DevOps 是关于我们如何在跨不同团队的任务上合作。因此,在 DevOps 中要关注的三个主要领域是:
DevOps 建立在敏捷开发实践之上,旨在简化软件开发过程。DevOps 团队是跨职能的,他们拥有构建的自主权软件通过持续集成/持续交付( CI/CD )。DevOps 鼓励团队通过快速反馈循环进行协作,以提高正在开发的软件的效率和质量。
图 2.3 – 展示 DevOps 流程的 mobius 循环
通过 DevOps,团队可以拥有明确定义和简化的开发实践,用于在生产中构建、测试、部署和监控软件。所有这些都使得快速可靠地将软件发布到生产环境中成为可能。此处介绍了 DevOps 实践带来的一些好处:
那么,我们如何才能将 DevOps 方法的好处带到 ML 项目中呢?答案是 MLOps。
MLOps是一个新兴的利用现有软件开发流程的成熟度的领域——换句话说,DevOps 与数据工程和 ML 学科相结合。MLOps 可以简化为将 DevOps 应用于 ML 项目的工程实践。让我们仔细看看这些学科如何构成 MLOps 的基础。
机器学习项目涉及传统编程中不存在的活动。您在图 2.3中了解到ML 项目中的大部分工作不是模型开发。相反,它更多的是数据收集和处理、数据分析、特征工程( FE )、流程管理、数据分析、模型服务等等。在事实上,根据D. Sculley 等人的论文Hidden Technical Debt in Machine Learning Systems ,只有 5% 的工作是 ML 模型开发。正因为如此,MLOps 不仅专注于 ML 模型开发任务,而且主要关注全局——整个 ML 项目生命周期。
与 DevOps 一样,MLOps 关注人员、流程和技术。但是有一些复杂性是 MLOps 必须解决的,而 DevOps 则不必。让我们在这里更详细地了解其中一些复杂性:
构建传统代码以生成可执行二进制文件通常需要几秒钟到几分钟的时间。但是,当您使用某些深度学习( DL ) 算法时,训练 ML 算法以生成 ML 模型可能需要数小时或数天,有时甚至数周。这使得设置敏捷迭代有时间限制的节奏有点复杂。启用 MLOps 的团队需要处理其工作流程中的这种延迟,一种方法是在等待其他模型完全训练的同时开始构建另一个模型。如果数据科学家或 ML 工程师使用自己的笔记本电脑训练他们的 ML 算法,这很难实现。这就是使用可扩展基础架构派上用场的地方。
由于复杂与传统编程相比,ML 添加了解决这些复杂性的需求,这导致了 MLOps 的出现。
按照部署,思考关于您在 ML 项目中编写的所有代码集:执行数据处理的代码、促进模型训练和 FE 的代码、运行模型推理的代码以及执行模型漂移和异常值检测的代码。所有这些代码集都需要构建、打包和部署以供大规模使用。该代码一旦在生产环境中运行,也需要进行监控和维护。这就是 DevOps 的 CI/CD 实践有帮助的地方。自动化软件打包、测试、保护、部署和监控的实践来自 DevOps。
每个 ML项目涉及数据工程,而 ML 项目处理的数据比代码多得多。因此,您的基础架构必须包含数据处理功能,并且可以与组织中现有的数据工程管道集成。
数据工程是一门庞大的学科——可以写一整本书。但我们在这里要强调的是那个 MLOps与数据工程相交实践,特别是在数据摄取、数据清洗、数据转换和大数据测试中。事实上,您的 ML 项目可能只是一个小型 ML 分类模型,它是更大的数据工程或数据分析项目的子部分。MLOps 采用数据工程和分析方面的最佳实践。
图 2.4 – MLOps 作为 ML、数据工程和 DevOps 的交集
换句话说,如图 2.4所示,MLOps是ML、DevOps和专注于在生产中运行 ML 的数据工程学科的融合。它还涉及将 ML 项目封装在高度可扩展、可靠、可观察的基础架构中。最后,它还涉及为团队建立可重复的流程,以执行成功交付 ML 项目所需的任务,如图 2.4所示,同时支持彼此的协作。
有了对 MLOps 的基本了解,让我们深入挖掘一下 ML 项目的生命周期。我们开始通过定义 ML 项目的一般阶段是什么。
与DevOps,其中提供了一系列可以在 DevOps 周期中执行的活动,您可以在图 2.5中看到可用于将您的 ML 项目从开始到结束的一系列步骤。这些步骤或阶段将成为您的 ML 项目生命周期的一部分,并提供一种将您的 ML 项目投入生产的一致方式。您在本书中构建的 ML 平台是允许您实施此流程的生态系统。在本书后面的章节中,您将使用此流程作为平台的基础。ML 项目的各个阶段总结如下:
图 2.5 – 机器学习项目生命周期
这是上图中显示的项目生命周期的每个阶段的定义:
您刚刚了解了机器学习项目生命周期。虽然这些阶段可能看起来直截了当,在现实世界中,在某些情况下,您需要回到之前的阶段有几个很好的理由。
敏锐的观察者可能已经注意到,我们在第一章中介绍的敏捷和跨职能团队的一个关键属性在本章到目前为止介绍的阶段中不可用。现代 DevOps 都是关于在项目生命周期的早期进行快速反馈循环以纠正课程。同样的概念将为 ML 项目带来更多价值,因为 ML 项目比传统的软件应用程序更复杂。
让我们看看我们可以在哪些阶段评估和评估团队的进展情况。评估后,团队可以决定通过返回较早阶段或进入下一阶段来纠正路线。
下图显示了 ML 项目生命周期,其中包含来自各个阶段的反馈检查点,用绿色箭头表示:
图 2.6 – 带有反馈检查点的 ML 项目生命周期
让我们在这里更详细地看一下:
您已经了解了 ML 项目生命周期的各个阶段以及您做出决定的反馈检查点是继续下一个阶段还是回到前一个阶段。现在,让我们看看每个阶段所涉及的角色及其协作点。
我们定义了一个简化了构建模型的过程。让我们尝试定义一个具有不同角色和能力的团队将如何在此模型上进行协作。回想一下上一章,构建模型需要不同能力的不同团队的努力。需要注意的是,在较小的项目中,同一个人可能同时代表不同的角色。例如,在一个小型项目中,同一个人可以同时是数据科学家和数据工程师。
图 2.7 – 具有反馈检查点和团队角色的 ML 项目生命周期
您组织内的 ML 项目在第一阶段需要数据科学家和业务 SME 之间的协作。想象一下,团队想要根据一张图片来预测某种皮肤病的概率。
模型构建完成后,DevOps 团队专家可以将模型打包、版本化和部署到正确的环境。
现在您已经很好地理解了我们强调的挑战以及如何使用 ML 生命周期克服这些挑战,下一个阶段是拥有一个支持该生命周期的平台,同时为每个组件提供解决方案在全局中定义(参见第 1 章,机器学习中的挑战),具有自助服务和自动化功能。在与开源社区合作的同时,还有什么更好的方式来开始一段旅程?
现在你清楚地了解什么问题ML平台有望解决,让我们看看为什么开源是最好的起点。我们应该从一些定义开始设置基础,对吗?
免费 OSS 是用户可以自由运行、复制、分发、学习、更改和改进软件的地方。
我们
有关 OSS 的更多信息,请参见以下链接:
What is Free Software?- GNU Project - Free Software Foundation
OSS无处不在。Linux 是最常见的操作系统,在数据中心运行并为世界各地的云提供动力。Apache Spark 和相关的开源技术是一系列组织大数据革命的基础。打开TensorFlow 和 MLflow 等基于源的人工智能( AI ) 技术处于人工智能发展的前沿,并被数百家组织使用。开源容器编排平台 Kubernetes 已成为容器平台的事实标准。
计算领域的顶级参与者——例如亚马逊、苹果、Facebook、谷歌、微软和红帽等等——都为主要的开源项目做出了贡献并拥有了这些项目,并且不断有新的参与者加入。世界各地的企业和政府都依赖关于开源以支持关键任务和高度每天都有可扩展的系统。
云计算领域最成功的开源项目之一是Kubernetes。Kubernetes成立于 2014 年年中,随后在 2015 年年中发布了 1.0 版。从那时起,它已成为容器编排的事实标准。
此外,云原生计算基金会( CNCF ) 是由Linux 基金会创建的使云计算无处不在的使命。CNCF 通过汇集世界顶级工程师、开发人员、最终用户和供应商来做到这一点。他们还举办世界上最大的开源会议。该基金会是使用Kubernetes作为种子项目创建的。这就是 Kubernetes 设置云原生标准定义的方式。在撰写本文时,该基金会拥有 741 个成员组织和 130 个经过认证的 Kubernetes 发行版和平台,并且已经毕业了 16 个非常成功的开源项目。在这些项目中,当然有Kubernetes,还有Operator Framework,您将在下一章中了解更多信息。
在大数据和云计算爆发之前,ML 项目大多是学术性的。他们很少离开学院和大学的界限,但这并不意味着人工智能、机器学习和数据科学没有向前发展。学术界实际上已经创建了数百个用于数学、科学和统计计算的开源 Python 库。这些库已成为构建现代 ML 框架的基础。在撰写本文时,最流行的机器学习框架——TensorFlow、PyTorch、scikit-learn 和 Spark ML——都是开源的。当今最流行的数据科学和机器学习开发环境——Jupyter Notebook、JupyterLab、JupyterHub、Anaconda 等等——也都是开源的。
ML 是一个不断发展的领域,它需要超越任何单一组织的更大社区的愿景。以社区为基础的工作流程实现了 ML 项目所需的协作和创造力,而开源是 ML 以惊人速度发展的重要部分。
你现在有一个基本了解 OSS 在人工智能和机器学习空间。现在,让我们仔细看看为什么应该在 Kubernetes 上运行 ML 项目。
用于建筑可靠且可扩展的机器学习系统,你需要一个坚如磐石的基础。Kubernetes为构建可扩展且可靠的分布式系统以及我们平台所需的自助服务功能奠定了基础。Kubernetes 抽象硬件基础设施并将其作为一个单元使用的能力对我们的平台有很大的好处。
另一个关键组件是基于 Kubernetes 的软件能够在任何地方运行,从小型本地数据中心到大型超大规模(亚马逊网络服务(AWS)、谷歌云平台(GCP)、Azure)。这个功能将使您能够在任何您想要的地方运行您的 ML 平台。它为您的平台消费者带来的一致性非常出色,因为团队可以在云上试验极低的初始成本,然后为您企业中更广泛的受众定制平台。
选择 Kubernetes 的第三个也是最后一个原因是它能够运行不同类型的工作负载。您可能还记得在上一章中,一个成功的 ML 项目不仅需要 ML,还需要基础设施自动化、数据生命周期管理、有状态组件等等。Kubernetes 为运行不同类型的软件提供了一致的基础组件为业务用例创建端到端( E2E ) 解决方案。
以下屏幕截图显示了 ML 平台的各个层。Kubernetes 提供了构建 ML 平台的扩展和抽象层。Kubernetes 提供了抽象底层基础设施的自由。由于这种灵活性,我们可以在各种云提供商和本地解决方案上运行。您将在本书中构建的 ML 平台允许在 ML 项目的三个更广泛领域(FE、模型开发和 DevOps)中实现操作和自助服务:
图 2.8 – 基于 OSS 的机器学习平台
好了:您的机器学习平台将基于 OSS,并将使用 Kubernetes 作为主机根据。开源 Kubernetes 社区的力量将帮助您使用随着该领域不断成熟而发展的最佳技术。
在本章中,我们定义了术语MLOps,并提出了一个协作并提供早期反馈的 ML 项目生命周期。您已经了解到,通过这个项目生命周期,团队可以持续为业务创造价值。您还了解了基于 OSS 构建平台的一些原因以及社区驱动软件的好处。
这完成了本书关于设置上下文、了解为什么需要一个平台以及发现它期望解决什么样的问题的部分。在下一章中,我们将研究作为机器学习平台核心的 Kubernetes 系统的一些基本概念。
有关本章所涵盖主题的更多信息,请查看以下资源: