了解如何使用 Kubermatic Kubernetes 平台来部署,扩展与管理图像识别预测的深度学习模型。
伴随着企业增加了对人工智能,机器学习与深度学习的使用,出现了一个关键问题:如何将机器学习的开发进行规模化与产业化这些讨论经常聚焦于机器学习模型本身,可是,模型仅仅只是完整解决方案的其中一环为了达到生产环境的应用和规模,模型的开发过程必须还包括一个可以说明开发前后关键活动以及可公用部署的可重复过程
本文演示了如何使用 Kubermatic Kubernetes 平台 对图像识别预测的深度学习模型进行部署,扩展与管理。
Kubermatic Kubernetes 平台是一个生产级的开源 Kubernetes 集群管理工具,提供灵活性和自动化,与机器学习/深度学习工作流程整合,具有完整的集群生命周期管理。
开始
这个例子部署了一个用于图像识别的深度学习模型它使用了 CIFAR—10 数据集,包含了 60,000 张分属 10 个类别的 32x32 彩色图,同时使用了 Apache MXNet 的 Gluon 与 NVIDIA GPU 进行加速计算如果你希望使用 CIFAR—10 数据集的预训练模型,可以查阅其 入门指南
使用训练集中的样本对模型训练 200 次,只要训练误差保持缓慢减少,就可以保证模型不会过拟合。下方图展示了训练的过程:
深度学习模型训练 loss 图
训练结束后,必须保存模型训练所得到的参数,以便稍后可以加载它们:
file_name="net.params"net.save_parameters
在将模型部署到 Kubernetes 前,你需要先安装 Docker 并使用你的模型创建一个镜像。
下载,安装并启动 Docker:
创建一个你用来管理代码与依赖的文件夹:
mkdirkubermatic—dlcdkubermatic—dl
创建 requirements.txt 文件管理代码运行时需要的所有依赖:
flaskgluoncvmatplotlibmxnetrequestsPillow
创建 Dockerfile,Docker 将根据这个文件创建镜像:
FROMpython:3.6WORKDIR/appCOPYrequirements.txt/appRUNpipinstall—r./requirements.txtCOPYapp.py/appCMD
这个 Dockerfile 主要可以分为三个部分首先,Docker 会下载 Python 的基础镜像然后,Docker 会使用 Python 的包管理工具 pip 安装 requirements.txt 记录的包最后,Docker 会通过执行 python app.py 来运行你的脚本
构建 Docker 容器:
sudodockerbuild—tkubermatic—dl:latest.
这条命令使用 kubermatic—dl 镜像为你当前工作目录的代码创建了一个容器。
使用
sudodockerrun—d—p5000:5000kubermatic—dl
命令检查你的容器可以在你的主机上正常运行。
使用
sudodockerps—a
命令查看你本地容器的运行状态:
将你的模型上传到 Docker Hub
在向 Kubernetes 上部署模型前,你的镜像首先需要是公开可用的你可以通过将你的模型上传到 Docker Hub 来将它公开
在终端中登录 Docker Hub 账号:
sudodockerlogin
给你的镜像打上标签,这样你的模型上传到 Docker Hub 后也能拥有版本信息:
sudodockertag/sudodockerpush/
使用
sudodockerimages
命令检查你的镜像的 ID。
部署你的模型到 Kubernetes 集群
首先在 Kubermatic Kubernetes 平台创建一个项目, 然后根据 快速开始 创建一个 Kubernetes 集群。
下载用于访问你的集群的 kubeconfig,将它放置在下载目录中,并记得设置合适的环境变量,使得你的环境能找到它:
使用 kubectl 命令检查集群信息,例如,需要检查 kube—system 是否在你的集群正常启动了就可以使用命令 kubectl cluster—info
查看集群信息
为了在集群中运行容器,你需要创建一个部署用的配置文件,再运行 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:8080 kubectlapply—fdeployment.yaml`
为了将你的部署开放到公网环境,你需要一个能够给你的容器创建外部可达 IP 地址的服务:
kubectlexposedeploymentkubermatic—dl—deployment——type=LoadBalancer——port80——target—port5000`
就快大功告成了!首先检查你布署的服务的状态,然后通过 IP 请求的你图像识别 API:
kubectlgetservice
获取请求图像识别 API 的 IP 地址
马
狗
测试 API 总结
在这篇教程中,你可以创建一个深度学习模型,并且使用 Flask 提供 REST API 服务它介绍了如何将应用放在 Docker 容器中,如何将这个镜像上传到 Docker Hub 中,以及如何使用 Kubernetes 部署你的服务只需几个简单的命令,你就可以使用 Kubermatic Kubernetes 平台部署该应用程序,并且开放服务给别人使用