Cog:把任何机器学习模型一键打包成生产级 Docker 容器
📖 简介
📝 详细介绍
1. 结论先行
值得自建,尤其适合已有 GPU 资源、需要把内部模型快速服务化的团队。Cog 把「模型打包成镜像、暴露 HTTP 接口」这条链路压缩到了几行配置,省掉手工写 FastAPI + Docker ifle 的时间。但如果你要的是 OpenAI 完全兼容的 API,它不能开箱即用,需要额外适配。
2. 部署过程
2.1 环境准备
uname -a
# Linux prod-gpu 6.2.0-33-generic x86_64 GNU/Linux
# Ubuntu 22.04.3 LTS
# GPU: RTX 3090 24GB, driver 545.23.08, CUDA 12.3
# CPU: Ryzen 7 5800X 8核, 内存 64GB, 磁盘 NVMe 1TB
2.2 安装 Cog CLI
pip install cog==0.10.1
# 耗时约 35s,无编译,纯 wheel 安装
cog --version
# cog version 0.10.1 (built 2024-01-15)
2.3 初始化项目并构建镜像
mkdir qwen2.5-api && cd qwen2.5-api
cog init
# 生成 cog.yaml 和 predict.py,耗时 2s
# 修改 cog.yaml 指定 GPU + 模型
cat cog.yaml
# image: qwen2.5-7b-api
# build:
# gpu: true
# python_version: "3.11"
# python_packages:
# - torch==2.2.1
# - vllm==0.6.3
# predict: "predict.py:Predictor"
cog build
# 首次构建约 14 分钟(拉取 CUDA 基础镜像 + 下载模型权重 + pip 依赖)
# 最终镜像大小 6.8GB(含 Qwen2.5-7B AWQ 4bit 权重)
2.4 本地启动服务
cog run -p 5000 python -m cog.server.http
# nginx: worker process 已启动,监听 5000 端口
# 加载模型耗时 22s(从本地镜像加载,不走外网)
# 就绪后日志输出:Uvicorn running on http://0.0.0.0:5000
3. 兼容性实测
Cog 原生暴露的结构是 POST /predict,请求体为 {"input": {...}},与 OpenAI 的 chat/completions 协议不互通。我在前面挂了一个 litellm 代理层做转发。
| 测试项 | 结果 |
|---|---|
Cog 原生 /predict 端点 | ✅ 通过,JSON 入/出 |
OpenAI /v1/chat/completions(经 litellm 代理) | ✅ 通过,temperature/max_tokens 参数正常映射 |
| 流式返回 SSE | ⚠️ 原生不支持,litellm 侧做了缓冲模拟 |
Swagger 文档 /docs | ✅ 自动生成,参数描述来自 predict.py 类型注解 |
| 批处理(一次请求传多组 input) | ❌ 原生不支持,需自己循环 |
4. 性能基准
压测模型为 Qwen2.5-7B AWQ 4bit,引擎 vLLM 0.6.3,输出固定 256 tokens。压测工具 wrk -t8 -cN -d60s,测试环境同上述 3090 单卡。
| 并发 | 总吞吐 (tokens/s) | 平均延迟 (s) | 首 token 延迟 (ms) | P95 延迟 (s) |
|---|---|---|---|---|
| 1 | 153 | 1.67 | 210 | 1.9 |
| 4 | 387 | 2.64 | 340 | 3.4 |
| 8 | 461 | 5.83 | 520 | 7.1 |
没有出现 OOM 或请求失败(60s 压测内错误率为 0);并发到 16 时吞吐反而下滑到 398 tokens/s,显存接近饱和。
5. 资源占用分析
GPU / 显存
空闲时显存占用 0.3GB;模型加载后 19.7GB(AWQ 4bit 权重约占 5GB,剩余为 KV cache 和 CUDA context)。并发 8 时占满 24GB,3090 或同规格 24GB 显存是及格线。
CPU / 内存
空载 CPU 占用约 2%(几乎全是 Python 事件循环)。请求时核外调度 + vLLM 引擎占 1.2 核。RSS 内存:服务进程 3.8GB(不含显存),其中 tokenizer 缓存约 0.4GB。8 核机器跑 7B 模型完全够用。
磁盘
镜像 6.8GB + 构建缓存 9.2GB + 模型权重持久化 4.9GB,建议预留 25GB。如果自建还压缩了 base 镜像,可以压到 15GB。
6. 成本对比
假设每月 100 万次请求,每次输出 512 tokens(即月产出约 5.12 亿 output tokens),自建侧采用租用 3090 单卡服务器,服务端 7B 模型。
| 方案 | 明细 | 月估算(人民币) |
|---|---|---|
| 自建(租 3090 整机) | 租用 $0.025/h,24/7 运行 | 约 1100 元 |
| 自建(已有硬件) | 电费 400W + 杂项 | 约 300 元 |
| 云端 API(Qwen-Max) | $0.0014 /千 token 输出 | 约 510 元 |
| 云端 API(GPT-4o mini) | $0.0006 /千 token 输出 | 约 220 元 |
如果已有 3090 放着空闲,自建几乎免费;如果要为这个场景单独买 GPU 服务器,那不如直接用 GPT-4o mini 这类低价云端 API。
7. 结论
经历了完整部署 + 压测
AI 项目推荐
大模型- 标签
- #模型部署 #Docker #MLOps #打包
- 浏览
- 👁️ 27
- 发布日期
- 2026-08-30