使用FastAPI和Celery在生产中提供ML模型

2024年06月20日 由 alex 发表 229 0

本文讨论如何在实际项目中实现机器学习。使用 Celery 和 FastAPI 实现机器学习模型的示例。


1


在本教程中,我们使用基于Coco Dataset的Tensorflow训练的对象检测模型。总的来说,这是一个包含大约 80 个类别的物体识别模型,例如狗、猫、鸟(鸟类)、鸡、鸭……本文未提及如何训练模型。


异步

目标是异步构建服务:ML 服务不直接返回预测结果(客户端调用 ML 服务并等待服务返回结果),而是返回任务的唯一标识符(task_id)。当预测任务由 ML 服务(工作节点)完成时,客户端可以继续处理其他任务,例如发送另一个预测请求。下面的步骤描述了处理预测所采取的行动(互联网源图像)


2


  1. 客户端应用程序向FastAPI端点发送POST请求,根据请求向API服务发送不同的内容,在本例中就是上传要预测的图像。
  2. FastAPI 验证信息并将图像保存到存档(例如:Nas、HDFS......)。如果验证成功,则将创建一个预测任务并将其移动到经纪人--消息队列(如 RabbitMQ)。
  3. 同时,如果 Celery 任务创建成功,API 服务还会创建一个唯一的任务 ID 并返回给客户端。
  4. 预测任务由 Broker 分配给一个 Worker 节点(这里可以有多个 Worker 节点)。任务分配完成后,工作节点会使用之前训练好的 ML 模型生成预测结果。
  5. 预测生成后,结果将存储在 Celery 后端(如 Redis)。
  6. 在步骤 3 之后的任何时候,客户端都可以使用从上一个 API 服务接收到的唯一任务 ID,从另一个 FastAPI 端点开始检查结果。一旦预测准备就绪,就会返回给客户端。


开始

我继续使用 Docker 开发此应用程序。


首先克隆 repo 到:


# clone git repo and goto root path
git clone https://github.com/apot-group/ml-models-in-production.git 
cd ml-models-in-production


项目结构包括


├── ml-api -> Contains code of FastAPI service config at ml-api/app/environment.env
├── ml-celery -> Contains code of Celery Worker config at ml-celery/app/environment.env
├── ml-client -> Contains Client's code
├── ml-storages -> Create a shared storage like file system service
    ├── upload
    ├── object-detection
├── docker-compose.yaml -> run service with this!
...


接下来,我们需要使用 docker-compose 构建整个服务:


docker-compose build && docker-compose up


由于要从头开始构建镜像,这可能需要一段时间。执行 docker-compose up 命令后,服务就会启动。一切启动和运行可能需要一段时间。


| Service      | URL                         | User/Password                   |
| -------------| ----------------------------|---------------------------------|
| Client       | http://localhost            | ml_user/CBSy3NaBMxLF            |
| API          | http://localhost/api/docs   | None                            |


最后,以用户 "ml_user "登录 http://localhost,通过 CBSy3NaBMxLF 选择需要预测的文件并查看结果。


3


请注意,预测的第一个图像需要一些时间,因为 Celery 需要时间将 ML 模型加载到内存中。从第二幅图像开始,服务运行得相当快。


文章来源:https://medium.com/@ngocduy.engineer/serving-ml-models-in-production-with-fastapi-and-celery-b1e8740f37d7
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消