趋近智
一旦你训练好了一个机器学习 (machine learning)模型,就需要一种方法让容器化应用能够访问它,无论是为了进一步的训练、评估还是推理 (inference)。如本章前面所述,容器的文件系统通常是临时的。简单地将模型文件保存在运行中的容器内,通常意味着当它停止时文件就会丢失。
持久化模型并在运行时使其可用,需要从两种主要策略中选择,每种策略都对你的工作流程、镜像大小和部署过程有不同的影响:
我们来分析每种方法的特点、优点和缺点。
使用 Dockerfile 中的 COPY 或 ADD 等指令,可以在构建过程中将模型文件直接整合到 Docker 镜像中。
# Dockerfile 示例片段
FROM python:3.9-slim
WORKDIR /app
# 复制应用程序代码
COPY ./app /app
# 将训练好的模型文件复制到镜像中
COPY ./models/sentiment_model.pkl /app/models/sentiment_model.pkl
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 运行应用程序的命令(应用程序从 /app/models/ 加载模型)
CMD ["python", "serve.py"]
在这种情况下,sentiment_model.pkl 文件成为镜像层的一部分。
优点:
缺点:
何时使用: 这种方法通常适用于:
这种替代策略将模型文件与 Docker 镜像分离。镜像仅包含应用程序代码及其依赖项。在运行时,模型文件通过 Docker 卷(用于生产/持久存储)或绑定挂载(通常用于开发)在容器内部可用。
应用程序代码被设计为从容器内的特定路径加载模型,该路径对应于卷或绑定挂载的挂载点。
# Dockerfile 示例片段(模型未复制)
FROM python:3.9-slim
WORKDIR /app
# 复制应用程序代码
COPY ./app /app
# 模型稍后将挂载到 /app/models
# 如果应用需要,确保目录存在
RUN mkdir -p /app/models
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 运行应用程序的命令
# 假设模型将在 /app/models/sentiment_model.pkl 可用
CMD ["python", "serve.py"]
要运行此命令,你需要使用带有 -v 标志的 docker run:
# 使用名为 'ml_models' 的 Docker 卷
docker run -d -p 8000:8000 \
-v ml_models:/app/models \
my_ml_app:latest
# 使用绑定挂载(挂载本地 ./models 目录)
docker run -d -p 8000:8000 \
-v $(pwd)/models:/app/models \
my_ml_app:latest
优点:
缺点:
何时使用: 这种方法通常更适合于:
将模型打包到镜像内部与通过卷加载模型之间的决策需要权衡。考虑以下因素:
模型打包策略比较:将模型嵌入镜像中与通过卷挂载模型。
没有唯一的“最佳”答案;最佳选择很大程度上取决于你的具体应用、模型特性和操作环境。通常,团队为了简单起见会从嵌入模型开始,然后随着模型变大或更新频率与应用程序代码不同步时,再转为使用卷。理解这些权衡可以帮助你为容器化的机器学习 (machine learning)模型选择最有效的数据管理策略。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•