# 如何使用 Kubernetes 轻松部署深度学习模型
英文原文:[Deploy Your First Deep Learning Model On Kubernetes With Python, Keras, Flask, and Docker](https://medium.com/analytics-vidhya/deploy-your-first-deep-learning-model-on-kubernetes-with-python-keras-flask-and-docker-575dc07d9e76)
作者 Gus Cavanaugh,[机器之心](https://www.jiqizhixin.com/articles/101403)翻译,2018/10/14
=================================
![](https://image.jiqizhixin.com/uploads/editor/dfabee89-a782-4dbf-8552-9efffa2d078d/1539491240778.png)
**这简直太容易了,连你的老板都能做到!**
本文展示了如何用 Keras 构建**深度学习模型**的简单示例,将其作为一个用 Flask 实现的 REST API,并使用 Docker 和 Kubernetes 进行部署。本文给出的并不是一个鲁棒性很好的能够用于生产的示例,它只是为那些听说过 Kubernetes 但没有动手尝试过的人编写的快速上手指南。
为此,我在这个过程的每个步骤中都使用了 Google Cloud。这样做的原因很简单——我并不想在我的 Windows 10 家用笔记本上安装 Docker 和 Kubernetes。而谷歌云能很好地支持这二者的工作。此外,你可以准确地按照我接下来所使用的规范流程进行操作,这可以帮助你更容易地复现我的步骤。而且,你也不用担心实践这篇文章的成本。谷歌为新账户提供了几百美金的免费额度,而实现本文示例所需的费用只不过是九牛一毛。
**为什么要将 Kubernetes 用于机器学习和数据科学?**
Kubernetes 及其从属的流行概念「云原生」(cloud-native)正席卷全球。别担心——你有所怀疑是对的。我们都见证过铺天盖地的「人工智能」、「大数据」、「云计算」等术语的技术泡沫。Kubernetes 是否也会发生相同的情况,还有待观察。
我的动机很简单,我希望部署、扩展、管理一个能够提供预测能力的 REST API。在下文中,你会看到 Kubernetes 会使这一切非常容易。
让我们开始吧!
## **大纲**
1\. 使用 Google Cloud 创建你的环境。
2\. 使用 Keras、Flask 和 Docker 提供深度学习模型接口。
3\. 使用 Kubernetes 部署上述模型。
4\. 享受你所掌握的新知识吧!
**步骤 1:使用 Google Cloud 创建你的环境**
我在谷歌计算引擎上使用一个小型虚拟机来构建、部署、docker 化深度学习模型。你并不一定非要这么做。我曾试过在我的 Windows 10 笔记本上安装最新版本的 Docker CE(Community Edition),但是失败了。因此我决定直接使用免费的 Google Cloud 额度,这比弄清如何安装 Docker 能更好地利用我的时间。你可以选择是否要这样做。
![](https://image.jiqizhixin.com/uploads/editor/aaf7a48f-8bda-4863-9457-9a3eb0e44713/1539491241116.png)
要想启动一台 Google Cloud 虚拟机,你可以打开屏幕左侧的工具栏。选择 Compute Engine。接着,选择「Create Instance」。如下图所示,我已经拥有了一个正在工作的虚拟机实例。
![](https://image.jiqizhixin.com/uploads/editor/f97afeed-4115-4872-b000-cc75f9dd7c82/1539491240934.png)
下一步,你需要选择你想要使用的计算规模。默认的(最便宜的)机器设置也可以很好地工作,但是考虑到我们最多只需要使用这个虚拟机大约 1 小时,我选择了内存为 15GB 的 4vCPU 配置。
![](https://image.jiqizhixin.com/uploads/editor/d69592c7-5121-4dfb-8839-b23c73aed144/1539491241218.png)
接下来,我将选择要使用的操作系统和磁盘空间。选择「Boot Disk」来编辑默认值。这里我选择了 Centos 7 作为操作系统,并将磁盘的大小从 10GB 增加到了 100GB。实际上,并不一定要像我一样选择 Centos 操作系统。但是,我建议将磁盘大小增加到 10GB 以上,因为我们创建的每个 Docker 容器的大小都大约为 1GB。
![](https://image.jiqizhixin.com/uploads/editor/6c795c97-cd1d-43fa-b63c-1d3dce4473b5/1539491241332.png)
创建虚拟机的最后一步是设置防火墙允许使用 HTTP/S。诚然,我并不知道是否需要这个步骤。在部署 Kubernetes 之前,我将展示如何编辑防火墙设置以在虚拟机上测试我们的 API。因此,仅仅查看这些对话框是不够的,我们还有更多的工作要做。以前我并没有查看这些对话框,现在我重新试试按照这个教程去做。
![](https://image.jiqizhixin.com/uploads/editor/bf2457a2-1211-45f2-92a0-9a25afa6ac7d/1539491241013.png)
我并不确定是否需要此步骤。
现在单击「Creat」按钮。很好,困难的部分基本上已经完成了。
![](https://image.jiqizhixin.com/uploads/editor/88705b7a-e929-4476-86b3-4a994d711ad8/1539491241414.png)
**步骤 2:使用 Keras 构建深度学习模型**
现在,让我们使用 SSH 连接到虚拟机,并开始构建模型。最简单的方法是单击下图所示的虚拟机旁边的 SSH 图标。这个操作会在你的浏览器中打开一个终端。
![](https://image.jiqizhixin.com/uploads/editor/9d8b3be5-5ad2-448f-9d18-a97e5a206e21/1539491241469.png)
**1\. 卸载已有的 Docker 版本**
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
请注意,如果你使用的操作系统不是 Centos 7,指令可能不同。
**2\. 安装最新版 Docker**
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager — add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce
**3\. 启动 Docker 并运行测试脚本**
sudo systemctl start docker
sudo docker run hello-world
如果你看到下图所示的返回结果,你就完成了 Docker 的部署。
Hello from Docker!
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
**4\. 创建我们的深度学习模型**
我们将复制一段 Adrian Rosebrock 写的脚本。Adrian 写了一篇很棒的教程,关于如何利用 Keras 构建深度学习模型并使用 Flask 部署它。教程参见:https://blog.keras.io/building-a-simple-keras-deep-learning-rest-api.html
我们需要对 Adrian 的脚本进行两处关键的修改,才能使其运行。如果你不关心 Docker 和 TensorFlow 的技术细节,请跳过下面两段。
我们要修改的第一个地方与 Docker 有关。在本地运行应用程序时,默认的 flask behavior 会在本地主机(127.0.0...)上提供应用程序服务。在 Docker 容器内运行时,这可能会产生一些问题。解决的方法很简单。当调用 app.run() 时,使用 app.run(host='0.0.0.0') 将 URL 设置为 0.0.0.0。这样,我们的应用就可以在本地主机和外部 IP 上同时使用了。
下一个问题涉及 TensorFlow。当我运行 Adrian 的原始脚本时,我无法成功调用模型。于是,我阅读了下面这个 Github issue(https://github.com/tensorflow/tensorflow/issues/14356),并对代码进行了修改。
global graph
graph = tf.get_default_graph()
...
with graph.as_default():
preds = model.predict(image)
说实话,我也不知道为什么这样做就行得通。但它确实做到了。所以就这样运行吧。
首先,创建一个名为 keras-app 的新文件夹,并将当前的路径移动到该文件夹中。
mkdir keras-
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Deploy Your First Deep Learning Model On Kubernetes With P.zip (5个子文件)
kwan1117
.gitignore 1KB
README.md 25KB
keras-app
app.py 3KB
Dockerfile 137B
requirements.txt 46B
共 5 条
- 1
资源评论
Kwan的解忧杂货铺@新空间代码工作室
- 粉丝: 3w+
- 资源: 3696
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功