这本面向 ML 爱好者的综合指南将带您完成使用 Docker 打包和运行 ML 模型的旅程。
在快速发展的机器学习 (ML) 领域,无缝打包和部署模型的能力与模型本身的开发一样重要。容器化已成为改变游戏规则的解决方案,它提供了从本地开发环境到生产环境的简化路径。Docker 是容器化领域的领先平台,它提供了将 ML 应用程序封装到可移植且可扩展的容器中所需的工具。
本文深入探讨了使用 Docker 容器化简单 ML 应用程序的分步过程,使 ML 从业者和爱好者都可以使用它。无论您是想与世界共享您的 ML 模型,还是寻求更高效的部署策略,本教程都旨在为您提供使用 Docker 转换 ML 工作流的基本技能。
Docker 和容器化
Docker 是一个强大的平台,它通过利用容器化(全机虚拟化的轻量级替代方案)彻底改变了应用程序的开发和分发。容器化涉及将应用程序及其环境(依赖项、库和配置文件)封装到容器中,容器是可移植且一致的软件单元。这种方法可确保应用程序在任何基础架构(从开发人员的笔记本电脑到高计算的基于云的服务器)中统一一致地运行。
与复制整个操作系统的传统虚拟机不同,Docker 容器共享主机系统的内核,使其效率更高、启动速度更快、资源密集度更低。Docker 简单明了的语法隐藏了部署过程中经常涉及的复杂性,简化了工作流程,并实现了 DevOps 方法对软件开发过程的生命周期管理。
教程
下面是一个分步教程,将指导您完成使用 Docker 容器化简单 ML 应用程序的过程。
设置开发环境
在开始之前,请确保计算机上安装了 Docker。如果没有,您可以从 Docker 网站下载它。
创建简单的机器学习应用程序
在本教程中,让我们创建一个简单的 Python 应用程序,该应用程序使用 Scikit-learn 库在 Iris 数据集上训练模型。
创建项目目录
打开终端或命令提示符并运行以下命令:
mkdir ml-docker-appbr
cd ml-docker-app
设置 Python 虚拟环境(可选,但推荐)
python3 -m venv venv
在 Windows 上使用venv\Scripts\activate
创建要求 .txt 文件
列出应用程序所需的 Python 包。对于我们简单的 ML 应用程序:
scikit-learn==1.0.2br
pandas==1.3.5
创建机器学习应用程序脚本
将以下代码保存到 ml-docker-app 目录中名为 app.py 的文件中:
from sklearn import datasetsbr
from sklearn.model_selection import train_test_splitbr
from sklearn.ensemble import RandomForestClassifierbr
from sklearn.metrics import accuracy_scorebr
import joblibbr
br
# Load datasetbr
iris = datasets.load_iris()br
X = iris.databr
y = iris.targetbr
br
# Split dataset into training set and test setbr
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)br
br
# Create a Gaussian Classifierbr
clf = RandomForestClassifier()br
br
# Train the model using the training setsbr
clf.fit(X_train, y_train)br
br
# Predict the response for test datasetbr
y_pred = clf.predict(X_test)br
br
# Model Accuracy, how often is the classifier correct?br
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")br
br
# Save the trained modelbr
joblib.dump(clf, 'iris_model.pkl')
安装依赖项
运行以下命令以安装 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 imagebr
FROM python:3.9-slimbr
br
# Set the working directory in the containerbr
WORKDIR /usr/src/appbr
br
# Copy the current directory contents into the container at /usr/src/appbr
COPY . .br
br
# Install any needed packages specified in requirements.txtbr
RUN pip install --no-cache-dir -r requirements.txtbr
br
# Run app.py when the container launches
构建 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,并使其可以从任何位置拉取和运行。
原文标题:Dockerizing ML Models: A Deployment Guide
原文链接:https://dzone.com/articles/dockerizing-ml-models-a-deployment-guide
作者:Pavan Belagatti
编译:LCR