审校 | 重楼
部署机器学习模型与开发一样重要,特别是在确保不同环境之间的一致性时。软件版本或配置方面的变化/差异可能导致不一致的行为或意外错误。Docker将应用程序连同其依赖项封装到一个容器中,以确保它在任何地方都能一样正常运行。它让你可以简化部署过程,并尽可能减少错误。
Docker简述
Docker是一种开源平台,它使开发人员能够将应用程序连同其依赖项打包到一个容器中。这个容器是轻量级便携式盒子,封装了应用程序运行所需的所有必要内容(比如代码、库和设置)。容器将应用程序与操作系统或配置方面的差异隔离开来,从而确保应用程序在各种环境中一致地运行。此外,利用Docker可以简化团队成员之间的协作,便于从开发环境更平滑地过渡到生产环境。
部署机器学习模型分步指南
不妨看看如何使用Docker部署机器学习模型。
1. 搭建环境
在开始之前,确保你已经在系统上安装了Docker。你可以从Docker官方网站下载。
2. 构建机器学习模型
你需要准备好部署一个经过训练的机器学习模型。在本教程中,我们使用scikit-learn和Python举一个简单的示例。
model.py:
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import pickle
# Train and save the model
def train_model():
# Load dataset
data = load_iris()
X, y = data.data, data.target
# Train model
model = RandomForestClassifier()
model.fit(X, y)
# Save the trained model
with open('model.pkl', 'wb') as f:
pickle.dump(model, f)
print("Model trained and saved as model.pkl")
# Load model and make a prediction using predefined test data
def predict():
# Load the saved model
with open('model.pkl', 'rb') as f:
model = pickle.load(f)
# Test data (sample input for prediction)
test_data = [5.1, 3.5, 1.4, 0.2] # Example features
prediction = model.predict([test_data])
print(f"Prediction for {test_data}: {int(prediction[0])}")
if __name__ == '__main__':
train_model()
predict()
上面的示例在一个脚本中结合了模型训练、保存和预测。train_model()函数使用Iris数据集训练一个简单模型,并将其保存为“model.pkl”。predict()函数加载保存的模型,并使用预定义的测试数据进行预测。
3. 创建requirements.txt文件
在该文件中列出你的应用程序需要的所有Python依赖项。在本例中:
requirements.txt:
scikit-learn
4. 创建Dockerfile
Dockerfile是一个脚本,含有用于构建Docker镜像的一系列指令。
下面是我们应用程序的简单Dockerfile。确保该Dockerfile创建时没有扩展名,因为它允许Docker在构建镜像时不需要任何额外的参数就能识别它。
Dockerfile:
# Use a base image with Python
FROM python:3.11-slim
# Set the working directory in the container
WORKDIR /app
# Copy the necessary files into the container
COPY requirements.txt requirements.txt
COPY model.py model.py
# Install the required Python libraries
RUN pip install -r requirements.txt
# Run the Python script when the container starts
CMD ["python", "model.py"]
现在不妨了解Dockerfile中每个关键字的含义。
- FROM:指定了Dockerfile的基本镜像。我们在本例中使用了Python 3.11-slim。
- WORKDIR:将工作目录设置为特定的路径。此后,所有命令将相对该目录加以执行。
- COPY:这个命令将内容从本地机器复制到Docker容器。这里,它复制了requirements.txt和model.py文件。
- RUN:它是镜像的环境中的shell内执行命令。这里,它在安装requirements.txt文件中列出了所有项目依赖项。
- CMD:该命令指定容器启动时运行的默认命令。在本例中,它使用Python运行model.py脚本。
5. 构建Docker镜像
打开命令提示或终端,进入到Dockerfile所在的工作目录,然后运行以下命令:
docker build -t ml-model
这个命令使用当前目录构建一个名为ml-model的Docker镜像。
6. 运行Docker容器
一旦构建了Docker镜像,我们终于准备好了运行容器。运行如下命令:
docker run ml-model
输出如下:
Model trained and saved as model.pkl
Prediction for [5.1, 3.5, 1.4, 0.2]: 0
7. 标记容器,并将容器推送到DockerHub
Docker Hub是Docker镜像的存储库,方便用户在团队或生产环境之间共享、版本控制和分发容器。
在Docker Hub上创建一个帐户。创建完毕后,运行以下命令通过终端登录帐户。
docker login
你必须用用户名标记Docker镜像,以便它知道将镜像推送到哪里。替换你的用户名,执行以下命令:
docker tag ml-model yourdockerhubusername/ml-model
一旦镜像已标记完毕,你就可以使用以下命令将镜像推送到Docker Hub。
docker push yourdockerhubusername/ml-model
现在谁都可以拉取并运行你的Docker镜像了,只需运行以下命令:
docker pull yourdockerhubusername/ml-model
docker run yourdockerhubusername/ml-model
结论
使用Docker部署机器学习模型保证跨不同平台拥有一致的环境和依赖项,从而使部署过程更顺畅、更具可扩展性。本教程探讨了使用Docker构建、打包和部署机器学习模型的步骤,强调了其简单性。
有了Docker,模型部署来得更直接简单,从而不需要搭建复杂环境。
原文:Step-by-Step Guide to Deploying ML Models with Docker,作者:Kanwal Mehreen