MLOps权威指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 DevOps和MLOps

DevOps是一套技术和管理实践,旨在提高组织发布高质量软件的速度。DevOps的一些优点包括快速性、可靠性、可扩展性和安全性。这些好处是通过坚持和遵循以下最佳实践产生的:

持续集成(CI)

CI是持续测试软件项目并根据测试结果改善项目质量的过程。它是自动化测试过程,并使用开源和SaaS构建的服务器,例如,GitHub Actions、Jenkins、Gitlab、CircleCI或云原生构建像AWS CodeBuild这样的系统。

持续交付(CD)

在无须人工干预的情况下将代码交付到新环境。CD是自动部署代码的过程,通常通过使用IaC实现。

微服务

微服务是一种具有独特功能的软件服务,几乎没有对外依赖。最受欢迎的基于Python的微服务框架之一是Flask。例如,机器学习预测端点就非常适合作为微服务。这种微服务可以使用多种技术,包括FaaS(函数即服务)。云函数的一个完美例子是AWS Lambda。微服务是容器就绪的,并使用CaaS(容器即服务)通过Dockerfile将Flask应用程序部署为一个服务,如AWS Fargate、Google Cloud Run或Azure App Services。

基础设施即代码(IaC)

基础设施即代码(IaC)是将基础设施检查为源代码仓库并部署它,同时可以将更改推送到该仓库的过程。IaC允许幂等行为并确保基础设施不需要人工来创建它。纯粹用代码定义,并且被检查进入源代码控制仓库的云环境是一个很好的示例。流行技术包括特定云的IaC,如AWS Cloud Formation或AWS SAM(无服务器应用模型)(https://oreil.ly/4Q3XE)。多云选项包括Pulumi(https://pulumi.com)和Terraform(https://terraform.io)。

监控和仪表

监控和仪表是一个组织对软件系统性能和可靠性做出决策的流程和技术。通过日志系统和诸如New Relic、Data Dog或Stackdriver这类的应用程序性能监控工具,监控和仪表可以收集生产环境中应用程序或数据科学软件系统中的行为数据。这个过程就是Kaizen发挥作用的地方,数据驱动的组织会每日或每周采用这些仪表让事情变得更好。

有效的技术交流

此技能涉及创建有效的、可重复的和高效的沟通方法。有效的技术交流的绝佳范例就是采用AutoML进行系统的初始原型设计。当然,最终,AutoML模型可能会被保留或丢弃。尽管如此,自动化仍是一种防止解决棘手问题的信息工具。

有效的技术项目管理

这个过程可以高效地使用人力和技术解决方案来管理项目,比如票务系统和电子表格。合适的技术项目管理需要将问题分解成小的、模块化的工作,所以才会有增量的进步。机器学习的一个反模式通常是一个团队在一个生产机器模型上“完美地”解决了一个问题。相反,每天或每周交付较小的成果是更具可扩展性和谨慎的模型构建方法。

持续集成和持续交付是DevOps最重要的两个支柱。持续集成涉及将代码合并到源代码控制仓库中,这个过程通过测试自动检查代码质量。持续交付是当代码发生更改时,自动测试和部署到临时环境或生产环境。这些技术是Kaizen精神或持续改进的自动化形式。

一个很好的问题是团队中谁应该实施CI/CD?答案是所有MLOps团队成员都应帮助开发和维护CI/CD系统。维护良好的CI/CD系统对团队和公司来说是面向未来的投资。

ML系统也是一个软件系统,但它包含一个独特的组件:机器学习模型。DevOps的相同优势可以应用于ML系统。拥抱自动化是诸如数据版本控制和AutoML之类新方法在借鉴DevOps理念方面有许多前景的原因。