您现在可以部署用于预测独角兽外观的独角兽模型了! 在部署时,机器学习 (ML) 流水线应能够顺利运行、更新和提供服务。如果部署模型只需按一个大大的部署按钮就行了,那就太好了。很遗憾,完整的机器学习系统需要针对以下方面进行测试:
- 验证输入数据。
- 验证特征工程。
- 验证新模型版本的质量。
- 验证服务基础架构。
- 测试流水线组件之间的集成。
许多软件工程师都偏爱测试驱动型开发 (TDD)。在 TDD 中,软件工程师会先编写测试,然后再编写“真实”源代码。不过,在机器学习中,TDD 可能很棘手。例如,在训练模型之前,您无法编写测试来验证损失。而是必须先在模型开发过程中发现可实现的损失,然后根据可实现的损失测试新的模型版本。
独角兽模型简介
本部分将提及独角兽模型。以下是您需要知晓的相关信息:
您将使用机器学习构建一个分类模型,用于预测独角兽的出现情况。您的数据集详细说明了 1 万次独角兽出现情况和 1 万次独角兽未出现情况。该数据集包含地理位置、时间、海拔、温度、湿度、树冠覆盖率、彩虹是否存在以及其他一些特征。
使用可重现的训练测试模型更新
也许您想继续改进独角兽模型。例如,假设您对某个特征进行了一些额外的特征工程,然后重新训练了模型,希望获得更好(或至少相同)的结果。很遗憾,有时很难重现模型训练。为了提高重现性,请遵循以下建议:
确定性地为随机数生成器设置种子。 如需了解详情,请参阅数据生成中的随机化
按固定顺序初始化模型组件,以确保组件在每次运行时从随机数生成器获取相同的随机数。ML 库通常会自动处理此要求。
取多次运行模型的平均值。
使用版本控制功能(即使是进行初步迭代),以便在研究模型或流水线时查明代码和参数。
即使遵循这些准则,也可能仍存在其他非确定性来源。
测试对机器学习 API 的调用
如何测试 API 调用的更新?您可以重新训练模型,但这需要花费大量时间。而是编写单元测试来生成随机输入数据,并运行单个梯度下降步骤。如果此步骤在没有错误的情况下完成,则 API 的任何更新都可能不会破坏您的模型。
为流水线组件编写集成测试
在机器学习流水线中,一个组件中的更改可能会导致其他组件出错。编写一项可端到端运行整个流水线的集成测试,以检查各个组件能否协同工作。
除了持续运行集成测试之外,您还应在推送新模型和新软件版本时运行集成测试。运行整个流水线的速度缓慢,这会使持续集成测试变得更加困难。如需更快地运行集成测试,请使用数据子集或更简单的模型进行训练。具体取决于您的模型和数据。为了实现持续覆盖,您需要调整更快的测试,使其能够在每次有新版本的模型或软件时运行。与此同时,运行缓慢的测试会在后台持续运行。
在提供服务之前验证模型质量
在将新模型版本推送到生产环境之前,请测试是否存在以下两种质量下降情况:
突然出现的画质下降。新版本中的 bug 可能会导致画质大幅下降。通过与上一个版本对比新版本的质量来验证新版本。
性能缓慢下降。用于检测突然降级的测试可能无法检测到模型质量在多个版本中缓慢下降的情况。而是确保模型对验证数据集的预测结果达到固定阈值。如果验证数据集与实时数据存在偏差,请更新验证数据集,并确保模型仍能达到相同的质量阈值。
在提供服务之前验证模型与基础架构的兼容性
如果模型的更新速度比服务器更快,则模型的软件依赖项可能会与服务器不同,这可能会导致不兼容。通过将模型暂存到服务器的沙盒版本中,确保模型使用的运算存在于服务器中。