根据deeplearning.ai的研究,只有2%使用机器学习和深度学习的企业成功地将模型部署到生产中。剩下的98%的企业要么放弃了在公司内部实施ML,要么依赖其他公司进行生产。将ML模型部署到生产中与传统软件应用的部署不同,它需要一个特定的生命周期,这个周期被称为MLOps。一个通用的MLOps工作流程可以遵循构建、部署、监控ML应用。
软件开发生命周期是软件行业用来规划、设计、开发和测试高质量软件的技术。这个生命周期的主要动机是软件应该满足客户的期望,并且应该在时间和预算内完成。
传统软件开发生命周期从瀑布模型开始,经过多年演变成敏捷模型和DevOps。为了理解MLOps,必须清楚其他非ML软件开发生命周期。以下是其中的一些。
这是最古老的模型。它是一种非迭代方法。模型的每个阶段都是预先组织的,并一个接一个地执行。它从需求收集开始,然后是设计、开发和测试。不能在完成当前阶段之前进入另一个阶段。它高度适用于需求明确定义的小项目。它不适合需求随时间变化的动态和大型项目,因为用户需求会发生变化。因此转向敏捷方法论。
这种方法在IT行业取得了突破。大多数组织都遵循这种方法。它是一种迭代和程序化的开发方式。问题的解决方案可以被分割成不同的模块,并定期交付。在每次迭代中,都会制作出一个工作产品,并在随后的迭代中向其添加进一步的更改。这个模型还涉及在开发和测试过程中与客户的互动,以测试和反馈产品。可以直接从客户那里获得一些建议,并在整个项目开发过程中进行改进。这种敏捷方法可以用于需求不断变化的项目。
DevOps方法扩展了敏捷开发实践。它是一种执行软件应用的方法,由持续集成、持续部署和持续交付驱动。它涉及软件开发人员和IT运营商之间的协作、集成和自动化,以提高效率、速度和质量。借助DevOps,将软件运送到生产并保持其可靠运行变得容易。
主要原因是ML开发与传统软件开发之间存在根本区别。机器学习不仅仅是代码。它是代码加数据。在传统开发中,源代码的版本产生软件的版本。在机器学习中,源代码的版本和数据的版本产生ML模型的版本。代码是在开发环境中精心制作的。数据来自多个训练和测试源。数据可能会随着时间在体积、速度、真实性和多样性方面发生变化。因此数据和代码随着时间的推移,最终会朝着一个目标发展:构建和维护一个可扩展的ML系统。
为了克服这些挑战,MLOps方法将数据和代码结合在一起,随着时间的推移。MLOps是将ML与软件开发融合的方法,通过整合多个领域ML、DevOps和数据工程,旨在可靠和高效地构建、部署和维护生产中的ML系统。它以流线化的方式汇集了数据工程、ML、DevOps。
随着IT行业和互联网的广泛发展,每天生成的数据量不断增加。为了解决数据生成和存储的问题,公司和科技巨头开始使用大数据。数据被存储在世界各地的数据库、数据仓库、数据湖等中。从这些大型数据源中提取和检索数据并不是一项简单的工作。
对于构建机器学习模型,主要需要数据。从这些大型数据源中提取特定数据不能通过单行代码完成。因此,需要数据工程,它涉及在大规模上提取、转换、加载(ETL)和分析数据。因此,在MLOps中,自动化数据输入管道以训练数据是首要步骤。
// 示例代码,具体实现根据实际使用的云服务提供商的API进行编写
const mlOpsService = require('ml-ops-service');
mlOpsService.buildModel().then(model => {
// 构建模型
}).catch(error => {
// 处理错误
});