该场景的一个方面是创建机器学习模型。 它必须在现实世界中可用,并且可供消费者和开发人员使用。
部署机器学习模型的最简单和最流行的方法是将它们封装在 REST API 中。
使用一个名为 FastAPI 的流行库,这正是我们今天要完成的。
但是,什么是 FastAPI?
FastAPI Python Web 框架是从头开始创建的,以利用当代 Python 功能。
对于与客户端的异步、并发通信,它遵循 ASGI 标准,同时也能够使用 WSGI。
端点和路由都可以使用异步函数。 此外,FastAPI 支持以类型提示、干净、现代的 Python 代码高效地创建 Web 应用程序。
顾名思义,FastAPI 的主要用例是创建 API 端点。
使用包含交互式 Swagger UI 的 OpenAPI 标准,或以 JSON 格式提供 Python 字典数据都是实现此目的的简单方法。 但是,FastAPI 不仅适用于 API。
它可用于使用 Jinja2 模板引擎提供标准网页,并使用 WebSockets 为应用程序提供服务,以及 Web 框架可以做的几乎所有其他事情。
在本文中,我们将开发一个简单的机器学习模型,然后使用 FastAPI 进行部署。 让我们开始。
安装 FastAPI 并创建第一个 API
首先需要安装库和 ASGI 服务器; Uvuicorn 或 Hypercorn 都可以。 它通过在终端中输入以下命令来工作:
现在已经创建了 API,您可以使用首选的代码编辑器并浏览它。 创建一个名为 ml_model.py 的 Python 脚本以开始使用。 欢迎你给你的文件起一个不同的名字,但为了这篇文章,我将把这个文件称为 ml_model.py。
要创建具有两个端点的简单 API,您必须完成以下任务:
- 导入 FastAPI 和 Uvicorn 库。
- 设置一个 FastAPI 类实例。
- 声明第一个路由,它在索引页面上生成一个简单的 JSON 对象。
- 声明第二个路由,它提供带有自定义消息的简单 JSON 对象。 name 参数直接取自 URL(例如 https://127.0.0.1:8000/Jay)。
- 利用 Uvicorn 运行 API。
实现这五个阶段显示在以下代码中,即。 创建一个简单的 API
全部完成! 让我们立即启动我们的 API。 打开 ml model.py 文件旁边的终端窗口以完成此操作。 接下来,输入以下内容:
回车键。 在继续之前,让我们揭穿这个断言。 第一个应用程序仅使用 Python 文件名,没有扩展名。 第二个应用程序必须与您的 FastAPI 实例同名。
通过使用 -reload,您可以告诉 API 您希望它在您保存文件时自动重新加载,而不是从头开始。
现在启动浏览器并导航到 https://127.0.0.1:8000; 结果应如下所示:
您现在了解了如何使用 FastAPI 创建简单的 API。
构建和训练机器学习模型
在不收集或分析任何数据的情况下,我们将只训练一个简单的模型。 这些与模型的部署无关,对手头的主题也不是必需的。
可以使用相同的方法安装基于 Iris 数据集的模型 神经网络 安装方法。
我们将这样做:下载 虹膜数据集 并训练模型。 那不会很简单。 首先,创建一个名为 jaysmlmodel.py 的文件。
在其中,您将执行以下操作:
- 导入——您需要 pandas、scikit-RandomForecastClassifier、learn 的 pydantic 的 BaseModel(您将在接下来的步骤中发现原因)以及用于存储和加载模型的 joblib。
- 声明一个从基础模型继承的 IrisSpecies 类。 此类仅包含预测单一花卉种类所需的字段(下一节将详细介绍)
- 创建一个类。 IrisModel 是一个模型训练和预测工具。
- 在 IrisModel 中声明一个名为 _train model 的方法。 它用于使用随机森林技术训练模型。 训练后的模型由过程返回。
- 在 IrisModel 中声明一个预测的物种函数。 它用于基于 4 个输入因素(花卉测量值)进行预测。 算法返回预测(花卉种类)和预测概率。
- 更改 IrisModel 中的构造函数,以便它加载 Iris 数据集并在文件夹中缺少模型时对其进行训练。 这解决了重复训练新模型的问题。 joblib 库用于模型加载和保存。
这是整个代码:
我希望上面的列表和评论能让你很容易掌握,即使这是要创建的大量代码。 现在这个模型已经开发出来了,让我们发布它的预测能力 REST API.
构建完整的 REST API
返回 ml_model.py 文件并清除所有数据。 样板将与您之前的样板基本相同,但我们应该从一个空白文件重新开始。
这次您将只定义一个端点,即用于确定花卉类型的端点。 上一节中声明的 IrisModel.predict species() 被此端点调用以执行预测。
请求类型是另一个重大变化。 为了以JSON而不是URL的方式传输参数,建议使用时使用POST 机器学习 蜜蜂。
如果你是一个 数据科学家,不过没关系。 要设计和部署模型,不一定需要成为 HTTP 请求和 REST API 方面的专家。
ml model.py 的任务很少而且很简单:
- 您必须从之前创建的 jaymlmodel.py 文件中导入以下内容:uvicorn、FastAPI、IrisModel 和 IrisSpecies。
- 创建 FastAPI 和 IrisModel 的实例。
- 在 https://127.0.0.1:8000/predict 声明一个函数来进行预测。
- IrisModel.predict species() 方法接收 IrisSpecies 类型的对象,将其转换为字典,然后返回。 返回是预期类别和预测概率。
- 使用 uvicorn 执行 API。
再一次,这里是整个文件的代码及其注释:
这就是你需要做的。 在下一步中,让我们测试 API。
测试API
在终端中重新输入以下行以执行 API: uvicorn ml_model:app –reload
这是文档页面的显示方式:
这就是今天的内容。 在这之后的部分,让我们总结一下。
结论
今天,您通过一个简单的 API 示例和一个简单的机器学习示例了解了 FastAPI 是什么以及如何使用它。 您还学习了如何创建和查看 API 文档,以及如何对其进行测试。
对于单件来说,这很多,所以如果需要阅读几次才能正确理解,请不要感到惊讶。
快乐编码。
发表评论