部署机器学习模型到生产环境
处理数据是一回事,但是将机器学习模型部署到生产环境则是另一回事。
数据工程师一直在寻找新的方式来部署他们的机器学习模型到生产环境中。他们想要最佳性能,同时也关心成本。
现在,你可以同时兼得!
让我们来看看部署过程,并了解如何成功地进行部署!
如何在生产环境中部署机器学习模型?
大多数数据科学项目将机器学习模型部署为“按需预测服务”或“批量预测”模式。一些现代应用程序将“嵌入式模型”部署在边缘和移动设备上。
每个模型都有其优点。例如,在批量场景中,优化是为了“最小化模型计算成本”。对外部数据源和云服务的“依赖性较少”。当处理算法复杂的模型时,本地处理能力有时足以进行计算。
当发生故障或调整超参数时,离线模型也很容易进行调试,因为它们在强大的服务器上运行。
另一方面,Web 服务可以提供“更便宜”和“几乎实时的预测”。如果模型在集群或云服务上运行,则 CPU 功率的可用性不是问题。该模型可以通过 API 调用轻松地“提供给其他应用程序”。
嵌入式机器学习的主要优点之一是,我们可以将其定制到“特定设备的要求”上。
我们可以轻松地将模型部署到设备上,并且其运行时环境不能被外部方干扰。一个明显的缺点是设备需要具有足够的计算能力和存储空间。
将机器学习模型部署为 Web 服务。
部署机器学习模型的最简单方法是为预测创建 Web 服务。在这个例子中,我们使用Flask Web 框架来包装使用 Scikit-learn 构建的简单随机森林分类器。
要创建机器学习 Web 服务,你至少需要三个步骤。
第一步是创建机器学习模型,对其进行训练并验证其性能。以下脚本将训练一个随机森林分类器。为了保持简单,这里不包括模型测试和验证。但是请记住,它们是任何机器学习项目的重要组成部分。
为部署构建一个简单的机器学习模型。
在下一步中,我们需要持久化模型。部署应用程序的环境通常与训练它们的环境不同。培训通常需要不同的资源集。因此,此分离有助于组织优化其预算和努力。
Scikit-learn 提供了特定于 Python 的序列化,使模型持久化和恢复变得轻松。以下是一个示例,说明如何将训练好的模型存储在 pickle 文件中。
使用 Scikit-learn 的 joblib 工具将机器学习模型持久化为 pickle 文件。
最后,我们可以使用 Web 框架提供持久化的模型。以下代码使用 Flask 创建了一个 REST API。此文件托管在不同的环境中,通常在云服务器中。
使用 Flask Python Web 框架部署机器学习模型进行在线预测(预测服务)。
上面的代码通过 POST 请求在 <a class="af ob" href="https://localhost:8080/predict" rel="noopener ugc nofollow" target="_blank">https://localhost:8080/predict</a>
中接收输入,并在 JSON 响应中返回预测结果。
为批量预测部署机器学习模型。
虽然在线模型可以提供预测,但有时需要按需批量预测。
离线模型可以优化以处理大量作业实例并运行更复杂的模型。在批处理模式下,你无需担心扩展或管理服务器。
批量预测可以像使用一组输入变量的数据集调用 predict 函数一样简单。以下命令可以执行此操作。
prediction = classifier.predict(UNSEEN_DATASET)
有时,你需要在批处理方法中安排训练或预测。有多种方法可以实现这一点。我最喜欢使用 Airflow 或 Prefect 自动化任务。
使用 Prefect 安排机器学习模型进行批量预测。
上面的脚本从脚本执行5秒后开始,每周定期安排预测。如果任务失败,Prefect 将重试3次。
然而,在批处理框架中,构建模型可能需要多个阶段。你需要决定每个阶段需要哪些特征以及如何构建模型。
使用适当的批处理框架在高性能计算系统上训练模型。
通常,你将训练数据分成按顺序处理的多个段。你可以使用采样方案(例如,平衡采样、分层采样)或通过一些在线算法(例如,Map-Reduce)来完成此操作。
分区可以分配给多个机器,但它们必须加载相同的功能集。建议使用特征缩放。如果使用了无监督预训练(例如,自动编码器)进行迁移学习,则必须撤消每个分区。在执行完所有阶段后,你可以通过顺序迭代分区,使用生成的模型来预测未见数据。
在移动和物联网等边缘设备上进行计算已经在最近几年变得非常流行。将机器学习模型部署在边缘设备上的好处包括但不限于:
- 减少延迟,因为设备与用户的距离可能比远在远处的服务器更近。
- 减少数据带宽消耗,因为我们将处理后的结果发送回云端,而不是需要大量空间和带宽的原始数据。
由于其硬件的特性,移动设备和物联网设备具有有限的计算能力和存储容量。我们不能直接将机器学习模型部署到这些设备上,特别是如果我们的模型很大或需要进行广泛的计算才能在它们上运行推理。
相反,我们应该使用量化和聚合等技术简化模型,同时保持准确性。这些简化模型可以有效地部署在计算、内存和存储有限的边缘设备上。
我们可以在 Android 上使用 TensorFlow Lite 库简化我们的 TensorFlow 模型。TensorFlow Lite 是一个针对移动和嵌入式设备的开源软件库,试图做到其名称所说的:在移动和嵌入式平台上运行 TensorFlow 模型。
以下示例将一个 Keras TensorFlow 模型转换为 TensorFlow Lite 模型。
将 Keras 深度学习模型转换为 TensorFlow Lite 模型,以便在边缘 IoT 和移动设备上部署。
你可以在任何你选择的平台上读取新创建的 .tflite
文件。Tensorflow lite 支持 Android、iOS 和 Linux(包括 Raspberry Pi)。
有关在不同平台上部署的示例和教程,请查看TensorFlow Lite 文档。
总结
训练机器学习模型只是数据科学项目的一个方面。数据科学家们花费了很多心血来将它们部署到生产环境中。
我们已经讨论了三种不同的部署机器学习模型的方法及其优点。根据你的应用程序,你可能需要选择其中一种可用的选项。
当然,这篇文章只是冰山一角。但我相信它会给你探索更多的起点。
在生产中的 ML 模型还有许多其他的后续工作,如定期模型评估。但这些是另一篇文章的内容。
译自:https://towardsdatascience.com/3-ways-to-deploy-machine-learning-models-in-production-cdba15b00e
评论(0)