高性能-极速-应用Docker简化机器学习运行程序的部署和可扩展性-便捷 (高性能模式软件)
译者|李睿
审校|重楼
近年来,机器学习的运行产生了爆炸式增长,造成对强健、可扩展和高效部署方法的需求极速增长。由于训练和服务环境之间的差异或扩展规模的艰难等要素,传统方法通常须要协助经营机器学习模型。
本文提出了一种经常使用的技术。Docker是一个开源平台,旨在智能化运行程序的部署、扩展和治理,以此来处置这些应战。所提出的方法将机器学习类型及其环境封装到一个规范化的Docker容器单元中。Docker容器提供了许多好处,包括开发和消费环境之间的分歧性、易于扩展以及部署的便捷性。
本文对Docker及其在机器学习模型部署中的作用启动了深化讨论,并对经常使用Docker部署机器学习模型启动实践展示,从创立Dockerfile到经常使用DockerSwarm扩展模型,一切这些都以相关代码片段为例。此外,还引见Docker在继续集成(CI)/继续交付(CD)管道中的集成,最终得出经常使用Docker启动高效机器学习模型部署的论断和最佳通常。
Docker是什么?
作为一个平台,Docker在轻量级、可移植的容器中智能化软件运行程序的部署、扩展和经营。Docker的基础围绕着容器化的概念。这种虚构化方法准许将软件及其整个运转时环境打包成一个用于软件开发的规范化单元。
Docker容器封装了运行程序运转所需的一切(包括库、系统工具、代码和运转时),并确保它在不同的计算环境中体现分歧。这有助于极速牢靠地构建、测试和部署运行程序,使Docker成为软件开发和经营(DevOps)的关键工具。
当谈到机器学习运行程序时,Docker带来了几个长处。Docker的容器化个性确保了机器学习模型的训练和服务环境之间的分歧性,降落了由于环境差异而遇到差异的危险。Docker还简化了扩展环节,准许在多个主机上轻松部署机器学习模型的多个实例。这些个性具备清楚简化机器学习模型部署和降落相关经营复杂性的后劲。
为什么要将机器学习运行程序Docker化?
在机器学习运行程序的背景下,Docker提供了许多好处,每一个都对经营效率和模型性能做出了严重奉献。
首先,Docker容器提供的分歧性环境确保了开发、测试和消费阶段之间的差异最小化。这种分歧性消弭了它上班在我的机器上的疑问,使其成为部署机器学习模型的首选,机器学习模型对其经营环境的变动特意敏感。
其次,Docker善于于促成可扩展性。机器学习运行程序通常须要运转同一模型的多个实例来处置少量数据或高恳求率。Docker经过准许极速高效地部署多个容器实例来成功水平扩展,使其成为扩展机器学习模型的有效处置打算。
最后,Docker容器是独立运转的,这象征着它们有自己的运转时环境,包括系统库和性能文件。这种隔离提供了额外的安保层,确保每个机器学习模型在受控和安保的环境中运转。Docker提供的分歧性、可扩展性和隔离性使其成为部署机器学习运行程序的具备吸引力的平台。
为机器学习设置Docker
以下重点引见在机器学习运行程序中经常使用Docker所需的初始设置。由于操作系统不同,Docker的装置环节略有不同。关于发行版,Docker通常经过命令行界面装置,而关于和OS,DockerDesktop版本可用。在每种状况下,Docker网站都提供了便捷易懂的具体装置说明。经过从DockerHub(一个基于云的注册表服务,准许开发人员共享运行程序或库)中提取Docker镜像,装置成功。作为示例,可以经常使用以下命令提取最新的/target=_blankclass=infotextkey>Python图像以用于机器学习运行程序:
Shelldockerpullpython:3.8-slim-buster
随后,从提取的映像运转Docker容器触及Dockerrun命令。例如,假设须要交互式Pythonshell,则可以经常使用以下命令:
Shelldockerrun-itpython:3.8-slim-buster/bin/bash
该命令启动一个带有交互式终端(-it)的Docker容器,并在Python容器中提供一个shell(/bin/bash)。经过遵照这个环节,Docker可以有效地协助部署机器学习模型。
为便捷的机器学习模型创立Dockerfile
Docker操作便捷性的外围是Dockerfile,它是一个文本文档,蕴含了组装Docker映像所需的一切命令。用户可以经过Docker命令行口头Dockerfile来智能创立镜像。
Dockerfile由一组指令和参数组成,这些指令和参数以延续的行陈列。指令是Docker命令,例如FROM(指定基本镜像)、RUN(口头命令)、COPY(将文件从主机复制到Docker镜像)和CMD(为口头容器提供自动值)。
以经常使用Scikitlearn的线性回归算法构建的一个便捷的机器学习模型为例。此类运行程序的Dockerfile或许如下所示:
Dockerfile#UseanofficialPythonruntimeasaparentimageFROMpython:3.8-slim-buster#Settheworkingdirectoryinthecontnerto/WORKDIR/app#Copythecurrentdirectorycontentsintothecontainerat/appADD./app#Installanyneededpackagesspecifiedinrequirements.txtRUNpipinstall--no-cache-dir-rrequirements.txt#Makeport80availabletotheworldoutsidethiscontainerEXPOSE80#Runapp.pywhenthecontainerlaunchesCMD["python","app.py"]
这个Dockerfile中提到的requirements.txt文件列出了机器学习模型的一切Python依赖项,例如Scikit-learn、Pandas和Flask。另一方面,app.py脚本蕴含加载经过训练的模型并将其用作Web运行程序的代码。
经过在Dockerfile中定义性能和依赖相关,可以创立一个映像,其中蕴含机器学习模型及其口头所需的运转时环境,从而促成分歧的部署。
构建和测试Docker镜像
在成功创立Dockerfile之后,接上去的阶段包括构建Docker映像。经过口头Dockerbuild命令构建Docker镜像,而后口头蕴含Docker文件的目录。-t标志用指定的称号标志图像。这样一个命令的实例是:
Shelldockerbuild-tml_model_image:1.0
在这里,ml_model_image:1.0是调配给图像的称号和版本,而.示意Dockerfile驻留在以后目录中。
在构建Docker镜像之后,上方的义务触及从该镜像启动Docker容器,从而准许测试机器学习模型的性能。Docker的run命令可以协助成功这个义务:
Shelldockerrun-p4000:80ml_model_image:1.0
在这个命令中,-p标志将主机的端口4000映射到容器的端口80(在Dockerfile中定义)。因此,机器学习模型可以经过主机的4000端口访问。
测试模型须要向Docker容器中的Flask运行程序地下的端点发送一个恳求。例如,假设模型基于POST恳求发送的数据提供预测,curl命令可以促成这一点:
Shellcurl-d'{"data":[1,2,3,4]}'-H'Content-Type:application/json'http://localhost:4000/predict
该方法确保了从Dockerfile创立到在Docker容器中测试机器学习模型的无缝流程。
经常使用Docker部署机器学习模型
机器学习模型的部署通常触及将模型地下为可经过互联网访问的服务。成功这一指标的规范方法是经常使用Web框架(如Flask)将模型作为RESTAPI提供服务。
思考一个Flask运行程序封装机器学习模型的例子。以下的Python脚本展示了如何将模型作为RESTAPI端点地下:
PythonfromflaskimportFlask,requestfromsklearn.externalsimportjoblibapp=Flask(__name__)model=joblib.load('model.pkl')@app.route('/predict',methods=['POST'])defpredict():>Shellcurl-d'{"features":[1,2,3,4]}'-H'Content-Type:application/json'http://localhost:4000/predict
这个实例展示了Docker如何将机器学习模型部署为可扩展和可访问的服务。
用DockerSwarm扩展器学习模型
随着机器学习运行程序的范围和用户基础的增长,扩展才干变得越来越关键。DockerSwarm为Docker提供了一个本地集群和编排处置打算,准许多个Docker主机变成一个虚构主机。因此,DockerSwarm可以用于跨多台机器治理和扩展部署的机器学习模型。
启动DockerSwarm是一个便捷的环节,经过口头DockerSwarminit命令开局。这个命令将以后机器初始化为DockerSwarm治理器:
Shelldockerswarminit--advertise-addr$(hostname-i)
在这个命令中,--advertise-addr标志指定上班节点可以抵达Swarm治理器的地址。hostname-i命令检索以后机器的IP地址。
在初始化Swarm之后,机器学习模型可以经常使用Docker服务跨Swarm部署。该服务是用dockerservicecreate命令创立的,其中像replicas这样的标志可以选择要运转的容器实例的数量:
Shelldockerservicecreate--replicas3-p4000:80--nameml_serviceml_model_image:1.0
在这个命令中,--replica3确保容器的三个实例在Swarm中运转,-p4000:80将Swarm的端口4000映射到容器的端口80,--nameml_service为服务调配一个称号。
因此,经过成功DockerSwarm,部署的机器学习模型可以有效地跨多个Docker主机扩展,从而增强其可用性和性能。
驳回Docker的继续集成(CI)/继续交付(CD)
继续集成(CI)/继续交付(CD)是现代软件开发的一个关键方面,促成智能化测试和部署,以确保软件颁布周期的分歧性和速度。Docker的可移植性很适宜继续集成(CI)/继续交付(CD)管道,由于Docker映像可以在管道中的不同阶段启动构建、测试和部署。
一个将Docker集成到继续集成(CI)/继续交付(CD)管道中的例子可以用Jenkins管道来说明。管道在Jenkinsfile中定义,看起来像这样:
Groovypipeline{agentanystages{stage('Build'){steps{script{sh'dockerbuild-tml_model_image:1.0.'}}}stage('Test'){steps{script{sh'dockerrun-p4000:80ml_model_image:1.0'sh'curl-d'{"features":[1,2,3,4]}'-H'Content-Type:application/json'http://localhost:4000/predict'}}}stage('Deploy'){steps{script{sh'dockerservicecreate--replicas3-p4000:80--nameml_serviceml_model_image:1.0'}}}}}
在这个Jenkinsfile中,构建(Build)阶段构建Docker镜像,测试(Test)阶段运转Docker容器并向机器学习模型发送恳求以验证其性能,部署(Deploy)阶段创立Docker服务并跨DockerSwarm启动扩展。
因此,借助Docker,继续集成(CI)/继续交付(CD)管道可以成功牢靠高效的机器学习模型部署。
论断和最佳通常
最后,本文强调了Docker在简化机器学习模型部署方面的效用。Docker能够将模型及其依赖相关封装在一个独立的、分歧的、轻量级的环境中,这使得Docker成为机器学习从业者的一个弱小工具。经过DockerSwarm和它与继续集成(CI)/继续交付(CD)管道的无缝集成,Docker在跨多台机器扩展机器学习模型的后劲进一步增强了它的价值。
但是,为了从Docker中失掉最大的价值,介绍以下最佳通常:
经过保持这些指南并充沛应用Docker的性能,在部署机器学习模型的复杂性中导航变得愈加可行,从而放慢了从开发到消费的门路。
参考文献
1.DockerOfficialDocumentation.Docker,Inc.
2.DockerforMachineLearning.O'ReillyMedia,Inc.
3.ContinuousIntegrationwithDocker.JenkinsDocumentation.
4.Scikit-learn:MachineLearninginPython.Scikit-learnDevelopers.
5.Kalade,S.,Crockett,L.H.,&Stewart,R.(2018).UsingSequencetoSequenceLearningforDigitalBPSKandQPSKDemodulation.
6.Blog—Page3—LiranTal.
7.IntroductiontotheDockerfilePartII|byHakim|Medium.
8.SpringBoot2.2with13CRUDRESTAPITutorial:UsingJPAHibernate&|Techiediaries
原文题目: AIProwess:HarnessingDockerforStreamlinedDeploymentandScalabilityofMachineLearningApplications ,作者:RudrenduKumarPaulBidyutSarkar
10. Docker 安装与配置
Docker是一个开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像、 Dockerfile等;Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版Docker引擎上。使用沙箱机制运行程序, 程序之间相互隔离;
容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的一个独立的进程,不占用其他任何可执行文件的内存,非常轻量、高效、快速。
虚拟机运行的是一个完成的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。
参考:
Linux版本CentOS7
使用加速器可以提升获取Docker官方镜像的速度,下面使用 阿里云镜像 进行加速。 通过修改daemon配置文件 /etc/docker/ 来使用加速器
Docker 守护进程绑定在 Unix socket 而不是 TCP 端口。默认情况下 Unix socket 归属于 root 用户,其他用户只能通过 sudo 命令访问。所以 Docker 守护进程总是以 root 用户来运行。
如果你不希望每次运行 docker 命令时在前面加上 sudo,你可以创建一个 docker 用户组并把用户加进去。当 Docker 守护进程启动时,会创建一个 Unix socket 供 docker 用户组成员访问
创建 docker 用户组并添加你的用户
什么是 DockerHub 以及为什么它很重要?DockerHub 是一个由 Docker 公司运行和管理的基于云的存储库。它是一个在线存储库,Docker 镜像可以由其他用户发布和使用。 有两种库:公共存储库和私有存储库 。如果你是一家公司,你可以在你自己的组织内拥有一个私有存储库,而公共镜像可以被任何人使用。
镜像层和容器层
Docker 服务端是Docker 所有后台服务的统称 。其中dockerd 是一个非常重要的后台管理进程,它负责响应和处理来自Docker 客户端的请求,然后将客户端的请求转化为Docker 的具体操作。
例如:镜像、容器、网络和挂载卷等具体对象的操作和管理。
Docker 从诞生到现在,服务端经历了多次架构重构。起初,服务端的组件是全部集成在docker 二进制里。但是从 1.11 版本开始, dockerd 已经成了独立的二进制,此时的容器也不是直接由dockerd 来启动了,而是集成了containerd、runC 等多个组件。
虽然 Docker 的架构在不停重构,但是各个模块的基本功能和定位并没有变化。它和一般的 C/S 架构系统一样,Docker 服务端模块负责和 Docker 客户端交互,并管理Docker 的容器、镜像、网络等资源。
Docker 有两个至关重要的组件: runC和containerd。 runC 是Docker 官方按照OCI 容器运行时标准的一个实现。通俗地讲,runC 是一个用来运行容器的轻量级工具,是真正用来运行容器的。
containerd 是Docker 服务端的一个核心组件,它是从dockerd 中剥离出来的 ,它的诞生完全遵循OCI 标准,是容器标准化后的产物。containerd通过containerd-shim 启动并管理runC,可以说containerd真正管理了容器的生命周期。
1. 容器中长期运行 程序 有两种方式:
2. 容器 开启和停止 程序 有两种方式
3. 进入容器 有2种方法
想要web部署在互联网上 或者 在Web上访问 应用;
个人电脑处于 私网 中; IP地址处于 IPV4 和 IPV6;
安装appium
排错,困难
测试adb
改变TCPIP连接方式
查看appium运行日志 容器端口号为 4723
开启nginx,就可以在web访问 192.168.0.100;
Dockerfile其实可以看做一个命令集 。每行均为一条命令。每行的第一个单词,就是命令command。后面的字符串是该命令所要接收的参数。比如ENTRYPOINT /bin/bash。ENTRYPOINT命令的作用就是将后面的参数设置为镜像的entrypoint。至于现有命令的含义,这里不再详述。DockOne上有很多的介绍。
FROM 指令用于指定其后构建新镜像所使用的基础镜像。FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docker 将会基于该镜像构建新镜像,FROM 后的命令也会基于这个基础镜像。
在镜像的构建过程中执行特定的命令,并生成一个中间镜像。格式:
最多127层,不是写shell ;
Docker是什么
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括Vms、 bare metal、OpenStack集群和其他的基础应用平台。
Docker可以干什么?应用场景:
应用的自动化打包和发布;
2.自动化测试和持续集成、发布;
3.在服务型环境中部署和调整数据库或其他的后台应用;
4.从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
使用docker有什么好处?
1.简单易操作,简化了以往复杂的应用程序安装步骤,使用docker会变得非常简便。
2.可兼容多种应用,Web应用、后台应用、数据库应用、大数据应用比如Hadoop集群、消息队列等等都可以打包成镜像部署。
结合云可以做到高性能低价格。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。