Kubernetes集成TensorFlow服务

原创
2018/05/12 17:39
阅读数 3.4K

Kubernetes集成TensorFlow服务

TensorFlow可以裸机运行、基于Virtualenv、Anaconda运行,在Docker中运行。把TensorFlow运行于Kubernetes之中,可以利用Kubernetes的强大容器管理和编排能力,实现集群化的分布式部署。

参考上图的架构将机器学习整合到DevOps的整个流程之中,具备ML模型的版本控制、快速部署和规模伸缩、集群化测试验证和运行、快速迭代和持续交付能力,从而建立机器学习的企业级能力。

1、直接运行Pod

1.1 基础环境安装

安装Kubernets、NVidia Docker2和Nvidia device Plugin,参考:

1.2 创建部署yaml文件

将下面内容保存为tensorflow.yaml文件。

apiVersion: v1
kind: Pod
metadata:
  name: openthings-tensorflow
spec:
  containers:
    - name: openthings-container
      image: tensorflow/tensorflow:latest-gpu
      resources:
        limits:
          nvidia.com/gpu: 1 # requesting 1 GPUs
  • 如果有多块GPU,修改上面的nvidia.com/gpu的值,但不能超过系统中当期空闲的GPU数量。

1.3 安装TensorFlow POD

安装TensorFlow为Kubernetes POD:

kubectl create -f tensorflow.yaml

查看是否启动成功:

kubectl get pod --all-namespaces

看下是否openthings-tensorflow的pod已经处于running状态。

由于需要下载镜像,需要等待一段时间。如果一直处于pending状态,使用下面方法查看问题:

kubectl describe pod openthings-tensorflow

单独拉取镜像:

docker pull tensorflow/tensorflow:latest-gpu

一直等到pod的状态处于running状态,然后进行下面的操作。

1.4 映射端口

在打开浏览器访问Tensorflow的Notebook服务之前,我们需要将端口映射到容器网络之外的网络地址:

kubectl port-forward openthings-tenorflow 8888:8888 --namespace=kube-system &

如果端口8888已经占用,改为别的端口。也可以使用ingress等其它方式映射IP地址和端口,更为通用,只是需要更多的配置,参见Kubernetes的网络配置外部服务访问的方法,如下:

1.5 查看日志

到Kubernetes的Dashboard选择“容器组”,选中“openthings-tensorflow”,选择“日志”,查看容器运行的输出:

[I 08:14:38.014 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[W 08:14:38.026 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 08:14:38.031 NotebookApp] Serving notebooks from local directory: /notebooks
[I 08:14:38.031 NotebookApp] 0 active kernels
[I 08:14:38.031 NotebookApp] The Jupyter Notebook is running at:
[I 08:14:38.031 NotebookApp] http://[all ip addresses on your system]:8888/?token=5b3ace4c911f9488b503ae46cec1565e18b877860cf5f99d
[I 08:14:38.031 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 08:14:38.031 NotebookApp] 
    
    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=5b3ace4c911f9488b503ae46cec1565e18b877860cf5f99d

把里面的登录URL拷贝下来,输入浏览器。

1.6 访问jupyter notebook服务

在浏览器输入上面日志中的URL地址,类似于:

  • http://localhost:8888/?token=5b3ace4c911f9488b503ae46cec1565e18b877860cf5f99d

应该就可以打开TensorFlow的Notebook服务了。

2、Kubeflow

上面的方法适合单机单容器实例使用,可以使用Kubernetes的容器管理工具。但如果扩展到多个实例甚至多个节点,容器之间是独立运行的,因此并没有把Kubernetes的集群管理能力充分利用起来。要充分使用容器集群能力,可以使用kubeflow来实现,不过目前该项目还处于0.1版本的状态。

3、Pachyderm

Pachyderm是另外一个可以在Kubernetes实现数据工作流的软件,可以将基于Tensorflow的机器学习工作流整合为一个统一的数据流,并在Kubernetes集群上运行。

展开阅读全文
打赏
0
0 收藏
分享
加载中
openthings博主

引用来自“张佳师”的评论

您好, 1.3 安装TensorFlow POD, 提到的tensorflow.yaml, 能发出来吗?
现在的问题是jupyter notebook 链接不是, 谢谢
please reference 1.2.
2018/06/22 08:54
回复
举报
您好, 1.3 安装TensorFlow POD, 提到的tensorflow.yaml, 能发出来吗?
现在的问题是jupyter notebook 链接不是, 谢谢
2018/06/15 17:57
回复
举报
更多评论
打赏
2 评论
0 收藏
0
分享
返回顶部
顶部