[教程]:使用 FastAPI 和 Docker 提供容器化 ML 模型
作者:互联网
[教程]:使用 FastAPI 和 Docker 提供容器化 ML 模型
使用 FastAPI 和 docker 提供容器化机器学习 (ML) 模型的分步教程。
Our tech stack for the tutorial
在我的 ** 以前的** 在教程中,我们通过构建端点来服务机器学习( 机器学习 ) 使用 Python 的图像分类器模型和 快速API .
在本后续教程中,我们将重点介绍在通过 FastAPI 服务时使用 docker 对模型进行容器化。
如果你关注了我的 ** 最后一个教程** 关于使用 TensorFlow Hub 提供预训练的图像分类器模型 快速API , 那么你也能 ** 直接地** __跳 至 ** 第 3 步** 本教程的⬇️。
[
[教程]:使用 FastAPI 在生产环境中提供 ML 模型
使用 FastAPI 从 TensorFlow Hub 提供(预训练的)图像分类器模型的分步教程。
媒体网
](/@ashmi_banerjee/4-step-tutorial-to-serve-an-ml-model-in-production-using-fastapi-ee62201b3db3)
集装箱化的优势
It works on my machine — a popular docker meme on the internet
容器化具有以下优势:
- **性能一致性
** DevOps 团队知道容器中的应用程序将运行相同,无论它们部署在哪里。 - **更高的效率
** 容器允许更快速地部署、修补或扩展应用程序。 - **更少的开销
** 与传统或硬件虚拟机环境相比,容器需要更少的系统资源,因为它们不包含操作系统映像。
方法
我们可以在这里使用 2 种方法来实现这一点。
- 实现一个
Dockerfile
这需要建成
每次代码发生变化时手动手动执行,然后单独执行。 - 使用自动化上述过程
码头工人撰写
步骤 0:先决条件
-
Python 3.6+
-
你有 ** 码头工人** 安装。
-
创建项目结构如下
fastapi-后端
├── 源
│ ├── 应用
│ │ ├── app.py
│ └── 预
│ │ ├── 型号
│ │ │ ├── tf_pred.py
│ │ └── image_classifier.py
│ └── 实用工具
│ │ ├── 实用程序.py
│ └── main.py
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
第 1 步:设置
在里面 应用程序.py
文件,执行 /预测/tf/
终点使用 快速API
.
在里面 主文件
文件,我们使用 乌维康
server,它是 Python 的 ASGI Web 服务器实现。
笔记 : 由于本教程的目标是容器化应用程序,因此上述代码片段的详细解释已在 ** 第2步** 的 ** 以前的** __教程。
第 2 步:创建 Dockerfile
容器化应用程序的第一步是在您的项目目录中创建一个 Dockerfile (见上面的项目结构) .
Dockerfile
是一个文本文档,包含构建 docker 映像所需的所有说明。
我们定义我们的 Dockerfile
如下:
说明:
1号线
: 下载指定的 Docker 镜像 (蟒蛇:3-破坏者
) 来自 ** 码头中心注册表** .您可以查看可用的图像 ** 这里** .3号线
: 升级点子
以便稍后我们可以安装要求.txt
4号线
:将工作目录设置为/代码
.这是必需的,以便所有脚本都从一个公共父目录运行6号线
: 副本要求.txt
文件及其内容从主机到容器7号线
: 安装内容要求.txt
图像内部第 9–12 行
: 将各自的文件从主机复制到镜像13号线
:CMD(可执行)指令用于设置运行容器时要执行的命令。一个Dockerfile
必须只有一个 CMD 指令,如果有多个,只有最后一个生效。该语句还将容器的默认命令设置为蟒蛇主.py
.
第 4 步:构建并运行您的应用程序
一旦我们实现了 Dockerfile,下一步就是 建造
泊坞窗图像,然后 跑
它。
步骤 4.1。构建 图片
我们构建图像(这里 我的fastapiimage
) 如下。
您可以使用您选择的任何名称来调用它。
docker build -t myfastapiimage 。
需要注意的要点:
-
不要忘记
.
在图像之后 -
如果您的 docker 镜像在更改文件后无法重建,您可以按如下方式启动强制构建:
docker build --no-cache -t myfastapiimage 。
码头工人建造
通常使用缓存来加快速度。 --无缓存
确保它强制重建它。
步骤 4.2。运行容器
docker run --name mycontainer -p 80:8000 myfastapiimage
解释
码头运行--名称<myContainerName>
: 创建一个名为我的容器
(您可以在此处使用任何名称)。容器的名称稍后用于识别目的。-p<host_port> :<container_port>
映射主机的端口(80
) 到集装箱的一个港口 (8000
)。我的fastapiimage
是从中派生容器的映像的名称。
[步骤 4 的替代方法] 使用 Docker-compose
码头工人撰写
是定义和运行多容器 Docker 应用程序的理想工具。在 Compose 中,我们使用 YAML 文件
( .yml
) 来配置应用程序的服务。
使用的最大优势 码头工人撰写
就是说,使用一个命令,我们就可以从我们的配置中创建并启动所有服务。你可以阅读更多关于 码头工人撰写
这里 .
现在让我们看看我们如何定义 码头工人撰写
在我们的例子中。由于我们是单一服务应用程序,因此定义 码头工人撰写
应该相当简单。
说明:
- 这个 docker-compose 有一个名为
应用程序
定义。 - 这
应用程序
服务使用从Dockerfile
在当前目录中。 - 然后它将容器和主机绑定到暴露的端口,
8000
- 它还绑定了
/src/
从主机到容器。卷绑定是反映容器中主机上文件的任何更改所必需的。
跑步 码头工人撰写
:
从项目目录中,通过运行以下命令启动应用程序。
码头工人组成 --build
访问 ** http://127.0.0.1:8000/** 从您的浏览器启动并运行应用程序。
一些方便的调试技巧
-
如果您的图像遇到问题,您可以尝试进入容器的外壳并对其进行调试。要 bash 进入正在运行的容器,请键入以下内容:
docker exec -t -i mycontainer /bin/bash
-
如果您的 docker 镜像在更改文件后无法重建,您可以按如下方式启动强制构建:
docker build --no-cache -t myfastapiimage 。
-
有时,如果您尝试重新运行 docker 容器,您可能会得到
容器已经在使用
错误。在这种情况下,终止容器,通过码头工人<containerName>
并重新运行您的容器。
或者,如果您使用的是 docker-compose,您还可以从终端(在项目目录中)键入以下内容码头工人-撰写下来
-
的情况下
路径错误
, 小心容器根
您正在使用并相应地调整路径。 -
另一个方便的 docker 命令如下:
码头工人ps -a
它为您提供所有容器(运行和停止)的所有列表。
结论
在本教程中,我们学习了如何使用容器化我们的应用程序 码头工人
.
容器化之后的下一步是部署。
一旦我们对容器化应用程序的行为感到满意,我们就可以将其部署在任何托管/混合/本地云服务上,并将故障风险降至最低。
笔记 :本教程可以扩展到任何类型的应用程序容器化,而不仅仅是 FasAPI 应用程序。
你只需要调整 _Dockerfile_
和 _码头工人撰写_
因此。其余的保持不变 .
✨ GitHub上的源代码可以访问 ** 这里** ** _.
_** 总结了有关该主题的参考资料和进一步阅读资料 ** 这里** .
✨ 如果你喜欢这篇文章,请 ** 订阅** 得到我最新的。
要取得联系,请联系我 ** 领英** 或通过 ** ashmibanerjee.com** .
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
本文链接:https://www.qanswer.top/15426/46430508
标签:容器,教程,FastAPI,应用程序,ML,Docker,Dockerfile,docker,码头工人 来源: https://www.cnblogs.com/amboke/p/16656836.html