Kubeflow 1.0 上线: 体验生产级的机器学习平台

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: # 背景 从2017年12月Kubeflow在Kubecon USA宣布开源至今,已经经过2年多的时间。在过去的两年里Kubeflow已经成长为一个拥有数百名贡献者的优秀开源项目。Kubeflow的目标是让机器学习工程师或者数据科学家可以利用本地或者共有的云资源构建属于自己的ML的工作负载。2020年3月,Kubeflow正式发布1.0版本。在Kubeflow 1.0的版本中, 有多项重要的核心

背景

从2017年12月Kubeflow在Kubecon USA宣布开源至今,已经经过2年多的时间。在过去的两年里Kubeflow已经成长为一个拥有数百名贡献者的优秀开源项目。Kubeflow的目标是让机器学习工程师或者数据科学家可以利用本地或者共有的云资源构建属于自己的ML的工作负载。2020年3月,Kubeflow正式发布1.0版本。在Kubeflow 1.0的版本中, 有多项重要的核心应用毕业,这些应用帮助用户在Kubernetes的平台上高效的开发、构建、训练和部署模型。毕业的应用有:

  • Kubeflow's UI, the central dashboard
  • Jupyter notebook controller and web app
  • Tensorflow Operator (TFJob) and PyTorch Operator for distributed training
  • kfctl for deployment and upgrades
  • Profile controller and UI for multiuser management

通过使用Kubeflow1.0, 用户可以通过Jupyter开发模型,然后利用Kubeflow提供的工具fairing(Kubeflow’s python SDK)来构建镜像,最后通过Kubernetes调度资源来训练模型。一旦他们有了训练好的模型,他们可以使用KFServing来创建部署推理服务。


376257940305ae2238f663078b7ab029.png

在阿里云上部署Kubeflow1.0

环境检查

1.需要Kubernetes集群1.14及以上
2.有些用户在安装时,因为集群预先安装过istio,所以导致安装失败,建议之前先清理掉istio的相关内容

Kubeflow1.0 服务部署

1.下载kfctl工具用于kubeflow部署

wget http://kubeflow.oss-cn-beijing.aliyuncs.com/kfctl_v1.0-0-g94c35cf_linux.tar.gz
tar zxvf kfctl_v1.0-0-g94c35cf_linux.tar.gz
mv kfctl /usr/bin/

2.初始化部署环境和下载部署所用manifests (此处为了适配阿里云ACK的一键部署,类似国内镜像拉取超时、服务访问不通等问题已经处理,请使用阿里适配后的CONFIG文件)

export KF_NAME=my-kubeflow
export BASE_DIR=/root/
export KF_DIR=${BASE_DIR}/${KF_NAME}
export CONFIG_URI="http://kubeflow.oss-cn-beijing.aliyuncs.com/kfctl_k8s_istio.v1.0.1.yaml"
mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl build -V -f ${CONFIG_URI}
export CONFIG=${KF_DIR}/kfctl_k8s_istio.v1.0.1.yaml

3.创建服务运行时需要的本地PV,用户可以根据自己情况创建不同类型的PV,

cat << EOF > local_pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pipeline-mysql-pv
  namespace: kubeflow
  labels:
    type: local
    app: pipeline-mysql-pv
    key: kubeflow-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/pipeline-mysql
    type: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pipeline-minio-pv
  namespace: kubeflow
  labels:
    type: local
    app: pipeline-minio-pv
    key: kubeflow-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/pipeline-minio
    type: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: katib-mysql
  namespace: kubeflow
  labels:
    type: local
    app: katib-mysql
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/katib-mysql
    type: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: metadata-mysql-pv
  namespace: kubeflow
  labels:
    type: local
    app: metadata-mysql-pv
    key: kubeflow-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/metadata-mysql
    type: DirectoryOrCreate
EOF
kubectl create -f local_pv.yaml

4.服务部署,时间稍长,请耐心等待....(预计10min以内)

kfctl apply -V -f ${CONFIG}

部署后环境检查

1.istio-system下的pod是否启动正常,执行kubectl get pods -n istio-system


0838e04374c8a0a32eb8e3b3747572d6.png

2.Kubeflow下的pod是否启动正常(此处由于服务部署的先后顺序,有些Pod会运行失败,可以等待服务重启),执行kubectl get pods -n kubeflow


a485b9f935918fe02bacb7f7615a3f28.png

3.是否能够正常访问Kubeflow页面
3.1执行 kubectl get svc -n istio-system istio-ingressgateway,查询istio对外暴露的IP

由于无法直接访问到Kubeflow的地址,可以通过使用sshuttle来访问,例如: sshuttle -r root@47.89.59.51 192.168.0.0/16

8d0e4d6a83a7b6b68f990be301de3925.png

3.2访问对应的IP:80显示Kubeflow的主页面标识部署成功


87a420596f9001059c433a1a40022859.png

体验Jupyter Hub

1.在主界面上选择Notebook Servers


9af2e9e8f6c92202666bc960016b8e88.png

2.新建New Server


1b627c9aed7de2732e5158c1022f3654.png

如果有提示No default Storage Class is set. 用户可以自行设置default Storage Class

8a8036b94778f34a0a9b57f784182048.png

例如在阿里云上设定disk-ssd为default stroage class

kubectl patch storageclass alicloud-disk-ssd -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

3.编辑Server信息
用户可以选择Custom Image解决gcr镜像拉取不下来的问题


db624cee3ec6349a19fdbe44181d828c.png

阿里云提供如下的docker镜像:

registry.cn-hangzhou.aliyuncs.com/kubeflow-images-public/tensorflow-1.15.2-notebook-cpu:1.0.0
registry.cn-hangzhou.aliyuncs.com/kubeflow-images-public/tensorflow-1.15.2-notebook-gpu:1.0.0
registry.cn-hangzhou.aliyuncs.com/kubeflow-images-public/tensorflow-2.1.0-notebook-cpu:1.0.0
registry.cn-hangzhou.aliyuncs.com/kubeflow-images-public/tensorflow-2.1.0-notebook-gpu:1.0.0

如果配置了Workspace Volume并且将alicloud-disk-ssd设为default stroage class,由于最低限制的原因,请将Size设置为20G


ecb74744d3586e809540a9f483ac678a.png

选择设定需要的GPU资源


ecb74744d3586e809540a9f483ac678a.png

4.使用Jupyter
服务启动成功后,状态显示为绿色


3af3372e2b1a3570df1ee71ba0d127a8.png

登录Terminal,检查GPU环境

dd37a16b3890810e1a1cbb1fc978e206.png


8799161b2208bd7ac227adae66a22377.png

使用Jupyter的开发环境

f819c5d958d3c00e41a39ff8f9284fa9.png

将示例代码复制到文本框中

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

import tensorflow as tf

x = tf.placeholder(tf.float32, [None, 784])

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

y = tf.nn.softmax(tf.matmul(x, W) + b)

y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

train_step = tf.train.GradientDescentOptimizer(0.05).minimize(cross_entropy)

sess = tf.InteractiveSession()
tf.global_variables_initializer().run()

for _ in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print("Accuracy: ", sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

运行代码得出训练结果


a144aa1a62ed71aef25d9fcc3f176e86.png

展望

未来我们会带来更多的Kubeflow的实践文章,敬请期待~

参考文献: 1 https://medium.com/kubeflow/kubeflow-1-0-cloud-native-ml-for-everyone-a3950202751

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 算法
【AAAI 2024】再创佳绩!阿里云人工智能平台PAI多篇论文入选
阿里云人工智能平台PAI发表的多篇论文在AAAI-2024上正式亮相发表。AAAI是由国际人工智能促进协会主办的年会,是人工智能领域中历史最悠久、涵盖内容最广泛的国际顶级学术会议之一,也是中国计算机学会(CCF)推荐的A类国际学术会议。论文成果是阿里云与浙江大学、华南理工大学联合培养项目等共同研发,深耕以通用人工智能(AGI)为目标的一系列基础科学与工程问题,包括多模态理解模型、小样本类增量学习、深度表格学习和文档版面此次入选意味着阿里云人工智能平台PAI自研的深度学习算法达到了全球业界先进水平,获得了国际学者的认可,展现了阿里云人工智能技术创新在国际上的竞争力。
|
2月前
|
机器学习/深度学习 人工智能 JSON
人工智能平台PAI问题之推断报错如何解决
人工智能平台PAI是指阿里云提供的机器学习平台服务,支持建模、训练和部署机器学习模型;本合集将介绍机器学习PAI的功能和操作流程,以及在使用过程中遇到的问题和解决方案。
39 0
|
2月前
|
机器学习/深度学习 人工智能
人工智能平台PAI问题之维度不匹配如何解决
人工智能平台PAI是指阿里云提供的机器学习平台服务,支持建模、训练和部署机器学习模型;本合集将介绍机器学习PAI的功能和操作流程,以及在使用过程中遇到的问题和解决方案。
44 1
|
2月前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI问题之loss为负数如何解决
人工智能平台PAI是指阿里云提供的机器学习平台服务,支持建模、训练和部署机器学习模型;本合集将介绍机器学习PAI的功能和操作流程,以及在使用过程中遇到的问题和解决方案。
45 1
|
2月前
|
机器学习/深度学习 存储 人工智能
人工智能平台PAI问题之cuda报错如何解决
人工智能平台PAI是指阿里云提供的机器学习平台服务,支持建模、训练和部署机器学习模型;本合集将介绍机器学习PAI的功能和操作流程,以及在使用过程中遇到的问题和解决方案。
43 1
|
2月前
|
机器学习/深度学习 人工智能 资源调度
人工智能平台PAI问题之多机多卡如何解决
人工智能平台PAI是指阿里云提供的机器学习平台服务,支持建模、训练和部署机器学习模型;本合集将介绍机器学习PAI的功能和操作流程,以及在使用过程中遇到的问题和解决方案。
59 0
|
2月前
|
机器学习/深度学习 人工智能 并行计算
人工智能平台PAI问题之延迟更新如何解决
人工智能平台PAI是指阿里云提供的机器学习平台服务,支持建模、训练和部署机器学习模型;本合集将介绍机器学习PAI的功能和操作流程,以及在使用过程中遇到的问题和解决方案。
29 0
|
2月前
|
机器学习/深度学习 人工智能 异构计算
人工智能平台PAI问题之Tag类型特征等长如何解决
人工智能平台PAI是指阿里云提供的机器学习平台服务,支持建模、训练和部署机器学习模型;本合集将介绍机器学习PAI的功能和操作流程,以及在使用过程中遇到的问题和解决方案。
45 0
|
2月前
|
机器学习/深度学习 人工智能 DataWorks
人工智能平台PAI问题之日志报错误如何解决
人工智能平台PAI是指阿里云提供的机器学习平台服务,支持建模、训练和部署机器学习模型;本合集将介绍机器学习PAI的功能和操作流程,以及在使用过程中遇到的问题和解决方案。
53 0
人工智能平台PAI问题之日志报错误如何解决
|
2月前
|
机器学习/深度学习 存储 人工智能
人工智能平台PAI问题之出现pb限制如何解决
人工智能平台PAI是指阿里云提供的机器学习平台服务,支持建模、训练和部署机器学习模型;本合集将介绍机器学习PAI的功能和操作流程,以及在使用过程中遇到的问题和解决方案。
58 0

热门文章

最新文章