ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[教程]:使用 FastAPI 和 Docker 提供容器化 ML 模型

2022-09-05 09:05:57  阅读:317  来源: 互联网

标签:容器 教程 FastAPI 应用程序 ML Docker Dockerfile docker 码头工人


[教程]:使用 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

容器化具有以下优势:

  1. **性能一致性
    ** DevOps 团队知道容器中的应用程序将运行相同,无论它们部署在哪里。
  2. **更高的效率
    ** 容器允许更快速地部署、修补或扩展应用程序。
  3. **更少的开销
    ** 与传统或硬件虚拟机环境相比,容器需要更少的系统资源,因为它们不包含操作系统映像。

方法

我们可以在这里使用 2 种方法来实现这一点。

  1. 实现一个 Dockerfile 这需要 建成 每次代码发生变化时手动手动执行,然后单独执行。
  2. 使用自动化上述过程 码头工人撰写

步骤 0:先决条件

  1. Python 3.6+

  2. 你有 ** 码头工人** 安装。

  3. 创建项目结构如下

    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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有