基于Docker的模型服务部署测试
最近在进行模型服务部署时,尝试了基于Docker的方案,踩了不少坑,记录一下。
测试环境
- Ubuntu 20.04 LTS
- Docker 20.10.7
- Python 3.8
- TensorFlow 2.8.0
- 模型:ResNet50分类模型
初始部署方案
首先尝试了官方TensorFlow Serving的Docker镜像:
docker run -p 8501:8501 \
--mount type=bind,source=/path/to/model,target=/models/resnet50 \
-e MODEL_NAME=resnet50 \
tensorflow/serving:latest
性能测试结果
经过压力测试(使用ab工具):
- 并发数10时,平均响应时间280ms,QPS 35.7
- 并发数50时,平均响应时间420ms,QPS 119.0
- 并发数100时,平均响应时间780ms,QPS 128.2
遇到的问题
- 内存占用过高:默认配置下容器内存使用率超过80%
- CPU资源争用:多个服务同时运行时出现性能下降
- 启动时间过长:模型加载时间长达45秒
优化方案
# 调整资源配置
docker run -p 8501:8501 \
--memory=2g \
--cpus=1.5 \
--mount type=bind,source=/path/to/model,target=/models/resnet50 \
-e MODEL_NAME=resnet50 \
-e MODEL_BASE_PATH=/models \
tensorflow/serving:latest
优化后测试结果
- 并发数10时,平均响应时间240ms,QPS 41.7
- 并发数50时,平均响应时间320ms,QPS 156.2
- 并发数100时,平均响应时间480ms,QPS 208.3
结论
Docker部署确实提升了模型服务的可移植性,但需要合理配置资源限制,否则会影响整体性能。
可复现步骤
- 准备模型文件
- 拉取tensorflow/serving镜像
- 使用上述命令启动容器
- 进行压力测试
- 调整资源配置后重新测试

讨论