网站首页 > 精选教程 正文
预测视图
首先,我们将创建预测视图,它可以接受带有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服务,可以为机器学习模型提供服务。恭喜您!
记得点击关注哦~
猜你喜欢
- 2024-10-27 如何在django 引入echarts.js django 导入excel文件到数据库
- 2024-10-27 谈谈 django 应用实践 django实训项目
- 2024-10-27 paperclub小知识点 paperccb
- 2024-10-27 LNMP(Python)项目架构,Django项目案例搭建和优化
- 2024-10-27 Django2.0笔记-创建并运行第一个Django项目
- 2024-10-27 Django开发教程(七) django开发工具
- 2024-10-27 django开发笔记及如何利用pycharm发布到阿里云
- 2024-10-27 使用python开发一个高性能的网站 python快速开发网站
- 2024-10-27 使用宝塔面板部署python django服务器
- 2024-10-27 前端教程:DjangoApache配置 django 前端开发
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)