kubeflow系列(二):kubeflow组件剖析大全
kubeflow作为基于云原生的机器学习大礼包,即可以作为一个很好的云原生的学习例子,同时基于k8s的生态必将是未来的发展的方向,相信后续Mxnet、paddle等各类型技术框架也都会运行在kubernetes这个生态之上。
为了对kubeflow有个更直观深入的了解,对kubeflow的各组件进行简单的介绍,先从机器学习任务来看kubeflow的的实现。
机器学习任务工程化实现流程
一个建模任务下来主要可以分为四大块任务
- 业务理解(Business Understanding)
- 数据获取及数据理解(Data Acquistition)
- 特征处理(Feature Engineering)、建模与模型训练(Model Training)、模型评估(Model Evaluation)
- 模型部署(Deployment),提供模型服务
一个机器学习任务从开始到结束主要分为了四大任务,Kubeflow的各项功能可以说就是围绕这四项任务构建的。
kubeflow
kubeflow 最开始基于tf-operator,后来随着项目发展最后变成一个基于云原生构建的机器学习任务工具大集合。从数据采集,验证,到模型训练和服务发布,几乎所有步骤的小组件 Kubeflow 都提供解决方案的组件:
kubeflow特点:
- 基于k8s,具有云原生的特性:弹性伸缩、高可用、DevOps等
- 集成大量机器学习所用到的工具
结构
kubeflow的完整结构可以看他的kustomize安装文件:
kustomize/
├── ambassador.yaml
├── api-service.yaml
├── argo.yaml
├── centraldashboard.yaml
├── jupyter-web-app.yaml
├── katib.yaml
├── metacontroller.yaml
├── minio.yaml
├── mysql.yaml
├── notebook-controller.yaml
├── persistent-agent.yaml
├── pipelines-runner.yaml
├── pipelines-ui.yaml
├── pipelines-viewer.yaml
├── pytorch-operator.yaml
├── scheduledworkflow.yaml
├── tensorboard.yaml
└── tf-job-operator.yaml
ambassador 微服务网关 argo 用于任务工作流编排 centraldashboard kubeflow的dashboard看板页面 tf-job-operator 深度学习框架引擎,一个基于tensorflow构建的CRD,资源类型kind为TFJob tensorboard tensorflow的训练可视化UI界面 katib 超参数服务器 pipeline 一个机器学习的工作流组件 jupyter 一个交互式业务IDE编码环境
TFJob
TFJob 是将 tensorflow 的分布式架构基于 k8s 构建的一种CRD:
- Chief 负责协调训练任务
- Ps 参数服务器,为模型的参数提供分布式的数据存储
- Worker 负责实际训练模型的任务. 在某些情况下 worker 0 可以充当Chief的责任。
- Evaluator 负责在训练过程中进行性能评估
apiVersion: kubeflow.org/v1beta2
kind: TFJob
metadata:
name: mnist-train
namespace: kubeflow
spec:
tfReplicaSpecs:
Chief: # 调度器
replicas: 1
template:
spec:
containers:
- command:
- /usr/bin/python
- /opt/model.py
env:
- name: modelDir
value: /mnt
- name: exportDir
value: /mnt/export
image: mnist-test:v0.1
name: tensorflow
volumeMounts:
- mountPath: /mnt
name: local-storage
workingDir: /opt
restartPolicy: OnFailure
volumes:
- name: local-storage
persistentVolumeClaim:
claimName: local-path-pvc
Ps: # 参数服务器
replicas: 1
template:
spec:
containers:
- command:
- /usr/bin/python
- /opt/model.py
env:
- name: modelDir
value: /mnt
- name: exportDir
value: /mnt/export
image: mnist-test:v0.1
name: tensorflow
volumeMounts:
- mountPath: /mnt
name: local-storage
workingDir: /opt
restartPolicy: OnFailure
volumes:
- name: local-storage
persistentVolumeClaim:
claimName: local-path-pvc
Worker: # 计算节点
replicas: 2
template:
spec:
containers:
- command:
- /usr/bin/python
- /opt/model.py
env:
- name: modelDir
value: /mnt
- name: exportDir
value: /mnt/export
image: mnist-test:v0.1
name: tensorflow
volumeMounts:
- mountPath: /mnt
name: local-storage
workingDir: /opt
restartPolicy: OnFailure
volumes:
- name: local-storage
persistentVolumeClaim:
claimName: local-path-pvc
tensorboard 训练可视化界面
挂载日志文件,创建 tensorboard 可视化服务
apiVersion: v1
kind: Service
metadata:
name: tensorboard-tb
namespace: kubeflow
spec:
ports:
- name: http
port: 8080
targetPort: 80
selector:
app: tensorboard
tb-job: tensorboard
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: tensorboard-tb
namespace: kubeflow
spec:
replicas: 1
template:
metadata:
labels:
app: tensorboard
tb-job: tensorboard
name: tensorboard
namespace: kubeflow
spec:
containers:
- command:
- /usr/local/bin/tensorboard
- --logdir=/mnt
- --port=80
env:
- name: logDir
value: /mnt
image: tensorflow/tensorflow:1.11.0
name: tensorboard
ports:
- containerPort: 80
volumeMounts:
- mountPath: /mnt
name: local-storage
serviceAccount: default-editor
volumes:
- name: local-storage
persistentVolumeClaim:
claimName: mnist-test-pvc
tf-serving
tenserflow serving 提供一个稳定的接口,供用户调用,来应用该模型,serving 通过模型文件直接创建模型即服务(Model as a service)
apiVersion: v1
kind: Service
metadata:
labels:
app: mnist
name: mnist-service-local
namespace: kubeflow
spec:
ports:
- name: grpc-tf-serving
port: 9000
targetPort: 9000
- name: http-tf-serving
port: 8500
targetPort: 8500
selector:
app: mnist
type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: mnist
name: mnist-service-local
namespace: kubeflow
spec:
template:
metadata:
labels:
app: mnist
version: v1
spec:
containers:
- args:
- --port=9000
- --rest_api_port=8500
- --model_name=mnist
- --model_base_path=/mnt/export
command:
- /usr/bin/tensorflow_model_server
env:
- name: modelBasePath
value: /mnt/export
image: tensorflow/serving:1.11.1
imagePullPolicy: IfNotPresent
livenessProbe:
initialDelaySeconds: 30
periodSeconds: 30
tcpSocket:
port: 9000
name: mnist
ports:
- containerPort: 9000
- containerPort: 8500
resources:
limits:
cpu: "4"
memory: 4Gi
requests:
cpu: "1"
memory: 1Gi
volumeMounts:
- mountPath: /mnt
name: local-storage
pipeline
pipeline 是一个可视化的kubeflow任务工作流(Workflow),定义了一个有向无环图描述的流水线,流水线中每一步流程是由容器定义组成的组件。
运行步骤:
- 先要定义一个Experiment实验
- 然后发起任务,定义一个Pipeline
- 运行Pipeline实例
结构介绍
pipeline主要分为八部分:
- Python SDK: 用于创建kubeflow pipeline 的DSL
- DSL compiler: 将Python代码转换成YAML静态配置文件
- Pipeline web server: pipeline的前端服务
- Pipeline Service: pipeline的后端服务
- Kubernetes resources: 创建CRDs运行pipeline
- Machine learning metadata service: 用于存储任务流容器之间的数据交互(input/output)
- Artifact storage: 用于存储 Metadata 和 Pipeline packages, views
- Orchestration controllers:任务编排,比如Argo Workflow.
案例
import kfp
from kfp import dsl
def gcs_download_op(url):
return dsl.ContainerOp(
name='GCS - Download',
image='google/cloud-sdk:272.0.0',
command=['sh', '-c'],
arguments=['gsutil cat $0 | tee $1', url, '/tmp/results.txt'],
file_outputs={
'data': '/tmp/results.txt',
}
)
def echo2_op(text1, text2):
return dsl.ContainerOp(
name='echo',
image='library/bash:4.4.23',
command=['sh', '-c'],
arguments=['echo "Text 1: $0"; echo "Text 2: $1"', text1, text2]
)
@dsl.pipeline(
name='Parallel pipeline',
description='Download two messages in parallel and prints the concatenated result.'
)
def download_and_join(
url1='gs://ml-pipeline-playground/shakespeare1.txt',
url2='gs://ml-pipeline-playground/shakespeare2.txt'
):
"""A three-step pipeline with first two running in parallel."""
download1_task = gcs_download_op(url1)
download2_task = gcs_download_op(url2)
echo_task = echo2_op(download1_task.output, download2_task.output)
if __name__ == '__main__':
kfp.compiler.Compiler().compile(download_and_join, __file__ + '.yaml')
jupyter-notebook
jupyter 是最大限度的利用交互式的工作,他的主要工作体现利用交互式的操作帮助用户快速理解数据和测试评估模型。
主要包括两个模块jupyter-web-app 和 notebook-controller, jupyter 架构:
也可以用 jupyterhub 代替jupyter, jupyterhub提供了更多功能, jupyterhub 结构:
https://www.shikanon.com/2019/%E8%BF%90%E7%BB%B4/kubeflow%E4%BB%8B%E7%BB%8D/
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
基于国内阿里云镜像解决kubeflow一键安装
简介: google出品在国内都存在墙的问题,而kubeflow作为云原生的机器学习套件对团队的帮助很大,对于无翻墙条件的团队,基于国内镜像搭建kubeflow可以帮助大家解决不少麻烦,这里给大家提供一套基于国内阿里云镜像的kubeflow 0.6的安装方案。 环境准备 kubeflow 为环境要求很高,看官方要求: at least one worker node with a minimum of: 4 CPU 50 GB storage 12 GB memory 当然,没达到也能安装,不过在后面使用中会出现资源问题,因为这是整包安装方案。 一个已经安装好的kubernetes集群,这里我采用的是rancher安装的集群。 sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher 这里我选择的是k8s的1.14版本,kubeflow和k8s之间的版本兼容可以查看官网说明,这里我的kubeflow采用了0.6版本。 如果直接想安装可以直接调到kubeflow一键安装部分 kustom...
-
下一篇
如何部署阿里云ECS服务器自定义脚本?
ECS自定义脚本即用户数据是ECS为用户所提供的一种自定义实例启动行为的能力。用户可以在购买实例时输入自定义脚本设置自己的用户数据。用户自定义的脚本通常会在实例购买完成后被执行。 用户数据可以解决很多问题。比如说创建实例时,用户想为这些实例进行个性化配置。用户不想使用默认的root用户用户不想使用阿里云的yum源/NTP服务用户想在创建时自动部署某个应用其他脚本能实现的功能只要脚本能做的事用户数据就完全兼容。如以下脚本: 第一个功能是修改DNS配置 #Modify DNS echo "nameserver 8.8.8.8"|tee /etc/resolv.conf 第二个是是修改yum源 modify yum repo and update rm -rf /etc/yum.repos.d/* touch myrepo.repo echo "[base]"|tee -a /etc/yum.repos.d/myrepo.repo echo "baseurl=http://mirror.centos.org/centos"|tee -a /etc/yum.repos.d/myrepo.rep...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker容器配置,解决镜像无法拉取问题
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池










微信收款码
支付宝收款码