机器学习的工程复杂度,除了来自于常见的软件开发问题外,还和机器学习数据驱动的特色相关,这就带来了其工做流程链路更长,数据版本失控,实验难以跟踪、结果难以重现,模型迭代成本巨大等一系列问题。为了解决这些机器学习特有的问题,不少企业构建了内部机器学习平台来管理机器学习生命周期,其中最有名的是Google的Tensorflow Extended,Facebook的FBLearner Flow,Uber的Michelangelo,遗憾的是这些平台都须要绑定在公司内部的基础设施之上,没法完全开源。而这些机器学习平台的骨架就是机器学习工做流系统,它可让数据科学家灵活定义本身的机器学习流水线,重用已有的数据处理和模型训练能力,进而更好的管理机器学习生命周期。html
谈到机器学习工做流平台,Google的工程经验很是丰富,它的TensorFlow Extended机器学习平台支撑了Google的搜索,翻译,视频等核心业务;更重要的是其对机器学习领域工程效率问题的理解深入,node
Google的Kubeflow团队于2018年末开源了Kubeflow Pipelines(KFP), KFP的设计与Google内部机器学习平台TensorFlow Extended一脉相承,惟一的区别是KFP运行在Kubenretes的平台上,TFX是运行在Borg之上的。mysql
Kubeflow Pipelines平台包括:linux
而Kubeflow Pipelines的目标在于:git
看到Kubeflow Piplines的能力,你们是否是都摩拳擦掌,想一睹为快?可是目前国内想使用Kubeflow Pipeline有两个挑战:
1.Pipelines须要经过Kubeflow部署;而Kubeflow默认组件过多,同时经过Ksonnet部署Kubeflow也是很复杂的事情。 2.Pipelines自己和谷歌云平台有深度耦合,没法在运行其余云平台上或者裸金属服务器的环境。github
为了方便国内的用户安装Kubeflow Pipelines,阿里云容器服务团队提供了基于Kustomize的Kubeflow Pipelines部署方案。和普通的Kubeflow基础服务不一样,Kubeflow Pipelines须要依赖于mysql和minio这些有状态服务,也就须要考虑如何持久化和备份数据。在本例子中,咱们借助阿里云SSD云盘做为数据持久化的方案,分别自动的为mysql和minio建立SSD云盘。sql
您能够在阿里云上尝试一下单独部署最新版本Kubeflow Pipelines。数据库
在Linux和Mac OS环境,能够执行windows
opsys=linux # or darwin, or windows curl -s https://api.github.com/repos/kubernetes-sigs/kustomize/releases/latest |\ grep browser_download |\ grep $opsys |\ cut -d '"' -f 4 |\ xargs curl -O -L mv kustomize_*_${opsys}_amd64 /usr/bin/kustomize chmod u+x /usr/bin/kustomize
在Windows环境,能够下载kustomize_2.0.3_windows_amd64.exeapi
1.经过ssh访问Kubernetes集群,具体方式能够参考文档。
2.下载源代码
yum install -y git git clone --recursive https://github.com/aliyunContainerService/kubeflow-aliyun
3.安全配置
3.1 配置TLS证书。若是没有TLS证书,能够经过下列命令生成
yum install -y openssl domain="pipelines.kubeflow.org" openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.key -out kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.crt -subj "/CN=$domain/O=$domain"
若是您有TLS证书,请分别将私钥和证书保存到
kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.key
和kubeflow-aliyun/overlays/ack-auto-clouddisk/tls.crt
下
3.2 配置admin的登陆密码
yum install -y httpd-tools htpasswd -c kubeflow-aliyun/overlays/ack-auto-clouddisk/auth admin New password: Re-type new password: Adding password for user admin
4.首先利用kustomize生成部署yaml
cd kubeflow-aliyun/ kustomize build overlays/ack-auto-clouddisk > /tmp/ack-auto-clouddisk.yaml
5.查看所在的Kubernetes集群节点所在的地域和可用区,而且根据其所在节点替换可用区,假设您的集群所在可用区为cn-hangzhou-g
,能够执行下列命令
sed -i.bak 's/regionid: cn-beijing/regionid: cn-hangzhou/g' \ /tmp/ack-auto-clouddisk.yaml sed -i.bak 's/zoneid: cn-beijing-e/zoneid: cn-hangzhou-g/g' \ /tmp/ack-auto-clouddisk.yaml
建议您检查一下/tmp/ack-auto-clouddisk.yaml修改是否已经设置
6.将容器镜像地址由gcr.io
替换为registry.aliyuncs.com
sed -i.bak 's/gcr.io/registry.aliyuncs.com/g' \ /tmp/ack-auto-clouddisk.yaml
建议您检查一下/tmp/ack-auto-clouddisk.yaml修改是否已经设置
7.调整使用磁盘空间大小, 好比须要调整磁盘空间为200G
sed -i.bak 's/storage: 100Gi/storage: 200Gi/g' \ /tmp/ack-auto-clouddisk.yaml
8.验证pipelines的yaml文件
kubectl create --validate=true --dry-run=true -f /tmp/ack-auto-clouddisk.yaml
9.利用kubectl部署pipelines
kubectl create -f /tmp/ack-auto-clouddisk.yaml
10.查看访问pipelines的方式,咱们经过ingress暴露pipelines服务,在本例子中,访问ip是112.124.193.271。而Pipelines管理控制台的连接是:https://112.124.193.271/pipeline/
kubectl get ing -n kubeflow NAME HOSTS ADDRESS PORTS AGE ml-pipeline-ui * 112.124.193.271 80, 443 11m
11.访问pipelines管理控制台
若是使用自签发证书,会提示此连接非私人连接,请点击显示详细信息, 并点击访问此网站。
请输入步骤2.2中的用户名admin和设定的密码
这时就可使用pipelines管理和运行训练任务了。
1.为何这里要使用阿里云的SSD云盘?
这是因为阿里云的SSD云盘能够设置按期的自动备份,保证pipelines中的元数据不会丢失。
2.如何进行云盘备份?
若是您想备份云盘的内容,能够为云盘 手动建立快照 或者 为硬盘设置自动快照策略 按时自动建立快照。
3.如何清理Kubeflow Piplines部署?
这里的清理工做分为两个部分:
kubectl delete -f /tmp/ack-auto-clouddisk.yaml
4.如何使用现有云盘做为数据库存储,而避免自动建立云盘?
请参考文档
本文为您初步介绍了Kubeflow Pipelines的背景和其所要解决的问题,以及如何在阿里云上经过Kustomize快速构建一套服务于机器学习的Kubeflow Pipelines,后续咱们会分享如何利用Kubeflow Pipelines开发一个完整的机器学习流程。
原文连接 本文为云栖社区原创内容,未经容许不得转载。