使用 Docker 和 FastAPI 的首次容器化机器学习部署

Your First Containerized Machine Learning Deployment with Docker and FastAPI

使用 Docker 和 FastAPI 的首次容器化机器学习部署
图片由 Editor | ChatGPT 提供

引言

部署机器学习模型可能看起来很复杂,但现代工具可以简化这一过程。FastAPI 是一个用于构建 API 的高性能 Web 框架,而 Docker 允许你在隔离的容器化环境中运行应用程序。结合这两种技术可以简化跨不同系统的部署,确保可扩展性,并使维护更容易。这种方法有助于避免生产环境中的依赖冲突,从而为服务 ML 模型创建了一个可靠的管道。

在本文中,您将学习如何使用 FastAPI 和 Docker 部署机器学习模型。

准备

在开始之前,请确保你的系统已安装以下软件

  • Python 3.8+ – 训练模型和运行 FastAPI 服务器所需的版本
  • pip – Python 的包安装程序,用于管理依赖项
  • Docker – 一个容器平台,用于在环境中一致地构建和运行应用程序

你还应该熟悉基本的 Python 编程,理解机器学习概念,并熟悉 RESTful API。

这是我们推荐的项目结构

训练机器学习模型

我们将从使用 Scikit-learn 的 Iris 数据集训练一个简单的随机森林分类器开始。下面的脚本(你应该将其保存为 train_model.py)负责加载数据、训练分类器以及使用 joblib 将模型序列化到文件。根据我们的项目结构,这个保存的模型将被放置在 app/ 目录中。

要训练和保存你的模型,请从终端运行此脚本

创建 FastAPI 应用程序

下一步是通过 API 公开模型,以便其他应用程序或用户可以访问它。FastAPI 使得这个过程变得容易,只需最少的样板代码,并提供出色的类型检查、验证和文档支持。

我们将构建一个简单的 FastAPI 应用程序,该应用程序加载训练好的模型,并提供一个名为 /predict 的端点,以根据用户输入返回预测。

该应用公开了一个名为 /predict 的端点,它接受花朵的测量值并返回预测的类别。

编写 Dockerfile

要在容器化环境中运行此 FastAPI 应用程序,你需要创建一个 Dockerfile。此文件包含 Docker 构建镜像的说明,该镜像打包了你的应用程序及其依赖项。在项目根目录创建一个文件,内容如下,并将其命名为 Dockerfile,不带文件扩展名。

创建 requirements.txt 文件

requirements.txt 文件用于 pip 在你的 Docker 容器中安装所有必需的依赖项。它应包含项目中使用的所有库

你可以手动创建此文件,或者通过运行以下命令生成

构建和运行 Docker 容器

一旦你的 FastAPI 应用程序、模型和 Dockerfile 都准备就绪,下一步就是使用 Docker 将应用程序容器化,然后运行它。此过程可确保你的应用程序能在任何环境中可靠地运行。

首先,构建 Docker 镜像

然后,运行容器

此命令将容器的 8000 端口映射到你的本地 8000 端口。

测试 API 端点

现在你的 FastAPI 应用已在 Docker 容器中运行,你可以本地测试该 API。

你可以使用浏览器或 Postman 等工具进行验证,或者也可以使用 curl

预期输出

FastAPI 还提供了交互式文档,地址为 https://:8000/docs。你可以使用这个 Swagger UI 直接在浏览器中测试和调试 /predict 端点。

改进模型服务

虽然基本设置在初始部署中效果很好,但实际场景通常需要改进来提升开发体验和管理特定环境的配置。以下是一些需要注意的要点。

在开发期间启用实时重新加载

在本地开发时,启用自动重新加载会很有帮助,这样你的 API 在你更改代码时就能重新启动。FastAPI 使用 Uvicorn,它支持此功能。在你的 Dockerfile 中修改 CMD 行,或者在开发时通过 docker-compose 使用它,如下所示

注意:--reload 标志仅用于开发。在生产环境中避免使用它。

使用环境变量

不要硬编码路径或配置值,而是使用环境变量。这使得你的应用程序更灵活、更具生产力。

例如,你可以在 main.py 中重构模型加载

你也可以在 Docker run 命令中传递环境变量

结论

使用 FastAPI 和 Docker 部署机器学习模型是一种高效且可扩展的方法。FastAPI 提供了一种高性能的方法将模型公开为 API,而 Docker 则确保了跨所有环境的一致行为。两者结合起来,创建了一个强大的工作流程,简化了开发、测试和部署,并帮助你的机器学习服务变得更加健壮并为生产做好准备。

暂无评论。

留下你的回复

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