内容已经转出,请移步以下网址:

https://viadean.notion.site

使用 Docker 容器和 REST API 的 Flask 实时推理预测

 二维码 14
文章附图

用于执行在线推理的 Docker 容器和 REST API 的快速示例。


本文的想法是快速轻松地构建一个 Docker 容器,以使用 Flask 和 Python API 通过训练有素的机器学习模型执行在线推理。


当您有时间计算预测时,批量推理非常有用。 假设您需要实时预测。 在这种情况下,批量推理就不太合适了,我们需要在线推理。 如果没有在线预测,许多应用程序将无法工作或不会非常有用,例如自动驾驶汽车、欺诈检测、高频交易、基于定位数据的应用程序、对象识别和跟踪或脑机接口。 有时,需要以毫秒为单位提供预测。


为了学习这个概念,我们将使用 Docker 和 Flask-RESTful 实现在线推理(线性判别分析和多层感知器神经网络模型)。


首先,让我们考虑以下文件:Dockerfile、train.pyapi.py、requirements.txt、train.csv、test.json。

train.py 是一个 Python 脚本,用于摄取和规范化 EEG 数据并训练两个模型来对数据进行分类。 Dockerfile 将用于构建我们的 Docker 映像,requirements.txt(flask、flask-restful、joblib)用于 Python 依赖项,而 api.py 是将被调用以使用 REST API 执行在线推理的脚本。 train.csv 是用于训练我们的模型的数据,test.json 是一个包含将用于我们的推理模型的新 EEG 数据的文件。

RESTful API

构建 API 的第一步是考虑我们想要处理的数据、我们想要如何处理它以及我们想要我们的 API 输出什么。 在我们的示例中,我们将使用 test.json 文件,其中有 1300 行 EEG 数据,每行有 160 个特征(列)。 我们希望我们的 API 如下:

api.py

机器学习模型

train.py 是一个 Python 脚本,它在 csv 文件 (train.csv) 中摄取和规范化 EEG 数据,并训练两个模型来对数据进行分类(使用 scikit-learn)。 该脚本保存了两个模型:线性判别分析(clf_lda)和神经网络多层感知器(clf_NN):

train.py

在线推理的 Docker 镜像

我们必须构建我们的 Docker 镜像。 首先,我们需要使用 jupyter/scipy-notebook 镜像作为基础镜像的 Dockerfile。 我们还需要设置我们的环境变量并安装 joblib 以允许我们训练的模型和烧瓶(requirements.txt)的序列化和反序列化。 我们将 train.csv、test.json、train.pyapi.py 文件复制到图像中。 然后,我们运行 train.py,它将拟合并序列化机器学习模型,作为我们图像构建过程的一部分。

运行 Docker 在线推理

现在的目标是运行我们的在线推理,这意味着每次客户端向 /line/<Line>、/prediction/<Line>、/score 端点发出 POST 请求时,我们将显示请求的数据(行),预测 我们使用预训练模型注入的数据类别,以及使用所有可用数据的预训练模型的得分。 要启动 Web 服务器,我们将运行 Docker 容器并运行 api.py 脚本:

源代码

类似视频演示

在本视频中,我们将学习如何使用 Apache Flask 进行基本的动手编码,稍后我们将尝试使用 Flask API 部署我们的机器学习模型。(+源代码)


阅读完整文档