如何在 AWS Lightsail 上部署机器学习 API
如何在 AWS Lightsail 上部署机器学习 API
使用 FastAPI 和 AWS Lightsail 部署 Hugging Face Transformer 模型
在本文中,我将详细解释如何使用 Hugging Face Transformer 模型以及如何使用 FastAPI、Docker 和 AWS Lightsail 将它们包装和部署为 API。
什么是拥抱脸?
Hugging Face 是一个社区和数据科学平台,提供:
- 使用户能够基于开源 (OS) 代码和技术构建、训练和部署 ML 模型的工具。
- 一个广泛的数据科学家、研究人员和 ML 工程师社区可以聚集在一起分享想法、获得支持并为开源项目做出贡献的地方。
什么是拥抱脸变形金刚?
Transformers 提供 API 来轻松下载和训练最先进的预训练模型。使用预训练模型可以降低您的计算成本、碳足迹,并节省您从头开始训练模型的时间。这些模型可用于不同的模式,例如:
- 文本:超过 100 种语言的文本分类、信息提取、问答、摘要、翻译和文本生成。
- ️ 图像:图像分类、对象检测和分割。
- ️ 音频:语音识别和音频分类。
- 多模式:表格问答、光学字符识别、从扫描文档中提取信息、视频分类和视觉问答。
关于模型
在本教程中,我将使用一个变压器模型,即 microsoft/this-base-fine-tuned-rvlcdip 模型。
这 microsoft/this-base-fine-tuned-rvlcdip 模型是在 IIT-CDIP 上预训练的文档图像转换器 (DiT) 模型,该数据集包括 4200 万个文档图像并在 RVL-CDIP ,一个由 16 个类别的 400,000 张灰度图像组成的数据集,每个类别有 25,000 张图像。是在论文中介绍的 DiT:文档图像转换器的自我监督预训练 李等人。并首次发布于 这个存储库 .请注意,DiT 与 贝特 .
有关模型的更多信息,请访问此 关联。
什么是 API?
一个 应用程序接口 (API) 是一组用于构建软件应用程序的例程、协议和工具。基本上,API 指定软件组件应如何交互。
什么是 FastAPI?
快速API 是一个用于开发的 Web 框架 RESTful API 在 Python 中。 FastAPI 是基于 Pydantic 并键入提示以验证、序列化和反序列化数据,并自动自动生成 开放API 文件。它完全支持异步编程并且可以运行 优维康 和 独角兽 .
您可以查看有关 FastAPI 文档及其工作原理的这些链接
为什么选择 FastAPI?
使用 FastAPI 的原因:
- 快速地 :非常高的性能,与 节点JS 和 去 (感谢 Starlette 和 Pydantic)。 可用的最快的 Python 框架之一 .
- 快速编码 :将开发功能的速度提高约 200% 到 300%。 *
- 更少的错误 :减少约 40% 的人为(开发人员)导致的错误。 *
- 直觉的 : 伟大的编辑器支持。到处完成。更少的调试时间。
- 简单的 :旨在易于使用和学习。减少阅读文档的时间。
- 短的 : 尽量减少代码重复。每个参数声明的多个功能。更少的错误。
- 强大的 :获取生产就绪的代码。具有自动交互式文档。
- 基于标准 :基于(并完全兼容)API 的开放标准: 开放API (以前称为 Swagger)和 JSON 模式 .
什么是 Docker?
Docker 是一个开源容器化平台。它 使我们能够将应用程序打包到容器中 — 将应用程序源代码与在任何环境中运行该代码所需的操作系统 (OS) 库和依赖项相结合的标准化可执行组件。
什么是 Docker Compose?
Docker Compose 是 一种用于帮助定义和共享多容器应用程序的工具 .使用 Compose,我们可以创建一个 YAML 文件来定义服务,并且使用一个命令,可以启动所有内容或将其全部关闭。
有关 Docker 和 docker-compose 的更多信息可以在下面找到
关于 AWS Lightsail
亚马逊 Lightsail 是 虚拟专用服务器 (VPS) 提供商 对于开发人员、小型企业、学生和其他需要解决方案以在云上构建和托管其应用程序的用户来说,这是开始使用 AWS 的最简单方法。
开发环境
我将使用 Gitpod 作为这个项目的开发环境。
Gitpod 是 一个开源开发者平台,可自动提供可直接编写代码的开发者环境 . Gitpod 像 CI 服务器一样不断地构建你的 git 分支,这样你就可以立即开始编码——不再等待依赖项下载和构建完成。
在您可以使用 Gitpod 之前,您需要注册并登录,以便您可以创建和访问 Gitpod 工作区。请按照以下链接注册并登录
您可以转到下面的存储库来克隆本教程的源代码。该存储库还包含一个 gitpod 链接,因此您可以立即开始使用项目文件。
https://github.com/Nneji123/How-to-Deploy-Machine-Learning-Models-with-FastAPI-and-AWS-Lightsail
项目文件结构
存储库文件结构如下:
├── app.py
├── docker-compose.yml
├── Dockerfile
├── 下载.py
├── 执照
├── README.md
├── requirements.txt
└── utils.py
应用程序.py
此文件包含用于构建和运行我们的 FastAPI 应用程序的重要源代码。这是文件包含的内容:
API 有三个端点;
- GET 端点 '/' 只是主页。
- '/document-classifier' 端点。此端点将 PDF 文件作为输入,然后返回带有 PDF 文件所属类的 JSON 响应。
- '/classify-image' 端点。此端点将图像文件作为输入,然后返回带有图像文件所属类的 JSON 响应。
码头工人-compose.yml
一个码头工人组成。 yml 是 Docker Compose 的配置文件 .它允许同时部署、组合和配置多个 docker 容器。在这种情况下,我使用它在本地运行项目的 Docker 容器。
Dockerfile
Dockerfile 包含构建和运行 Docker 映像所需的所有命令。
上面的 Dockerfile 执行以下步骤:
- 从 Docker 中心抓取 python:3.8.13-slim-bullseye 图像。这被称为 基础图像。
- 创建一个名为的工作目录 应用程序。
- 安装 poppler-utils 包。 Linux 需要这个包,以便我们使用和操作 PDF 文件。
- 升级 setuptools 库。
- 安装 Pytorch 的 CPU 版本和其他要求。
- 将当前目录中的所有文件复制到 Docker 构建器。
- 公开端口 8000。这是一个非常重要的步骤,它允许我们的容器在 AWS Lightsail 上可见。
- 运行 download.py 文件。
- 使用 uvicorn 启动 FastAPI 应用程序。
下载.py
此文件从 Hugging Face 下载预训练模型。
要求.txt
此文件包含我们 API 的必要要求。
实用程序.py
此文件包含为 PDF 和图像文件生成分类的函数。
如何运行 API
现在我们已经完成了文件的创建,下一步是运行应用程序。要构建和运行应用程序,我们将使用 docker compose。
在终端中运行以下命令以构建和运行应用程序:
docker-compose up -d --build
这 -d
flag 以分离模式构建和运行 Docker 容器,即您将无法查看日志。这 - 建造
flag 构建 Docker 映像和 向上
flag 启动容器。
Screenshot by Author: Building the Docker Image with Docker Compose
API 演示
下面的视频演示了该应用程序的工作原理。该应用程序在 Gitpod 环境的 8080 端口上运行。
Video by Author: Document Classifier API Demo
将 Docker 镜像推送到 Docker Hub
在我们在 AWS Lightsail 上部署 API 之前,我们必须构建 Docker 映像并将其推送到 Docker 中心,以便我们可以在配置 Lightsail 要求时指定它。要构建和推送 Docker 映像,请执行以下步骤:
- 使用终端注册/登录 Docker Hub。
如果您没有 Docker Hub 帐户,请导航至此 地点 并注册,以便您可以从终端登录到 docker hub。
码头工人登录
或者 docker login -u 用户名 -p 密码
将用户名替换为您的实际用户名,并将密码替换为您在 Docker Hub 中的实际密码。
2. 构建 Docker 镜像并将其推送到 Docker Hub
docker build -t 用户名/图像名。
docker push 用户名/图像名
将 username 替换为您的 Docker Hub 用户名,将 imagename 替换为您想要的任何名称。例如,在我的情况下,命令将如下所示:
docker build -t nneji123/doc-classifier 。
docker push nneji123/doc-classifier
执行上述步骤后,您的镜像应该可以在 Docker Hub 上使用。我的 Docker 映像可用 这里 .
Screenshot by Author: Pushing Image to Docker Hub
在 AWS LightSail 上部署 API
下一步是在 AWS LightSail 上部署 API。为此,请按照以下步骤操作:
- 导航 https://aws.amazon.com 登录或注册 AWS。
Screenshot by Author: AWS Homepage
2. 登录 AWS 后,导航到 LightSail 主页 并创建一个新的容器服务,如下图所示。
Screenshot by Author: Create container service
3.点击后 创建容器服务, 选择规模并指定自定义部署。
4. 输入您想要的容器名称、您的镜像(之前上传到 Docker Hub 的 docker 镜像)以及端口和协议(分别为 8000 和 HTTP)。
Screenshot by Author: Setting up Lightsail Deployment
5. 选择一个公共端点,然后点击 在容器服务上创建 部署应用程序。
Screenshot by Author: Choose Public Endpoint
GIF by Author: AWS Lightsail Deployment Summary
最后的步骤
我们快完成了!最后一步是检查应用程序是否已成功部署并在没有任何错误的情况下运行。为此,您可以检查日志或导航到 Lightsail 创建的容器链接,如下图所示。
Screenshot by Author: Document Classifier logs on AWS Lightsail
从上图中可以看出,我们的应用程序已构建并成功运行。您现在可以测试端点是否有效。
GIF by Author: Document Classifier running on AWS LightSail
结论
总之,我们能够利用预训练的拥抱面部转换器模型,该模型可以将文档分类为各种类别,并将模型部署为具有 FastAPI、Docker 和 AWS Lightsail 的 API。
参考
[
使用 FastAPI 和 Streamlit 提供机器学习模型
机器学习是当前的热门话题。随着科技公司朝着人工的方向发展……
测试驱动.io
](https://testdriven.io/blog/fastapi-streamlit/)
[
虚拟专用服务器和虚拟主机 - Amazon Lightsail 常见问题解答 - Amazon Web Services
问:什么是虚拟专用服务器?虚拟专用服务器,也称为“实例”,允许用户运行...
aws.amazon.com
](https://aws.amazon.com/lightsail/faq/)
[
Hugging Face - 构建未来的 AI 社区。
构建、训练和部署由机器学习中的参考开源支持的最先进模型。多于…
拥抱脸.co
你做到了文章的结尾!感谢您阅读并希望您学到了很多,如果您喜欢我的内容并想与我联系,您可以通过以下方式做到这一点:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明