5. 持续集成 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

5. 持续集成

机器学习系统运行测试以验证系统是否从头到尾运行,检查可能的故障点。提交时会自动运行测试,较长的测试按固定的时间表运行。测试检查传统的软件工程领域,例如单元和系统级别。此外,测试还通过检查数据、特征和模型来捕获机器学习的细节。

5.1 本地代码检查

在将代码提交到集中式代码存储库之前,开发人员需要在本地运行检查,例如基本单元测试和静态分析。在提交之前运行这些检查可以提高整体代码质量,并在问题进入版本控制之前发现问题。

5.2 静态代码分析

中央代码存储库具有静态代码分析工具,可在提交时快速运行。该工具应该改进代码样式和格式。它还应检查源代码和基础设施代码中的常见安全漏洞、常见错误以及代码中的其他弱点。

5.3 数据质量测试

数据质量测试应至少检查数据是否未违反固定架构。一种更全面的方法是在采集时计算数据统计信息,对数据设置约束,然后对这些数据进行测试。

可以独立设置数据质量测试,也可以将其作为管道的一部分进行设置。统计数据和约束条件可重复用于监控。

5.4 功能测试

作为完整管道的一部分,将生成功能重要性。特征测试断言,特征的重要性或模型对特征值的归因方式不会改变。功能测试可以纳入监控,因为它们可以提醒和跟踪模型输入中的违规行为。

5.5 单元测试

所有代码(模型、应用程序和基础架构)的单元测试在提交之前和提交时运行。每个单元测试都会检查一段重要的代码,以确认它是否按预期运行。对于机器学习代码,可以运行测试以确定算法的正确性。

5.6 集成测试

集成测试可验证管道是否成功端对端运行,包括为管道建立相关的基础架构。此测试验证系统是否按预期运行并记录日志。如果部署是分开的,则还应该对此进行 end-to-end测试,以确保部署有效。

5.7 烟雾测试

该系统具有烟雾测试,可以微型运行,并且可以对每个功能进行快速回归。烟雾测试是持续集成的一部分,可以在容器化环境中运行以模仿云功能。

5.8 负载测试

按需负载测试已经到位。除了捕获机器学习系统在高负载和低负载下的行为外,负载测试还提供有关系统吞吐量或延迟的统计数据。通过负载测试收集的数据提供了有关资源大小和扩展策略的信息。

5.9 模型功能测试

模型输出和输入通过自动功能测试运行。为了检查能力内的行为,模型的输出和输入都要通过基本示例在真实或虚假的数据上进行测试。

5.10 极端情况下的模型推理测试

作为最低功能测试的一部分,模型测试应在模型升级之前检查给定某些输入的极端行为。这为防止意外行为提供了额外的护栏。