04 LocalStack
目前我收集到的信息有:
目标:实现用local stack跑model 1. 写一个能够跑player detection model的api 2. 需要完成如下功能: 1. Get model 2. Run model 3. Return results 3. 一些具体的要求包括: 1. 目前所有的model是存储在local stack的s3 bucket里面 2. 我们需要用到ultralytics来跑model
讨论以下这种方案的可行性
-
有一个s3 client文件,功能如下:
- 建立与s3 的连接
- Get到那个s3存model的路径
- 下载到local stack
-
在route文件里
- 搞到从local stack的路径
- 加载ultralytics,跑model
讨论这种方案的可行性,提出可能的疑问
模型缓存问题:
-
每次请求都重新下载模型吗?
-
模型文件很大,频繁下载会影响性能
-
需要一个缓存策略
Docker环境问题:
-
模型下载到哪里?容器里还是宿主机?
-
容器重启后文件会丢失
-
需要考虑持久化存储
内存管理:
-
YOLO模型加载后占用内存较大
-
多个请求同时来会怎样?
-
需要考虑模型的生命周期管理
错误处理:
-
S3连接失败怎么办?
-
模型下载失败怎么办?
-
模型加载失败怎么办?
请从头到尾帮我理清思路,step by step
给了两个方案 1. dockerfile 2. sagemaker endpoint
那我先选第一个。。感觉容易一点hhh
要把flask+yolo代码放进一个docker容器,这个容器启动后就是一个http服务
部署到 AWS EC2 - 一台远程 Linux 虚拟机,就像你的服务器,你可以 ssh 上去,跑 Docker 容器。
- 一个 EC2 实例(Amazon Linux 或 Ubuntu)
- 安装 Docker
docker run跑你的容器
所以我现在的步骤就是, 先在本地写好file,然后打包上传到docker? 如果是这样的话,file下载到哪里,我还是没懂
现在的testing流程
1. Start the container: docker-compose up -d
2. Verify the container started successfully: docker ps -a
3. A screenshot of the container being healthy should show up:
4. Connect to the local docker container: docker exec -it localstack bash
5. Verify the bucket exists: awslocal s3 ls s3://gc-computer-vision-models-qa/server-side/models/sport/baseball/clipping/event_clipping/ --recursive
6. Start the application: python run.py
7. Hit the endpoint: curl http://127.0.0.1:5000/healthcheck and verify the results below
下载model是下到哪里去
是容器内部的
/tmp/目录
如果我们现在需要写一个class,大概的structure,应该是啥样子的
- 你仍然可以用现在的 Flask API
- 把 app 打包进 Docker
- 镜像里预装好
ultralytics和依赖 - S3 模型仍然从 LocalStack 下载到
/tmp,推理后删除 - 用 EC2、ECS 或远程服务器跑 Docker 容器