使用 Docker 容器化和部署机器学习模型的分步指南!
在快速发展的机器学习 (ML) 领域,无缝打包和部署模型的能力与模型本身的开发同样重要。容器化已成为这一领域的颠覆性解决方案,它提供了从本地开发环境到生产的简化路径。Docker 是容器化领域的领先平台,它提供了将 ML 应用程序封装到可移植且可扩展的容器中所需的工具。
本文将逐步讲解如何使用 Docker 将简单的机器学习应用程序容器化,让机器学习从业者和爱好者都能轻松上手。无论您是想与世界分享您的机器学习模型,还是寻求更高效的部署策略,本教程都旨在帮助您掌握使用 Docker 转变机器学习工作流程的基本技能。
Docker 和容器化
Docker是一个强大的平台,它利用容器化(一种轻量级的全机虚拟化替代方案)彻底改变了应用程序的开发和分发方式。容器化涉及将应用程序及其环境(依赖项、库和配置文件)封装到容器中,容器是一个可移植且一致的软件单元。这种方法可确保应用程序在任何基础架构(从开发人员的笔记本电脑到高计算能力的云服务器)上统一且一致地运行。
与复制整个操作系统的传统虚拟机不同,Docker 容器共享主机系统内核,这使得它们效率更高、启动速度更快、资源占用更少。Docker 简单易懂的语法隐藏了部署过程中常见的复杂性,简化了工作流程,并支持采用 DevOps 方法对软件开发流程进行生命周期管理。
教程
下面是一个分步教程,将指导您完成使用 Docker 将简单 ML 应用程序容器化的过程。
设置您的开发环境
开始之前,请确保您的机器上已安装 Docker。如果没有,您可以从Docker 网站下载。
创建一个简单的机器学习应用程序
对于本教程,让我们创建一个简单的 Python 应用程序,该应用程序使用 Scikit-learn 库在 Iris 数据集上训练模型。
创建项目目录
打开终端或命令提示符并运行以下命令:
mkdir ml-docker-app
cd ml-docker-app
设置 Python 虚拟环境(可选,但推荐)
python3 -m venv venv
source venv/bin/activate
在 Windows 上使用venv\Scripts\activate
创建 requirements.txt 文件
列出你的应用程序所需的 Python 包。对于我们的简单机器学习应用程序来说:
scikit-learn==1.0.2
pandas==1.3.5
joblib==1.1.0
创建机器学习应用程序脚本
将以下代码保存到 ml-docker-app 目录中名为 app.py 的文件中:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import joblib
# Load dataset
iris = datasets.load_iris()
X = iris.data
y = iris.target
# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# Create a Gaussian Classifier
clf = RandomForestClassifier()
# Train the model using the training sets
clf.fit(X_train, y_train)
# Predict the response for test dataset
y_pred = clf.predict(X_test)
# Model Accuracy, how often is the classifier correct?
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
# Save the trained model
joblib.dump(clf, 'iris_model.pkl')
print("Model saved!")
安装依赖项
运行以下命令来安装 requirements.txt 中列出的依赖项:
pip install -r requirements.txt
运行您的应用程序
运行您的应用程序以确保其正常工作:
python3 app.py
您应该看到模型的准确度打印到控制台,并且创建了一个名为 iris_model.pkl 的文件,其中包含训练后的模型。
该脚本提供了一个非常基本的机器学习任务的端到端流程:加载数据、预处理数据、训练模型、评估模型,然后保存训练好的模型以供将来使用。
使用 Docker 容器化应用程序
创建“Dockerfile”
在 ml-docker-app 目录的根目录中,创建一个名为的文件,Dockerfile
其内容如下:
# Use an official Python runtime as a parent image
FROM python:3.9-slim
# Set the working directory in the container
WORKDIR /usr/src/app
# Copy the current directory contents into the container at /usr/src/app
COPY . .
# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# Run app.py when the container launches
CMD ["python", "./app.py"]
构建 Docker 镜像
在终端中运行以下命令来构建 Docker 镜像:
docker build -t ml-docker-app .
运行 Docker 容器
一旦构建了映像,就在 Docker 容器中运行您的应用程序:
docker run ml-docker-app
如果一切设置正确,Docker 将在容器内运行你的 Python 脚本,你应该会看到输出到终端的模型准确性,就像你在本机运行脚本时一样。
标记并将容器推送到 DockerHub
从命令行登录 Docker Hub
拥有 Docker Hub 帐户后,您需要通过本地计算机上的命令行登录。打开终端并运行:
docker login
系统将提示您输入 Docker ID 和密码。成功登录后,您就可以将镜像推送到 Docker Hub 仓库。
标记您的 Docker 镜像
在将镜像推送到 Docker Hub 之前,必须使用您的 Docker Hub 用户名对其进行标记。如果您没有正确标记,Docker 将无法确定将镜像推送到何处。
假设您的 Docker ID 是用户名,并且您想将您的 Docker 镜像命名为 ml-docker-app,请运行:
docker tag ml-docker-app username/ml-docker-app
这会将本地 ml-docker-app 镜像标记为 username/ml-docker-app,准备将其推送到您的 Docker Hub 存储库。
将镜像推送到 Docker Hub
要将镜像推送到 Docker Hub,请使用 docker push 命令,后跟要推送的镜像的名称:
docker push username/ml-docker-app
Docker 会将镜像上传到您的 Docker Hub 存储库。
检查 Docker Hub 上推送的容器镜像
您可以转到您的 Docker Hub 存储库并查看最近推送的镜像。
就这样!您已成功将一个简单的机器学习应用程序容器化,并将其推送到 Docker Hub,并使其可以从任何地方拉取和运行。
单店数据库
正如我们所见,使用 Docker 容器化机器学习应用程序可以简化部署并确保跨环境的一致性。然而,这些应用程序的真正潜力往往需要与强大的数据管理系统结合才能发挥出来。
SingleStore是一款专为速度和可扩展性而构建的分布式 SQL 数据库,是您 Dockerized ML 应用程序的理想伴侣。它旨在以闪电般的速度处理实时分析和复杂查询,这意味着您的 ML 模型可以利用新的洞察,并根据实时数据流做出即时预测。
如果您希望使用与 Docker 容器的灵活性和性能相匹配的数据库来提升您的机器学习解决方案,请考虑将 SingleStore 集成到您的工作流程中。
立即注册 SingleStore 数据库并获得价值 600 美元的免费计算资源。
文章来源:https://dev.to/pavanbelagatti/a-step-by-step-guide-to-containerizing-and-deploying-machine-learning-models-with-docker-21al