JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

使用Django部署机器学习模型(2) django机制

wys521 2024-10-27 15:12:00 精选教程 27 ℃ 0 评论

预测视图


首先,我们将创建预测视图,它可以接受带有JSON数据的POST请求,并将其转发给正确的ML算法。


我们需要在backend/server/apps/endpoints/views.py中添加以下代码:


让我们添加用于预测的URL。backend/server/apps/endpoints/urls.py文件看起来应如下所示:


好的,让我们来讨论一下细节。PredictView只接受POST请求。可以在这里访问它:

https://<server_ip/>api/v1/<endpoint_name>/predict


endpoint_name定义了我们试图到达的端点。在我们的例子中(在本地开发中),我们可以在这里访问此ML算法:


http://127.0.0.1:8000/api/v1/income_classifier/predict


income_classifier是端点名称(您可以在http://127.0.0.1:8000/api/v1/endpoints处检查端点)。


此外,您可以在URL中指定算法状态或版本。要指定状态和版本,您需要在URL中包括它们,例如:


http://127.0.0.1:8000/api/v1/income_classifier/predict?status=testing&version=1.1.1.


默认情况下,会有一个已使用的production状态。

根据端点名称、状态和版本,会有请求的路由来纠正ML算法。如果算法被正确选择,JSON请求将被转发给算法对象并计算预测。


在代码中还包含了用于在A/B测试中绘制算法代码,我们将在下一章详细介绍这段代码。


要查看该代码是否工作,请访问http://127.0.0.1:8000/api/v1/income_classifier/predict并提供示例JSON输入:


然后点击POST 按钮。您应该会看到类似于图8和图9的视图。

图图8:填充输入数据并单击POST

图9: ML算法的响应


恭喜您! ! !如果您看到图9中的结果,那么这意味着您的ML web服务正在正常工作。


您的响应应该是这样的:


该响应包含了probability、 label,、status 和 request_id。您稍后可以使用request_id来提供反馈和ML算法监视。


为PredictView添加测试


我们将添加一个简单的测试用例,它将检查预测的视图是否对正确的数据进行了正确的响应。


运行此测试:


运行所有测试:


我们稍后可以添加更多的测试,这将涵盖在URL或数据中选择了错误端点的情况,这些端点的格式是错误的。


向存储库添加代码


在进入下一章之前,让我们把代码添加到存储库:


在下一章,我们将研究ML算法的A/B测试。

A / B测试


您已经做了什么:

  • 创建了ML算法,

  • 使用ML代码、端点的数据库模型、算法和请求创建了Django web服务。

  • 创建了预测视图,它会将请求路由到ML算法。


您将在这一章学到什么:

  • 向web服务添加第二个ML算法(基于极端随机树),

  • 为A/B测试信息创建数据库模型和REST API视图,

  • 编写一个用于发送请求的python脚本。


添加第二个ML算法


我们将为基于算法的极限随机树添加代码和测试。请在backend/server/apps/ml/income_classifer目录中添加 新的 extra_trees.py文件。(该代码与RandomForestClassifier类非常相似,但是为了保持简单,我只是复制它并更改了读取模型的路径。用法与这里类似。)。


在backend/server/apps/ml/tests.py文件中添加测试:


运行测试:


算法运行正常。我们需要将它添加到ML注册表中。我们需要修改后端/服务器/服务器/wsgi.py文件:


要查看更改,请重新启动服务器:


服务器重启后,请在web浏览器中打开http://127.0.0.1:8000/api/v1/mlalgorithms。您应该会看到两个已注册的ML算法(图10)。

图10:在服务中注册的两个ML算法


在数据库中创建A/B模型


添加ABTest模型


让我们在backend/server/apps/endpoints/models.py文件中添加数据库模型,来保存A/B测试相关的信息:


ABTest会保存以下的信息:

  • 哪些ML算法是经过测试的,

  • 谁以及何时创建了该测试,

  • 测试何时被停止,

  • summary字段中的测试结果。


定义序列化器


让我们为ABTest模型添加一个序列化器。

请注意,id、created_at、ended_at和summary字段被标记为只读。我们将允许用户使用REST API创建A/B测试,只读字段由服务器代码设置。


定义视图

ABTestViewSet视图允许用户创建新的对象。perform_create方法为ML算法创建了ABTest对象和两个新状态。新的状态被设置为ab_testing。


我们还将添加一个视图来停止A /B测试。


StopABTestView会停止A/B测试并计算每个算法的准确度(正确响应的比率)。精度较高的算法会被设定为生产算法,另一种算法则以testing状态保存。


为ABTest添加URL路由器


最后是添加该URL路由器:


好的,我们差不多就设置好了。在启动开发服务器之前,我们需要创建和应用数据库迁移:


让我们运行服务器:


您应该看到DRF列表生成了API列表,如图11所示。

图11:进行A/B测试的URL


让我们开始新的A/B测试。请访问地址http://127.0.0.1:8000/api/v1/abtests(在开发环境中)。请设置标题、创建者名称和设置算法。括号里是算法的id。请确保您选择了id 1和2,如图12所示。按下POST按钮创建测试。

图12:创建新的A/B测试的视图


在创建了新的A/B测试之后,您应该会看到如图13所示的视图。

图13:创建的新的A/B测试


在A/B测试创建之后,您应该会看到ML算法更新后的状态字段。它们应该会被设置为ab_testing,如图16中所示。

图14:带有更新状态的ML算法


运行A/B测试


为了运行A/B测试,我们将在Jupyter notebook中编写python脚本来模拟真实的A/B测试。该脚本将:

  • 读取测试数据,

  • 将样本一个接着一个发送到服务器,

  • 获取服务器响应并将反馈发送到服务器。


启动新的notebook之前,请安装requests包,用于与服务器进行通信。


请打开Jupyter notebook,并在research目录中创建新的脚本ab_test.ipynb。


让我们添加必要的包。


读取数据的代码:


将数据分割为训练集和测试集:


请注意,我们在模型训练时使用了与前面相同的种子 (random_state值)。


让我们使用前100行测试数据进行A/B测试。


在每个迭代步骤中,我们将数据发送到API端点:


并在以下地址处提供带有真实标签的反馈:


运行脚本后,您可以在地址http://127.0.0.1:8000/api/v1/mlrequests检查请求。您应该会看到如图15所示的请求列表。

图15:运行A/B测试脚本后的ML请求


要停止A/B测试,请打开地址http://127.0.0.1:8000/api/v1/stop_ab_test/1,其中地址末尾的1是A/B测试的id,点击POST按钮完成A/B测试。您应该会得到如图@fig:16所示的视图。

图16:A/B测试完成


您可以看到,图中对于每个算法都显示了带有精度的测试摘要。您可以查看(在http://127.0.0.1:8000/api/v1/mlalgorithms)算法是否更新了状态,并将精度更高的模型投入生产。


向存储库添加代码


让我们将我们的代码保存到存储库:


在下一章中,我们将为服务器定义docker容器。


容器


我们已经做了:

  • 创建ML算法,

  • 使用ML代码、端点的数据库模型、算法和请求创建Django web服务,

  • 创建预测视图,它会将请求路由到ML算法,

  • 在服务器中创建A/B测试代码。


在本章中,您将为我们的服务器代码定义docker容器。使用docker,我们可以很容易地将代码部署到选定的基础设施中,如果需要,还可以很容易地扩展服务。


准备代码


在创建docker定义之前,我们需要在服务器代码中添加一些更改。


请编辑backend/server/server/settings.py文件并设置ALLOWED_HOSTS变量:


另外,在设置文件最后设置STATIC_ROOT、STATIC_URL变量:


请在项目的主目录中添加requirements.txt 文件:


Dockerfile


让我们为nginx服务器和我们的服务器应用程序定义docker文件。我们将会把它们放在不同的目录中:


请在docker/nginx目录中添加Dockerfile文件:


另外,我们还将添加nginx配置文件,请添加docker/nginx/default.conf文件:


现在,我们来为我们的服务器应用程序定义“Dockerfile”。请添加docker/backend/Dockerfile文件:


在这个dockerfile中,我们加载ubuntu系统,安装所有需要的包,并将默认的python切换到python 3.6。最后,我们复制应用程序代码。


我们将为我们的应用程序定义起动脚本。请添加 docker/backend/wsgi-entrypoint.sh文件:


在使用gunicorn声明应用程序之前,我们将使用这个启动脚本来应用数据库迁移并创建静态文件。


我们已经为nginx服务器和我们的应用程序定义了dockerfile。我们将使用docker-compose命令来管理它们。让我们在主目录中添加docker-compose.yml文件:


要构建docker镜像,请运行:


要启动docker镜像,请运行:


您应该可以在以下地址看到服务器正在运行:


恭喜!


这是本教程的最后一步。您已经成功地创建了自己的web服务,可以为机器学习模型提供服务。恭喜您!

记得点击关注哦~


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表