Kubeflow使用Kubernetes进行机器学习

栏目: 编程工具 · 发布时间: 7年前

内容简介:从上图可以看出一个机器学习模型上线对外提供服务要经过:
Kubeflow使用Kubernetes进行机器学习

注意:上图的每种颜色代表对一个阶段的处理

从上图可以看出一个机器学习模型上线对外提供服务要经过: 数据清洗准备数据集切分模型训练模型评估模型服务上线日志监控 等阶段。而对于模型的训练只是机器学习工作流中很小的一部分。

Kubeflow使用Kubernetes进行机器学习

好了机器学习服务上线的基本流程介绍之后,接下来继续介绍Kubeflow.

Kubeflow核心组件介绍

而Kubeflow利用Kubernetes的优势,将机器学习各个阶段涉及的组件已微服务的方式进行组合并已容器化的方式进行部署,提供整个流程各个系统的高可用及方便的进行扩展。

Kubeflow使用Kubernetes进行机器学习

Kubeflow 部署安装

实验环境

硬件环境 服务器配置:

  • GPU卡型号: Nvidia-Tesla-K80
  • 网卡: 千兆(注意:在进行对大数据集进行训练时,千兆的网卡会是瓶颈)

cephfs服务配置:

  • 网卡:万兆(注意:通过ceph对数据存储时,ceph集群需要与Kubernetes同机房,否则延迟会对加载数据集的影响非常高)

注意:服务器的GPU驱动和Nvidia-docker2.0的部署安装之前介绍过,这里就不介绍了。

软件环境:

  • kubernetes version: v1.12.2(注意: 需要安装kube-dns)
  • kubeflow version: v0.3.2
  • jsonnet version: v0.11.2

Kubeflow 安装

# export KS_VER=0.11.2
# export KS_PKG=ks_${KS_VER}_linux_amd64
# wget -O /tmp/${KS_PKG}.tar.gz https://github.com/ksonnet/ksonnet/releases/download/v${KS_VER}/${KS_PKG}.tar.gz \
  --no-check-certificate

# mkdir -p ${HOME}/bin
# tar -xvf /tmp/$KS_PKG.tar.gz -C ${HOME}/bin
# export PATH=$PATH:${HOME}/bin/$KS_PKG

关于 ksonnet 的更多信息请查看官网: https://ksonnet.io/

  • 安装Kubeflow
# export KUBEFLOW_SRC=/home/wangxigang/kubeflow
# mkdir ${KUBEFLOW_SRC}
# cd ${KUBEFLOW_SRC}
# export KUBEFLOW_TAG=v0.3.2

# curl https://raw.githubusercontent.com/kubeflow/kubeflow/${KUBEFLOW_TAG}/scripts/download.sh | bash

# export KUBEFLOW_REPO=/home/wangxigang/kubeflow/scripts
# export KFAPP=/home/wangxigang/kubeflow/kubeflow_ks_app

# ${KUBEFLOW_REPO}/scripts/kfctl.sh init ${KFAPP} --platform none
# cd ${KFAPP}
# ${KUBEFLOW_REPO}/scripts/kfctl.sh generate k8s
# ${KUBEFLOW_REPO}/scripts/kfctl.sh apply k8s

关于 kubeflow 的更多信息请查看官网: https://v0-3.kubeflow.org/docs/started/getting-started/

当上面的所有安装步骤都正常完成之后,先查看kubeflow在kubernetes集群deployment资源对象的启动状态:

[root@localhost]# kubectl  get deployment -n kubeflow
NAME                                     DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
ambassador                               3         3         3            3           11d
argo-ui                                  1         1         1            1           11d
centraldashboard                         1         1         1            1           11d
modeldb-backend                          1         1         1            1           11d
modeldb-db                               1         1         1            1           11d
modeldb-frontend                         1         1         1            1           11d
mxnet-operator                           1         1         1            1           11d
spartakus-volunteer                      1         1         1            1           11d
studyjob-controller                      1         1         1            1           11d
tf-job-dashboard                         1         1         1            1           11d
tf-job-operator-v1alpha2                 1         1         1            1           11d
vizier-core                              1         1         1            1           11d
vizier-db                                1         1         1            1           11d
vizier-suggestion-bayesianoptimization   1         1         1            1           11d
vizier-suggestion-grid                   1         1         1            1           11d
vizier-suggestion-hyperband              1         1         1            1           11d
vizier-suggestion-random                 1         1         1            1           11d
workflow-controller                      1         1         1            1           11d

ok,通过状态我们发现现在服务启动正常,在查看下各个deployment下各个服务的pod的状态:

[root@localhost]# kubectl  get pods -n kubeflow
NAME                                                      READY   STATUS    RESTARTS   AGE
ambassador-c97f7b448-8qgbg                                3/3     Running   1          8d
ambassador-c97f7b448-bspqt                                3/3     Running   1          8d
ambassador-c97f7b448-vq6mn                                3/3     Running   1          8d
argo-ui-7495b79b59-b2hlg                                  1/1     Running   0          8d
centraldashboard-798f8d68d5-gxx4g                         1/1     Running   0          8d
modeldb-backend-d69695b66-dxr44                           1/1     Running   0          8d
modeldb-db-975db58f7-wshd4                                1/1     Running   0          8d
modeldb-frontend-78ccff78b7-xr7h7                         1/1     Running   0          8d
mxnet-operator-6c49b767bc-nj995                           1/1     Running   19         8d
spartakus-volunteer-94bbd5c86-7xmfd                       1/1     Running   0          8d
studyjob-controller-7df5754ddf-pqqgt                      1/1     Running   0          8d
tf-hub-0                                                  1/1     Running   0          8d
tf-job-dashboard-7499d5cbcf-cct2q                         1/1     Running   0          8d
tf-job-operator-v1alpha2-644c5f7db7-v5qzc                 1/1     Running   0          8d
vizier-core-56dfc85cf9-qdrnt                              1/1     Running   973        8d
vizier-db-6bd6c6fdd5-h549q                                1/1     Running   0          11d
vizier-suggestion-bayesianoptimization-5d5bc5685c-x89lm   1/1     Running   0          8d
vizier-suggestion-grid-5dbfc65587-vv4gs                   1/1     Running   0          8d
vizier-suggestion-hyperband-5d9997fb99-hr9pj              1/1     Running   0          8d
vizier-suggestion-random-7fccb79977-5mggb                 1/1     Running   0          8d
workflow-controller-d5cb6468d-29kmf                       1/1     Running   0          8d

ok,现在服务都是正常的,接下来让我们通过 Ambassador 来访问kubeflow部署到k8s集群中的各个组件。

注意: 由于官方默认使用的镜像都是google镜像仓库的,所以在部署时可能出现墙的问题

访问Kubeflow UIs

由于Kubeflow使用 Ambassador 作为kubeflow统一的对外网关,其它的内部服务都是通过使用它来对外提供服务。具体如下图所示:

Kubeflow使用Kubernetes进行机器学习

接下来我们使用 kubectlport-forwarding 来对 Ambassador Service 进行端口转发,在本地对Kubeflow进行访问:

# export NAMESPACE=kubeflow
# kubectl --kubeconfig /etc/kubernetes/kubeconfig port-forward -n ${NAMESPACE} `kubectl --kubeconfig /etc/kubernetes/kubeconfig get pods -n ${NAMESPACE} --selector=service=ambassador -o jsonpath='{.items[0].metadata.name}'` 8080:80
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80

通过浏览器进行本地 localhost:8080 访问:

Kubeflow使用Kubernetes进行机器学习

通过Kubeflow UIs可以针对不同的功能进行使用,如使用 Jupyter Notebook 进行对应用的全过程计算:开发、文档编写、运行代码和展示结果。

Kubeflow使用Kubernetes进行机器学习

通过Kubeflow UIs访问 TF-operator 来对基于 Tensorflow 的模型进行多机多卡的分布式训练。

Kubeflow使用Kubernetes进行机器学习

好了,这篇文章简单的介绍了 Kubeflow 及其安装流程,关于文章介绍的服务组件太多,需要自行去深入了解了,就不详细介绍了。在接下来的文章介绍基于kubeflow对 TensorflowMXNet 模型进行多机多卡的分布式训练。

总结

现在国外的Google,微软,亚马逊,Intel以及国内的阿里云,华为云,小米云,京东云, 才云等等公司都在发力Kubeflow,并结合kubernetes对多种机器学习引擎进行多机多卡的大规模训练,这样可以做到对GPU资源的整合,并高效的提高GPU资源利用率,及模型训练的效率。并实现一站式服务,将机器学习服务上线的整个workflow都在Kubernetes平台实现。减轻机器学习算法同学的其它学习成本,专心搞算法。这势必给Devops的同学带来更高的跳挑战。相信未来Kubeflow会发展的更好。

本文链接: https://www.opsdev.cn/post/kubeflow-intro.html

-- EOF --

作者 王希刚 发表于 2018-12-08 19:09:10 ,最后修改于 2018-12-08 19:09:38


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Natural Language Processing with Python

Natural Language Processing with Python

Steven Bird、Ewan Klein、Edward Loper / O'Reilly Media / 2009-7-10 / USD 44.99

This book offers a highly accessible introduction to Natural Language Processing, the field that underpins a variety of language technologies, ranging from predictive text and email filtering to autom......一起来看看 《Natural Language Processing with Python》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试