在当今竞争激烈的市场中,快速将新功能提供给最终用户是企业成功的关键。DevOps通过自动化的DevOps流水线帮助项目团队快速集成新功能。DevOps在其生命周期中使用两个关键组件:持续集成和持续交付。持续集成涉及将代码库合并到如git和bitbucket这样的中央代码仓库,使用Jenkins自动化软件系统构建过程,并运行自动化测试用例。一旦新功能开发、测试并集成到持续集成阶段,它们必须自动部署以使其可供最终用户使用。这种自动化构建和部署是在开发人员的持续交付阶段完成的。
当项目部署并开始被用户使用时,跟踪各种指标非常重要。在DevOps监控下,工程师需要负责诸如应用监控、使用监控、关键指标可视化等事项。与传统软件开发相比,机器学习系统测试与传统软件测试机制不同。测试机器学习应用不仅仅是单元测试,还必须考虑数据检查和数据漂移、模型漂移以及部署到生产的模型的性能评估。
根据论文《机器学习系统中隐藏的技术债务》,真正的ML系统只有一小部分由ML代码组成。除了ML代码,还需要考虑数据清洗、数据版本控制、模型版本控制以及在新数据集上持续训练模型。机器学习系统是高度实验性的。在没有先进行一些实验的情况下,不能保证算法会起作用。因此,有必要跟踪各种实验、特征工程步骤、模型参数、指标等,以了解未来实现最佳结果的实验算法。
机器学习模型的部署取决于它们试图解决的问题。机器学习过程的大部分涉及与数据相关的事项。因此,机器学习流水线包括数据处理、特征工程、模型训练、模型注册和模型部署等多个步骤。模型输出应该随时间保持一致。因此,需要跟踪一段时间内的数据分布和其他与数据相关的统计测量。实时数据应该与用于训练模型的数据相似。
开发机器学习模型的人员通常不专注于软件实践,因为他们往往没有软件背景。MLOps或ML Ops是一套旨在可靠且高效地部署和维护生产中的机器学习模型的做法。这个词是“机器学习”和软件DevOps持续开发的混合词。MLOps是DevOps、机器学习和数据工程的结合。在现有DevOps方法的基础上,开发MLOps解决方案以增加可重用性、促进自动化、数据转移管理、模型版本控制、实验跟踪、持续训练,并在机器学习项目中获得更丰富、更一致的洞察力。
Andrew Ng最近谈到了机器学习社区如何使用MLOps构建高质量数据集和AI系统,这些系统是可重复和系统的。他呼吁从以模型为中心的机器学习转向以数据为中心的开发。Andrew还表示,展望未来,MLOps可以在确保所有项目阶段的高质量和一致性数据流方面发挥重要作用。
这种MLOps设置包括以下组件:源代码控制、测试和构建服务、部署服务、注册模型、存储特征、ML元数据仓库、ML流水线编排器。下面提供了一个更详细的架构,包括持续训练的自动化流水线。
使用MLOps的关键优势包括:持续训练、实验跟踪、数据漂移、模型注册和可视化。这些优势有助于确保模型输出随时间保持一致,记录配置实验,监控数据漂移,并确保所有关键值(包括数据、配置、环境变量、模型代码、版本和文档)都在一个所有人都可以访问的地方,以帮助模型版本控制和快速部署。
MLOps和DevOps的相似之处在于,DevOps的两个主要组件——持续集成和持续交付——在MLOps中也是必需的。ML代码测试与DevOps相同,因为它将是Python代码,可以应用DevOps测试方法。[还有模型测试和数据验证测试是MLOps中的新内容]。