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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: # 背景 从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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 Shell
人工智能平台PAI操作报错合集之在分布式训练过程中遇到报错,是什么原因
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2月前
|
机器学习/深度学习 人工智能 数据处理
人工智能平台PAI操作报错合集之任务重启后出现模型拆分报错,该怎么办
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2月前
|
数据采集 人工智能 自然语言处理
阿里云百炼平台深度体验:智能问答与模型训练的创新之旅
在人工智能的浪潮中,阿里云百炼平台以其强大的大模型开发能力,为企业和个人开发者提供了一站式的解决方案。本文将从知识检索应用搭建、模型训练调优以及流程管理功能三个角度,全面评测阿里云百炼平台的实际使用体验。
191 3
|
2月前
|
机器学习/深度学习 人工智能 Java
人工智能平台PAI使用问题之alink安装部署卡住不动,是什么导致的
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2月前
|
机器学习/深度学习 人工智能 运维
人工智能平台PAI使用问题之一直显示"正在等待在云端的gateway资源",该如何处理
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
29天前
|
机器学习/深度学习 人工智能 Linux
【机器学习】Dify:AI智能体开发平台版本升级
【机器学习】Dify:AI智能体开发平台版本升级
113 0
|
2月前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI操作报错合集之引用github.com/alibaba/pairec包时报错,该如何解决
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2月前
|
机器学习/深度学习 人工智能 网络协议
人工智能平台PAI操作报错合集之报错 "curl: (35) TCP connection reset by peer" 表示什么
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2月前
|
机器学习/深度学习 人工智能 PyTorch
人工智能平台PAI使用问题之如何布置一个PyTorch的模型
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2月前
|
机器学习/深度学习 人工智能 物联网
人工智能平台PAI使用问题之worker的events没有合并是什么原因
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。