本文讨论如何在实际项目中实现机器学习。使用 Celery 和 FastAPI 实现机器学习模型的示例。
在本教程中,我们使用基于Coco Dataset的Tensorflow训练的对象检测模型。总的来说,这是一个包含大约 80 个类别的物体识别模型,例如狗、猫、鸟(鸟类)、鸡、鸭……本文未提及如何训练模型。
异步
目标是异步构建服务:ML 服务不直接返回预测结果(客户端调用 ML 服务并等待服务返回结果),而是返回任务的唯一标识符(task_id)。当预测任务由 ML 服务(工作节点)完成时,客户端可以继续处理其他任务,例如发送另一个预测请求。下面的步骤描述了处理预测所采取的行动(互联网源图像)
开始
我继续使用 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 选择需要预测的文件并查看结果。
请注意,预测的第一个图像需要一些时间,因为 Celery 需要时间将 ML 模型加载到内存中。从第二幅图像开始,服务运行得相当快。