把 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
还没有评论,来抢沙发~