内容简介:从上图可以看出一个机器学习模型上线对外提供服务要经过:
注意:上图的每种颜色代表对一个阶段的处理
从上图可以看出一个机器学习模型上线对外提供服务要经过: 数据清洗准备 , 数据集切分 , 模型训练 , 模型评估 , 模型服务上线 , 日志监控 等阶段。而对于模型的训练只是机器学习工作流中很小的一部分。
好了机器学习服务上线的基本流程介绍之后,接下来继续介绍Kubeflow.
Kubeflow核心组件介绍
- jupyter 多租户NoteBook服务
- Tensorflow /[PyTorch] ( https://pytorch.org/)/[MPI](https://www.open-mpi.org/)/[MXnet](https://mxnet.apache.org/)/[Chainer](https://chainer.org/) 当前主要支持的机器学习引擎
- Seldon 提供在Kubernetes上对机器学习模型的部署
- TF-Serving 提供对Tensorflow模型的在线部署,支持版本控制及无需停止线上服务,切换模型等功能
- Argo 基于Kubernetes的工作流引擎
- Ambassador 对外提供统一服务的网关(API Gateway)
- Istio 提供微服务的管理,Telemetry收集
- Ksonnet Kubeflow使用ksonnet来向kubernetes集群部署需要的k8s资源
而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 安装
- 安装 ksonnet
# 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统一的对外网关,其它的内部服务都是通过使用它来对外提供服务。具体如下图所示:
接下来我们使用 kubectl 的 port-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 UIs可以针对不同的功能进行使用,如使用 Jupyter Notebook 进行对应用的全过程计算:开发、文档编写、运行代码和展示结果。
通过Kubeflow UIs访问 TF-operator 来对基于 Tensorflow 的模型进行多机多卡的分布式训练。
好了,这篇文章简单的介绍了 Kubeflow 及其安装流程,关于文章介绍的服务组件太多,需要自行去深入了解了,就不详细介绍了。在接下来的文章介绍基于kubeflow对 Tensorflow 和 MXNet 模型进行多机多卡的分布式训练。
总结
现在国外的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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Masterminds of Programming
Federico Biancuzzi、Chromatic / O'Reilly Media / 2009-03-27 / USD 39.99
Description Masterminds of Programming features exclusive interviews with the creators of several historic and highly influential programming languages. Think along with Adin D. Falkoff (APL), Jame......一起来看看 《Masterminds of Programming》 这本书的介绍吧!