持续集成(CI)是指所有软件开发人员在一天中多次在中央存储库中合并他们的代码变化的过程。一个完全自动化的软件发布过程被称为持续交付,缩写为CD。虽然这两个术语不能互换,但CI/CD是一种DevOps方法,符合这个类别。持续集成/持续交付(CI/CD)管道是一个能使软件交付过程自动化的系统。CI/CD管道生成代码,运行测试,并在软件被改变时交付新的产品版本。测试发生在CI/CD工作流程的CI阶段。然后,通过自动化方法对代码改进进行整合和测试。部署是管道的CD要素,因为它不断地大规模分发或提供软件。本文探讨了机器学习在生产中使用CI/CD的5种方式。
使用Azure DevOps的CI/CD
一个企业使用Azure DevOps管道来设置构建和发布活动,以实现开发到生产周期的自动化。在模型序列化之后,构建管道从候选源代码(主要是ONNX)生成模型工件。接下来,发布管道被用来将人工制品部署到基础设施目标。最后,在人工制品在开发环境中经过测试后,发布管道将其转移到质量保证(或QA)步骤。
模型测试发生在QA阶段,当团队对模型服务进行A/B测试和压力测试,以确保它准备好部署到生产环境。
人工验证者,一般是产品所有者,在批准之前验证模型是否通过了测试,并对其进行验证。
使用GitHub Action的CI/CD
GitHub Actions是一个可用于 GitHub 仓库的工作流管理解决方案。在GitHub中实现流程自动化为用户提供了一种综合的方式来优化他们的开发效率。工作流程是通过项目基础的.github/workflows文件夹中的YAML文件创建的。通过行动,其GitHub repo中的事件,如推送、拉取和发布,被用作触发器来启动工作流程,可以协调各种任务。例如,GitHub行动会在项目的每次新提交中运行他们的测试套件,使他们能够保持对其模型能力的信心。
使用Gitops的CI/CD
为了实现CI/CD,该企业使用GitOps和Jenkins,在测试环境中使用类似生产的运行方式来执行代码质量检查和烟雾测试。模型代码的每个拉动请求都要经过代码审查,并在团队的单一管道中进行自动单元测试。拉动请求也要经过自动化的烟雾测试,其中包括训练模型,进行预测并在一小部分真实数据样本上执行完整的端到端管道,以检查一切是否按计划进行。对于模型的持续交付,在每个模型被训练并由领域专家手动检查后,会生成一份模型质量报告,然后由领域专家验证后手动部署。
使用AWS的CI/CD
AWS云提供管理的CI/CD工作流程解决方案,如AWS CodePipeline和AWS Step Functions,帮助机器学习开发人员进行持续集成和交付。对于持续集成,企业利用git向AWS CodeCommit提交,然后触发CodePipeline中的构建步骤(通过AWS CodeBuild作业),由AWS Step Functions为每个CodePipeline活动协调工作流程。由于AWS Step Functions的工作流协调方法,企业可以用CodePipeline管理运行众多模型和管道的复杂情况。由于CodePipeline中的每个管道工作都集中在一个流程上,该团队的多模型部署更容易管理和更新。构建也更容易交付和排除故障。
使用Vertex AI的CI/CD
企业可以使用管理的Vertex AI管道产品和TensorFlow Extended,两者都在谷歌云基础设施上运行,以协调和管理其机器学习管道的持续集成、交付和部署。使用ML原生管道工具而不是传统的CI/CD技术,可以让企业保证模型质量的一致性,并确保模型在一个统一的管道中经历特征工程、模型评分、模型分析、模型验证和模型监控等正常过程。