综述
2017年底,奥斯汀的Kubecon上,Google项目的产品经理 David Aronchick 和首席工程师 Jeremy Lewi将Kubeflow这个项目带到了大家的视野里。经过一年的发展,在2018年的西雅图的Kubecon上, Kubeflow的热浪席卷整个会场,大约有近15-16个与KubeFlow相关的分享,来自于Google,阿里巴巴,Intel,IBM等公司的社区贡献者都介绍了自己和KubeFlow相关的经验。应该说,Kubeflow在2018赢得业界的关注。
但是平心而论,它还没有获得用户的信任。从能力上来看还有硬伤:
- 不能升级,作为一款软件方案,如果没有升级方案只能重建,对于用户来说是不可以接受。
- 不支持多租户,目前仅适用数据科学家的solo场景,无法支持数据科学家团队合作场景。缺乏隔离和资源限制导致并不适合规模中等以上的公司使用。
- 不够安全,许多组件都没有认证机制。
要承认Kubeflow距离真正的生产可用还有比较大的距离,但是从Kubeflow的Roadmap看,这也是Kubeflow社区在努力的方向。同时也能看到Google在发力,有了更多的工程师投入,同时向Nvidia,Cisco,红帽,微软等许多公司也真正有专人在KubeFlow上投入。如果有明确的方向,再加上持续的大规模投入从长期看Kubeflow的发展还是很有希望的。
与其临渊羡鱼,不如退而结网,改善Kubeflow真正有效的方法是大家尝试用KubeFlow解决自己在机器学习或者深度学习场景下的问题,并且将各种问题,吐槽甚至是解决方案回馈给社区,才能真正帮助KubeFlow成为云原生下解决数据科学家团队运行机器学习问题的利器。在这个背景下,Kubeflow 0.4.0于1月7日正式发布了。在0.4.0中包含了:
- Jupyter Hub可以使用PVC
- TFJob和PyTorch已经进入Beta阶段
- Katib支持TFJob
- Pipeline
- Kubeflow的部署也变得更加简单,用户不用再似懂非懂的运行一堆ksonnet param和apply命令
其中Pipline(机器学习工作流)和Katib (自动机器学习框架)是0.4.0中新加入的能力;而TFJob进入了V1Beta1,距离真正的V1也是近在咫尺了。而Jupyter Hub与之前也有比较明显的变化。我们会在系列文章中与大家介绍。
为了能让国内的用户方便的体验到KubeFlow 0.4.0,阿里云容器服务团队第一时间对KubeFlow进行了适配。您可以按照本文档在阿里云容器服务上部署Kubeflow 0.4.0的版本。后续随着KubeFlow的不断完善,我们也会将KubeFlow和阿里云的能力进行深度整合。为您提供基于Kubernetes的完整的云原生机器学习体验。
部署Kubeflow
部署阿里云Kubernetes容器服务
选择GPU类型 (您也可以选择CPU类型,结合您的实际需求)
具体参考创建GPU集群
安装ksonnet
Kubeflow 利用 ksonnet
打包和部署其组件。
首先,安装ksonnet版本 0.13.1
cd /tmp/
curl -O http://kubeflow.oss-cn-beijing.aliyuncs.com/ks_0.13.1_linux_amd64.tar.gz
tar -xvf ks_0.13.1_linux_amd64.tar.gz
cp */ks /usr/local/bin/
rm -rf ks_0.13.1_linux_amd64*
部署PVC
和之前的版本相比,在0.4.0的版本中,KubeFlow依赖于katib-mysql
,pipeline-mino
,pipeline-mysql
这三个有状态服务。而这些需要提前部署,您也可以根据自己的需求修改PV和PVC的配置
wget http://kubeflow.oss-cn-beijing.aliyuncs.com/storage.yaml
kubectl create namespace kubeflow
kubectl create -f storage.yaml
注意: 这里提供的方案是为了满足快速部署,您可以根据自身需求配置更为合理的PV和PVC配置。
下载Kubeflow的repo
KUBEFLOW_SRC=~/kubeflow-repo
mkdir ${KUBEFLOW_SRC}
cd ${KUBEFLOW_SRC}
curl -O http://kubeflow.oss-cn-beijing.aliyuncs.com/download.sh
bash download.sh
在阿里云上安装Kubeflow
由于国内访问Google默认的的镜像仓库不稳定,请您在选择platform时候,指定云平台为ack( Alibaba Cloud Kubernetes)
export KFAPP=mykubeflow
cd ~
${KUBEFLOW_SRC}/scripts/kfctl.sh init ${KFAPP} --platform ack
cd ${KFAPP}
${KUBEFLOW_SRC}/scripts/kfctl.sh generate platform
${KUBEFLOW_SRC}/scripts/kfctl.sh apply platform
${KUBEFLOW_SRC}/scripts/kfctl.sh generate k8s
${KUBEFLOW_SRC}/scripts/kfctl.sh apply k8s
注意:第一次执行${KUBEFLOW_SRC}/scripts/kfctl.sh apply k8s
的时候,会报出如下错误:
此时不用担心,这是Kubeflow的已知issue,可以重新执行一次apply命令解决。
${KUBEFLOW_SRC}/scripts/kfctl.sh apply k8s
部署pytorch
这是Kubeflow 0.4.0的已知issue,由于Katib要依赖pytorch, 需要提前部署一下pytorch
cd ~
cd ${KFAPP}/ks_app/
ks apply default -c pytorch-operator
关闭Kubeflow使用报告 (可选)
默认Kubeflow会想Google匿名上报用户的使用情况,如果您感到不妥,可以按照以下方法关闭
kubectl delete -n kubeflow deploy spartakus-volunteer
cd ~
cd ${KFAPP}/ks_app/
ks delete default -c spartakus
ks component rm spartakus
访问Central UI
Kubeflow提供了一系列的UI:
- Argo UI
- JupyterHub
- Katib
- TFJobs Dashboard
Kubeflow提供了Central UI
方便用户访问不同的服务,由于KubeFlow目前在安全上还有所欠缺,不建议您在互联网上暴露服务。您可以在本机使用port forward命令访问Central UI
export NAMESPACE=kubeflow
export PODNAME=`kubectl get po -n kubeflow -l service=ambassador | grep -v NAME| head -1| awk '{print $1}'`
kubectl port-forward ${PODNAME} -n ${NAMESPACE} 8080:80
最终您可以直接访问Central UI
, 并且导航栏访问不同的Kubeflow服务。这样您就可以开始您的Kubeflow之旅了。
http://localhost:8080/
总结
本文向您介绍Kubeflow最新的变化以及如何在阿里云上部署Kubeflow最新版本的步骤,欢迎您亲自尝试。我们后续也会介绍如何在阿里云上使用Kubeflow具体服务的方法。
Kubeflow当前版本的部署安装对于GCE有比较强的绑定,导致使用者独立部署有一定的难度,为了方便您在非GCE的平台尝试,阿里云容器服务团队提供了阿里云上的部署方案,后续我们也会与Kubeflow进行更深入的整合,提供基于Kubeflow,并结合阿里云的存储,弹性和安全能力的机器学习解决方案。