测试部署机器学习模型

您已准备就绪,可以部署了!如果仅部署模型就像按大型红色按钮一样简单。部署时,您希望流水线顺畅运行、更新和提供服务。这些需求有助于实现本文中讨论的要求和解决方案。

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

毫无疑问,您要继续改进独角兽的外观预测器。假设您重构了“时段”功能的特征工程代码。如何测试代码是否正确?您决定再次训练模型,看看能否获得相同的结果。糟糕,您发现模型训练无法重现。确定继续预测独角兽的外貌后,您应进行进一步调查。您发现可以按照以下步骤实现可再现性:

  • 确定性地生成随机数生成器 (RNG)。如需了解详情,请参阅机器学习数据准备和特征工程课程中的随机生成数据

  • 按固定顺序初始化模型组件,以确保这些组件在每次运行时从 RNG 获得相同的随机数字。机器学习库通常会自动处理此要求。

  • 模型的平均运行次数。

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

即使完成了这些步骤,您也可能会有其他的不确定性来源。

测试对规范和 API 调用的模型更新

将模型更新到 Unicorn Predictor 2.0 后,您需要测试新模型的算法正确性以及 API 调用的任何更改。我们来讨论一下具体方法。

测试 API 调用

如何测试 API 调用的更新?当然,您可以重新训练模型,但这需要耗费大量时间。而是改为编写单元测试来生成随机输入数据并运行单步梯度下降法。您希望步骤完成时没有运行时错误。

测试算法正确性

模型不仅要正确预测,还要正确,因为它在算法上是正确的,而不是幸运的。例如,如果 99% 的电子邮件不是垃圾邮件,则将所有电子邮件归为非垃圾邮件的概率为 99%。因此,您需要检查模型是否具有算法正确性。请按以下步骤操作:

  • 训练模型几次,然后验证损失是否减少。
  • 无需正则化即可训练您的算法。如果您的模型足够复杂,它将记住训练数据,而训练损失将接近 0。
  • 测试算法的特定子计算。例如,您可以测试 RNN 的一部分是否对每个输入数据元素运行一次。

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

在机器学习流水线中,一个组件的更改可能会导致其他组件出错。通过编写端到端运行整个流水线的测试来检查各个组件能否协同工作。此类测试称为“集成测试”。

除了持续运行集成测试之外,您还应在推送新模型和新软件版本时运行集成测试。运行整个流水线的速度缓慢会导致持续集成测试更加困难。如需更快地运行集成测试,请基于部分数据或使用更简单的模型进行训练。详细信息取决于您的模型和数据。为了获得持续覆盖率,您需要调整较快的测试,使其在每个新版本或软件版本中运行。同时,您的慢速测试会在后台持续运行。

应用前验证模型质量

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

  • 突降:新的 bug 可能会导致质量明显降低。通过检查新版本的质量与旧版本进行验证。

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

在服务前验证模型基础架构兼容性

如果模型的更新速度比服务器快,则模型与服务器具有不同的软件依赖项,这可能会导致不兼容。通过将模型暂存在服务器的沙盒版本中,确保模型中使用的操作存在于服务器中。