使用FastAPI和Docker创建安全的机器学习API

Creating a Secure ML API with FastAPI and Docker

图片作者 | Canva

机器学习模型只有在触达用户时才能实现真正的价值,而 API 就是实现这一点的桥梁。但仅仅暴露你的模型是不够的;你需要一个安全、可扩展且高效的 API 来确保其可靠性。在本指南中,我们将构建一个生产级的 ML API,并使用 FastAPI,加入身份验证、输入验证和速率限制。这样,你的模型不仅能工作,而且能安全地进行大规模工作。

在本指南中,我将引导你构建一个安全的机器学习 API。我们将涵盖:

  • 使用 FastAPI 构建快速、高效的 API
  • 使用 JWT(JSON Web Token)身份验证保护你的端点
  • 确保模型的输入有效且安全
  • 为 API 端点添加速率限制,以防止滥用或过载
  • 使用 Docker 将所有内容整洁地打包,实现一致的部署

项目结构将大致如下所示:

让我们一步一步来。

第一步:训练和序列化模型 (app/model.py)

为了保持简单,我们将使用 Iris 数据集上的 RandomForestClassifier。RandomForestClassifier 是一种对事物(例如花朵、电子邮件、客户)进行分类的机器学习模型。在 Iris 花卉数据集中:

  • 输入:4 个数字(萼片和花瓣的长度/宽度)
  • 输出:物种(0=setosa、1=versicolor 或 2=virginica)

RandomForest 使用许多决策树来检查输入数字的模式,并根据这些模式返回最可能的物种。

运行此脚本以生成 model.pkl 文件。

第二步:定义预测逻辑 (app/predict.py)

现在,我们创建一个助手来加载模型并根据输入数据进行预测。

该函数期望一个包含 4 个特征的列表(例如 [5.1, 3.5, 1.4, 0.2])。

第三步:验证输入 (app/validation.py)

FastAPI 使用 Pydantic 模型提供自动输入验证。此模型将验证传入的特征是否格式正确。它还在处理之前验证它们是否是适当范围内的数值。

注意:步骤 4-5 是可选的,仅用于安全目的

第四步:添加 JWT 身份验证 (app/jwt.py)

JWT(JSON Web Token)提供比简单的基于令牌的身份验证更安全的身份验证。JWT 允许一个更强大的系统,其中声明(用户信息、过期时间等)嵌入在令牌中。使用共享密钥或公钥/私钥对进行验证。

我们将使用 pyjwt 库来处理 JWT。

您需要创建一个路由来获取 JWT。

第五步:使用速率限制保护您的 API (app/rate_limit.py)

速率限制可以保护您的 API 免遭过度使用。它限制了每个 IP 在一分钟内发送请求的次数。我通过中间件添加了此功能。

RateLimitMiddleware 会检查每个请求的 IP,计算最后 60 秒内收到的请求数量,并在达到限制(默认为 60 次/分钟)时阻止其余请求。它也被称为节流率。如果有人超过限制,他们会收到“429 Too Many Requests”错误。

这是一个简单的、基于内存的方法,对于小型项目来说效果很好。

第六步:构建 FastAPI 应用程序

将所有组件组合到 FastAPI 主应用程序中。这将包括健康检查、令牌生成和预测的路由。

第七步:Docker 化应用程序

创建一个 Dockerfile 来打包应用程序和所有依赖项。

以及一个简单的 requirements.txt 文件,内容如下:

第 8 步:构建和运行 Docker 容器

使用以下命令运行您的 API:

现在您的机器学习 API 将可以通过 https://:8000 访问。

第 9 步:使用 Curl 测试您的 API

为此,请首先运行以下命令获取 JWT:

复制访问令牌,然后运行以下命令:

您应该会收到一个类似以下的预测结果:

您可以尝试不同的输入来测试 API。

结论

将机器学习模型部署为安全 API 需要仔细关注身份验证、验证和可伸缩性。通过利用 FastAPI 的速度和简洁性以及 Docker 的可移植性,您可以创建健壮的端点,安全地公开模型的预测,同时防止滥用。这种方法确保了您的机器学习解决方案不仅准确,而且在实际应用中可靠且安全。

掌握机器学习 Python!

Python For Machine Learning

更自信地用 Python 编写代码

...从学习实用的 Python 技巧开始

在我的新电子书中探索如何实现
用于机器学习的 Python

它提供自学教程数百个可运行的代码,为您提供包括以下技能:
调试性能分析鸭子类型装饰器部署等等...

向您展示高级 Python 工具箱,用于
您的项目


查看内容

暂无评论。

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。