如何在Google Cloud上运行YOLO模型推理?Cloud Run部署问题求助
在Google Cloud上实现YOLOv5视频推理的解决方案
解决Cloud Run容器体积过大的问题
如果因为Ultralytics依赖包导致容器无法上传,可通过以下方式压缩镜像体积:
- 使用轻量级基础镜像:替换全量Python镜像为
slim或Alpine版本,比如FROM python:3.10-slim,能大幅减少基础镜像体积。注意Alpine的musl库可能和部分PyTorch依赖存在兼容问题,需提前测试。 - 裁剪依赖包:仅安装推理必需的依赖,跳过训练相关的包(如数据集处理、训练优化工具等)。例如手动指定安装
torch、torchvision和ultralytics,而非直接安装YOLOv5源码中的完整requirements。 - 多阶段构建镜像:将依赖安装、模型预下载与运行环境分离,只复制必要文件到最终镜像。示例Dockerfile:
# 构建阶段:安装依赖并预下载模型 FROM python:3.10-slim AS builder WORKDIR /app # 安装依赖到用户目录,避免权限问题 RUN pip install --user ultralytics torch torchvision # 预下载YOLOv5s模型,避免运行时下载 RUN python -c "from ultralytics import YOLO; YOLO('yolov5s.pt')" # 运行阶段:仅保留必要文件 FROM python:3.10-slim WORKDIR /app # 复制构建好的依赖和模型 COPY --from=builder /root/.local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages COPY --from=builder /root/.config/ultralytics /root/.config/ultralytics # 复制你的推理代码 COPY inference.py . # 清理缓存 RUN apt-get clean && rm -rf /var/lib/apt/lists/* && pip cache purge CMD ["python", "inference.py"]
- 清理镜像缓存:在Dockerfile中添加命令清理apt和pip的缓存文件,减少镜像冗余。
GCP服务选择建议
根据你的场景,不同服务的适配性如下:
- Cloud Run:优先尝试上述镜像优化方案,它的serverless特性适合按需扩缩容,且能直接对接Pub/Sub触发。如果优化后仍无法满足(比如需要GPU加速推理),再考虑其他服务。
- Compute Engine:适合需要更强计算资源(如GPU、大内存)或自定义环境的场景。你可以创建带GPU的虚拟机,手动部署YOLOv5环境,或用容器部署到GCE。缺点是需要自行管理实例的启停、扩容,缺乏Cloud Run的自动扩缩容能力。
- App Engine:不推荐用于视频推理场景,它的资源限制较多,灵活性不足,更适合轻量级Web服务。
- Cloud Functions:仅适合处理小体积视频或短时长推理任务,因为它有最大9分钟的执行时间限制,大文件处理容易超时。
适配Cloud Storage+Pub/Sub触发流程
无论选择哪种服务,都可以保留现有触发逻辑:
- 配置Cloud Storage存储桶的事件通知,当有视频上传时,发送包含文件路径的消息到指定Pub/Sub主题。
- 在推理服务中订阅该Pub/Sub主题,接收消息后从Cloud Storage下载视频文件。
- 执行YOLOv5推理,将检测结果或处理后的视频写回Cloud Storage或其他存储服务。
内容的提问来源于stack exchange,提问作者LemonJam84
相关产品推荐
相关产品推荐

