Cog:把任何机器学习模型一键打包成生产级 Docker 容器

Cog:把任何机器学习模型一键打包成生产级 Docker 容器

大模型

📖 简介

Cog 是 Replicate 开源的模型打包工具,一份 cog.yaml 加几条命令就能把任何 ML 模型打包成带 HTTP API 的 Docker 镜像,GPU 驱动、自动缩放开箱即用,模型上线的捷径。

📝 详细介绍

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)
11531.672101.9
43872.643403.4
84615.835207.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