了解如何使用KubermaticKubernetes平台部署、扩展和管理用于图像识别预测的深度学习模型。随着公司越来越多地使用人工智能(AI)、机器学习(ML)和深度学习(DL),一个关键问题出现了:如何扩大机器学习的开发规模并实现产业化?这些讨论通常集中在机器学习模型本身;但是,该模型只是完整解决方案的一部分。为了在生产环境中实现应用和规模化,模型开发过程还必须包括一个可重复的过程,可以解释开发前后的关键活动,并且可以公开部署。本文演示了如何使用KubermaticKubernetes平台部署、扩展和管理用于图像识别预测的深度学习模型。KubermaticKubernetesPlatform是一种生产级开源Kubernetes集群管理工具,可提供灵活性和自动化、与机器学习/深度学习工作流的集成以及完整的集群生命周期管理。此示例部署了用于图像识别的深度学习模型。它使用CIFAR-10数据集,其中包含属于10个类别的60,000张32x32彩色图像,并使用ApacheMXNet的Gluon和NVIDIAGPU进行加速计算。如果你想使用CIFAR-10数据集的预训练模型,你可以查看它的入门指南。用训练集中的样本对模型进行200次训练,只要训练误差一直缓慢下降,就可以保证模型不会过拟合。下图展示了训练过程:深度学习模型训练损失图训练完成后,模型训练得到的参数必须保存起来,以便后面加载:file_name="net.params"net.save_parameters(file_name)一旦你的Once模型已经训练好,可以用Flask服务器打包。下面的程序演示了如何接收请求中的图片作为参数,并在响应中返回模型的预测结果:"/predict",methods=["POST"])defpredict():ifflask.request.method=="POST":ifflask.request.files.get("img"):img=Image.open(io.BytesIO(flask.request.files["img"].read()))transform_fn=transforms.Compose([transforms.Resize(32),transforms.CenterCrop(32),transforms.ToTensor(),transforms.Normalize([0.4914,0.4822,0.4465],[0.2023,0.1994,0.2010])])img=transform_fn(nd.array(img))net=get_model('cifar_resnet20_v1',classes=10)net.load_parameters('net.params')pred=net(img.expand_dims(axis=0))class_names=['飞机','汽车','鸟','猫','鹿','狗','青蛙','马','船','卡车']ind=nd.argmax(pred,axis=1).astype('int')prediction='Theinputpictureisclassifiedas[%s],withprobability%.3f.'%(class_names[ind.asscalar()],nd.softmax(pred)[0][ind].asscalar())返回预测if__name__=='__main__':app.run(host='0.0.0.0')容器化模型在将模型部署到Kubernetes之前,需要先安装Docker并使用你的模型创建镜像下载安装并启动Docker:sudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm2sudoyum-config-manager--add-reposudoyuminstalldocker-cesudosystemctlstartdocker创建一个用于管理代码和依赖项的文件夹:mkdirkubermatic-dlcdkubermatic-dl创建一个requirements.txt文件来管理代码运行时需要的所有依赖:flaskgluoncvmatplotlibmxnetrequestsPillow创建一个Dockerfile,Docker会根据这个文件创建一个镜像:FROMpython:3.6WORKDIR/appCOPYrequirements.txt/appRUNpipinstall-r./requirements.txtCOPYapp.py/appCMD["python","app.py"]这个Dockerfile可以分为th稀土零件。首先,Docker会下载Python的基础镜像。然后Docker使用Python包管理工具pip安装requirements.txt中记录的包。最后,Docker将通过执行pythonapp.py来运行您的脚本。构建一个Docker容器:sudodockerbuild-tkubermatic-dl:latest。此命令使用kubermatic-dl映像为当前工作目录中的代码创建一个容器。使用sudodockerrun-d-p5000:5000kubermatic-dl命令检查您的容器是否在您的主机上正常运行。使用sudodockerps-a命令查看本地容器的运行状态:查看容器的运行状态将模型上传到DockerHub在将模型部署到Kubernetes之前,您的镜像首先需要公开可用。您可以通过将模型上传到DockerHub来公开您的模型。(如果没有DockerHub账号,需要先创建一个)在终端登录DockerHub账号:sudodockerlogin给你的镜像打上标签,这样你的模型上传到DockerHub后也可以有版本信息:sudodockertag/sudodockerpush/标记镜像使用sudodockerimages命令来检查您的图像ID。要将模型部署到Kubernetes集群,首先在KubermaticKubernetes平台中创建一个项目,然后按照快速入门创建Kubernetes集群。创建一个Kubernetes集群下载用于访问您的集群的kubeconfig,将其放在下载目录中,并记得设置适当的环境变量以便您的环境可以找到它:Kubernetes集群示例使用kubectl命令查看集群信息,例如,您可以使用命令kubectlcluster-info查看你的集群中的kube-system是否正常启动。查看集群信息为了在集群中运行容器,需要创建一个部署配置文件(deployment.yaml),然后运行apply命令将其应用到集群中:apiVersion:apps/v1kind:Deploymentmetadata:name:kubermatic-dl-deploymentspec:selector:matchLabels:app:kubermatic-dlreplicas:3template:metadata:labels:app:kubermatic-dlspec:containers:-name:kubermatic-dlimage:kubermatic00/kubermatic-dl:latestimagePullPolicy:Alwaysports:-containerPort:8080kubectlapply-f部署。yaml`为了向公共网络环境开放您的部署,您需要一个可以为您的容器创建外部可访问的IP地址的服务:kubectlexposedeploymentkubermatic-dl-deployment--type=LoadBalancer--port80--target-port5000`is你几乎完成!首先查看你部署的服务的状态,然后通过IP请求你的图像识别API:kubectlgetservice获取请求的图像识别API的IP地址最后,根据你的外部IP使用下面两张图片对你的图像识别服务进行测试:马DogTestAPI总结在本教程中,您可以创建一个深度学习模型并使用Flask提供RESTAPI服务。它描述了如何将您的应用程序放入Docker容器中,如何将此映像上传到DockerHub,以及如何使用Kubernetes部署您的服务。只需几个简单的命令,您就可以使用KubermaticKubernetes平台部署应用程序并将服务暴露给其他人使用。