生产机器学习系统:部署测试

您现在可以部署用于预测独角兽外观的独角兽模型了! 部署时,您的机器学习 (ML) 流水线应该运行、更新和 不会出现问题如果只是部署模型 一个较大的部署按钮。遗憾的是,一个完整的机器学习系统 需要进行以下测试:

  • 验证输入数据。
  • 验证特征工程。
  • 验证新模型版本的质量。
  • 验证服务基础架构。
  • 测试流水线组件之间的集成。

许多软件工程师青睐测试驱动型开发 (TDD)。在 TDD 中,软件 工程师应该先编写测试,然后再编写“实际”代码源代码。 不过,TDD 在机器学习中可能比较棘手。 例如,在训练模型之前,您不能编写测试来验证 损失。相反,您必须先在模型学习过程中发现可实现的损失, 然后针对可实现的损失测试新的模型版本。

关于独角兽模型

本部分引用了 unicorn 模型。以下是您需要知晓的相关信息:

您正在使用机器学习构建一个分类模型, 独角兽的外表。您的数据集详细列出了 10000 次独角兽出现的情况和 10,000 只独角兽未出现。数据集包含 时段、海拔、温度、湿度、树木覆盖率、是否有 彩虹和一些其他功能

通过可重现的训练测试模型更新

也许您想继续改进您的独角兽模型。例如,假设 对特定特征进行一些额外的特征工程,然后 重新训练模型,希望获得更好的(或至少获得相同)结果。 遗憾的是,重现模型训练有时很困难。 为了提高可重现性,请遵循以下建议:

  • 确定性地植入随机数生成器。 有关详情,请参阅数据随机化 第几代

  • 按固定顺序初始化模型组件,以确保组件获得 获取相同的随机数。 机器学习库通常会自动处理此要求。

  • 计算多次运行模型的平均值。

  • 即使是初步迭代,也使用版本控制,这样您可以 在调查模型或流水线时精确定位代码和参数。

即使遵循了这些准则,其他来源不确定性也可能 仍然存在。

测试对机器学习 API 的调用

如何测试 API 调用的更新?你可以重新训练模型, 这非常耗时请改为编写单元测试来生成随机输入数据 并运行一步梯度下降法。如果此步骤在没有 则表示对 API 的任何更新很可能都未破坏您的模型。

为流水线组件编写集成测试

在机器学习流水线中,更改一个组件可能会导致其他组件出错 组件。通过编写 集成测试,用于端到端运行整个流水线。

除了持续运行集成测试之外,您还应运行集成测试 。在容器运行 整个流水线加大了持续集成测试的难度。运行集成 可以加快测试速度,也可以使用一部分数据进行训练,或者使用更简单的模型进行训练。详细信息 取决于您的模型和数据。要获得持续覆盖率,您需要 加快测试速度,以便在每个新版本的模型或软件上运行。 同时,您的慢速测试会在后台持续运行。

在应用之前验证模型质量

在将新的模型版本推送到生产环境之前, 以下两类质量下降:

  • 突然降级。新版本中的错误可能会导致 画质降低。通过检查质量来验证新版本 与前一版本相比。

  • 降级速度缓慢。针对突然降级的测试可能无法检测到缓慢的 多个版本的模型质量下降。相反,请确保您的 模型在验证数据集上的预测达到固定阈值。如果您的 验证数据集偏离实时数据,请更新您的验证 数据集,并确保模型仍满足相同的质量阈值。

在应用之前验证模型基础架构的兼容性

如果模型的更新速度比服务器快, 来自服务器的不同软件依赖项 不兼容。确保模型使用的操作存在于 以沙盒化版本的服务器中预演模型,从而对服务器进行微调。