把 AI 应用容器化的实践:从 Dockerfile 到 compose 编排

唐老师675 阅读

团队里要上线一个 AI 问答服务,除了推理服务本身,还有向量库、Redis、前端,总不能一台机器上裸跑五个进程吧。容器化是必须的,但 AI 应用的容器化有几个跟普通 Web 服务不一样的地方。

第一个问题是模型权重放哪。把几十 G 的权重打进镜像,构建一次能等一小时,而且仓库直接爆炸。我的做法是挂载卷:镜像里只装代码和依赖,权重放在宿主机目录,启动时 -v 挂进去。这样换模型版本也不用重新构建镜像。

第二个问题是 GPU 透传。Docker 跑 GPU 需要 nvidia-container-toolkit,装好之后在 compose 里加:

YAML
services: llm: image: vllm-image:latest runtime: nvidia environment: - NVIDIA_VISIBLE_DEVICES=0 volumes: - /data/models:/models ports: - "8000:8000"

注意 NVIDIA_VISIBLE_DEVICES 要显式指定,不指定的话默认全部 GPU 可见,如果机器上有别的业务占着卡,会直接冲突。

第三个坑是健康检查。LLM 服务启动慢,vLLM 加载模型要一分钟,compose 里默认的 healthcheck 超时根本不够。我设置了:

YAML
healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 10s timeout: 10s retries: 30 start_period: 120s

start_period 很重要,这个时间内不记失败次数。

最后是日志。容器里跑 Python 记得开 PYTHONUNBUFFERED=1,不然日志全在缓冲区里,出问题排查会急死人。

容器化本身不难,难的是把 GPU、权重、健康检查这些 AI 特有的点都照顾到。

评论0

还没有评论,来抢沙发~