本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
5. 持续集成
机器学习系统运行测试以验证系统是否从头到尾运行,检查可能的故障点。提交时会自动运行测试,较长的测试按固定计划运行。测试检查传统的软件工程领域,例如单元和系统级别。此外,测试还通过检查数据、特征和模型来捕获机器学习的细节。
5.1 本地代码检查 |
在将代码提交到集中式代码存储库之前,开发者需要在本地运行诸如基本单元测试和静态分析之类的检查。在提交之前运行这些检查可提高整体代码质量,并在问题进入版本控制之前发现问题。 |
5.2 静态代码分析 |
中央代码存储库具有静态代码分析工具,可在提交时快速运行。此工具应该改进代码样式和格式。它还应检查源代码和基础设施代码内的常见安全漏洞、常见错误以及代码中的其他弱点。 |
5.3 数据质量测试 |
数据质量测试应至少检查数据是否未违反固定架构。一种更全面的方法是在摄取时计算数据统计信息,对数据设置约束,然后对这些数据进行测试。 可以独立设置数据质量测试,也可以将其作为管线的一部分进行设置。统计数据和约束条件可重复用于监控。 |
5.4 特征测试 |
作为完整管线的一部分,将生成特征重要性。特征测试断言,特征的重要性或模型对特征值的归因方式不会改变。特征测试可以纳入监控,因为它们可以提醒和跟踪模型输入中的违规行为。 |
5.5 单元测试 |
所有代码(模型、应用程序和基础设施)的单元测试在提交之前和提交时运行。每个单元测试都会对重要代码片段进行检查,以确认其功能是否符合预期。对于机器学习代码,可以运行测试以确定算法的正确性。 |
5.6 集成测试 |
集成测试可验证管线是否成功端对端运行,包括为管线建立关联的基础设施。此测试验证系统是否按预期运行并记录日志。如果部署是分开的,则还应该对此进行 end-to-end测试,以确保部署可以正常运行。 |
5.7 烟雾测试 |
该系统具有烟雾测试功能,可对每个功能进行小型快速回归测试。烟雾测试是持续集成的一部分,可以在容器化环境中运行以模仿云功能。 |
5.8 负载测试 |
按需负载测试已经到位。除了捕获机器学习系统在高负载和低负载下的行为外,负载测试还提供有关系统范围的吞吐量或延迟的统计数据。通过负载测试收集的数据提供了有关资源大小和扩展策略的信息。 |
5.9 模型功能测试 |
模型输出和输入通过自动功能测试运行。为了检查功能内的行为,需要使用基本示例在真实或虚假数据上测试模型的输出和输入。 |
5.10 极端情况下的模型推理测试 |
作为最低功能测试的一部分,模型测试应在模型提升之前检查给定某些输入的极端行为。这为防止意外行为提供了额外的护栏。 |