在当今软件产业的世界中,Docker已经成为DevOps和MLOps领域中非常流行的工具。Docker赢得了众多开发者、系统管理员和工程师的青睐。本文将从Docker能为带来什么、为什么应该首先使用它开始介绍。文章分为几个部分,这样做的目的是为了尽可能简单地解释,以便让更多的人能够理解。那么,让开始吧!
在团队项目中工作时,经常需要查看彼此的代码在系统中的运行情况。相信曾经说过或者听过这样的陈述:“这段代码在机器上运行不了”或者“不知道为什么这段代码在电脑上运行不了(另一个用户)”。这些问题可以通过Docker轻松解决。
Docker是一个软件平台,允许快速构建、测试和部署应用程序。Docker将软件打包成标准化的单元,称为容器,其中包含了软件运行所需的一切,包括库、系统工具、代码和运行时。使用Docker,可以快速部署和扩展应用程序到任何环境,并确保代码能够运行。
Docker提供了将应用程序打包并运行在称为容器的松散隔离环境中的能力。隔离和安全性允许在给定的主机上同时运行许多容器。容器轻量级,包含了运行应用程序所需的一切,因此不需要依赖于主机上当前安装的内容。可以轻松地共享容器,同时确保与之共享的每个人都能得到相同的容器,并以相同的方式工作。
1. 在计算机上运行机器学习模型是一项简单的任务。但是,当想要在生产阶段将该模型用于其他系统时,这是一个复杂的任务。Docker使这项任务变得更容易、更快、更可靠。
2. 使用Docker,可以轻松地复制工作环境,以在不同的操作系统上训练和运行模型。
3. 可以轻松地部署并使用OpenShift等技术使模型可供客户使用,OpenShift是一个Kubernetes发行版。
4. 开发人员可以跟踪不同版本的容器镜像,检查谁用什么样的内容构建了一个版本,并且还可以回滚到以前的版本。
5. 即使机器学习应用程序宕机、正在修复或更新,它也不会停止运行。
6. 机器学习模型通常用单一的编程语言(如Python)编写,但应用程序肯定需要与其他用不同编程语言编写的应用程序进行交互。Docker管理所有这些交互,因为每个微服务都可以用不同的语言编写,允许可扩展性和轻松添加或删除独立服务。
让了解如何将机器学习模型部署到Docker容器中。这里,将使用一个简单的泰坦尼克号数据集机器学习模型来说明工作流程。
1. 为这项任务创建一个单独的目录,并将机器学习代码复制到该目录中。
2. 创建一个Dockerfile。什么是Dockerfile?它只是创建自己定制的Docker镜像的一种方式。这个文件包含了根据用例的逐步要求。简单地说,Dockerfile是创建Docker镜像的食谱。它包含了一些特殊的关键字,如FROM、RUN、CMD等。
Dockerfile是动态的。这意味着在任何时候,如果想改变任何停止、更新或添加任何东西,只需添加并构建。这是快速且节省时间的。
现在让了解Dockerfile中的代码。
FROM
:用于提供将在其上添加要求的基础镜像的名称。在这里,使用了Python作为容器的基础镜像。
COPY
:命令将指定的文件从本地机器复制到使用此镜像启动的容器中。
RUN
:它是一个构建时关键字,与之一起的任何程序将在构建镜像期间执行。
CMD
:它是一个运行时关键字。与之一起的任何程序将在容器启动时执行。
注意:在Docker或容器世界中,只为特定的程序或进程启动特定的容器。因此,在它完全执行完毕后,不需要环境。因此,可以得出结论,进程的生命周期=容器的生命周期。
Entrypoint和CMD都可以用于指定容器启动时要执行的命令。唯一的区别是ENTRYPOINT不允许覆盖命令。相反,添加到docker RUN命令末尾的任何内容都会被追加到命令中。
这段Python代码将在容器启动时运行。在这里,使用了Python中的joblib模块,通过该模块可以保存和加载训练好的模型。
import joblib
classifier = joblib.load('survive_prediction.pkl')
print("Enter the following details to make the predictions:- n")
pclass = int(input("Enter The Pclass:- "))
Age = int(input("Enter The Age:- "))
SibSP = int(input("Enter The SibSp:- "))
Parch = int(input("Enter The Parch:- "))
Sex = int(input("Enter The Sex:- "))
passenger_prediction = classifier.predict([[pclass,Age,SibSP,Parch,Sex]])
if passenger_prediction == 0:
print("Not Survived.")
else:
print("Survived")
现在,将从上面创建的Dockerfile构建镜像。构建镜像时,使用以下命令。
docker build -t image_name:version .
现在,终于准备好启动容器并运行机器学习模型。
docker run -it –name titanic_survivers titanic_model:v1
当运行这个命令时,会启动一个新的环境;一个全新的操作系统。因此,在幕后,docker-engine执行了许多任务,如提供网卡、存储、完整的新文件系统、RAM/CPU等。这些都是相对于操作系统的。
如果想查看容器的详细信息,可以使用以下命令。
docker info container_name
通过这个命令,可以看到容器的详细信息,比如它使用了多少存储,网络卡是什么等等。
使用CLI(命令行输入),可以向Python代码提供输入。通过命令行输入意味着可以通过键盘向容器传递输入。
希望现在对如何在Docker中部署模型/容器化模型有了一定的了解。尽管如此,只是触及了Docker提供的所有好处的表面。
它是一个软件平台,允许快速构建、测试和部署应用程序。
它提供了将应用程序打包并运行在称为容器的松散隔离环境中的能力。
在计算机上运行机器学习模型是一项简单的任务。但是,当想要在生产阶段将该模型用于其他系统时,这是一个复杂的任务。它使这项任务变得更容易、更快、更可靠。