Kubeflow 1.0发布:适合每一位用户的云原生机器学习方案


我们荣幸地代表项目社区在这里宣布,Kubeflow的首个主要版本,即1.0版本已经正式发布。Kubeflow于2017年12月在KubeCon美国大会上宣布开源,并在过去两年中迎来了远超预期的迅猛发展。如今,来自30多个参与组织的数百名贡献者正为Kubeflow的发展做出不懈努力。

Kubeflow的目标是让机器学习(ML)工程师以及数据科学家们,能够轻松利用云资产(包括公有云以及内部资源)处理工作负载。你可以在任何兼容Kubernetes的集群之上使用Kubeflow。

在1.0版本中,一组核心应用已经能够稳定运作并顺利毕业,开始为Kubernetes上的高效模型开发、构建、训练以及部署贡献自己的力量。(关于Kubeflow的版本控制策略毕业要求信息,请点击链接查看。)

此次毕业的应用包括:
  • Kubeflow的UI,即集中仪表板
  • Jupyter notebook控制器与Web应用
  • 用于分布式训练的Tensorflow Operator(TFJob)以及PyTorch Operator
  • 用于部署以及升级的kfctl
  • 用于多用户管理的配置文件控制器与UI


利用Kubeflow进行开发、构建、训练与部署

001.png

Kubeflow的1.0应用版本将全面支撑起用户的开发、构建、训练与部署这个完整的使用过程。

利用Kubeflow 1.0,用户们可以使用Jupyter开发机器学习模型,而后使用fairing(Kubeflow中的Python SDK)等工具构建容器并创建用于模型训练的Kubernetes资源。在模型训练完成之后,用户还可以使用KFServing创建并部署用于推理的服务器。

在Kubernetes上开始机器学习之旅

Kubernetes是一套出色的平台,可充分利用来自公有云或者内部设施的资源;然而,部署针对机器学习进行优化的Kubernetes,并将其与云体系整合起来,却绝对不像说起来这么轻松。在此次公布的1.0版本中,我们提供一套CLI以及对应配置文件,允许大家使用以下单一命令完成Kubeflow部署:
kfctl apply -f kfctl_gcp_iap.v1.0.0.yaml
kfctl apply -f kfctl_k8s_istio.v1.0.0.yaml
kfctl apply -f kfctl_aws_cognito.v1.0.0.yaml
kfctl apply -f kfctl_ibm.v1.0.0.yaml

Kubernetes上的Jupyter

在Kuberflow的用户调查中,数据科学家们一直在强调Jupyter notebook的重要意义。此外,他们还要求将孤立的Jupyter notebook与Kubernetes on Cloud的高效率结合起来,从而利用GPU设备训练更大的模型、并行运行多项实验。Kubeflow让Kubernetes中的资源管理变得更轻松,这意味着数据中心内的全部资源与功能将真正供数据科学家们随意支配。

利用Kubeflow,每位数据科学家乃至数据团队都将拥有自己的命名空间,在其中轻松运行工作负载。命名空间提供强大的安全保障与资源隔离机制。利用Kubernetes资源配额功能,平台管理员能够轻松限制个人或者团队用户的资源消耗上限,以保证资源调度的公平性。

在Kubeflow部署完成之后,用户可以利用Kubeflow的中央仪表板启动notebook:
002.png

Kubeflow的notebook管理UI:用户可以在这里查看并接入现有notebook,或者启动一个新的notebook。

在Kubeflow UI中,用户可以通过选择Jupyter预设的Docker镜像、或者导入自定义镜像的URL来轻松启动新的notebook。接下来,用户需要设置对接该notebook的CPU与GPU数量,并在notebook中添加配置与密码参数以简化对外部库及数据库的访问。
003.png

通过分布式训练加快训练速度

分布式训练已经成为谷歌内部的基本规范,同时也是TensorFlow与PyTorch等深度学习框架当中最激动人心也最具吸引力的能力之一。

我们当初之所以要打造Kubeflow项目,一大核心诉求就是充分利用Kubernetes以简化分布式训练流程。借助Kubernetes的自定义资源,Kubeflow得以显著降低TensorFlow与PyTorch上的分布式训练难度。用户需要首先定义一种TFJob或者PyTorch资源,如下所示。接下来,由定制化控制器负责扩展并管理所有单一进程,并通过配置实现进程之间的通信会话:
apiVersion: kubeflow.org/v1
kind: TFJob
metadata:
name: mnist-train
spec:
tfReplicaSpecs:
Chief:
  replicas: 1
    spec:
      containers:
        image: gcr.io/alice-dev/fairing-job/mnist
        name: tensorflow
Ps:
  replicas: 1
  template:
    spec:
      containers:
        image: gcr.io/alice-dev/fairing-job/mnist
        name: tensorflow
Worker:
  replicas: 10      
    spec:
      containers:
        image: gcr.io/alice-dev/fairing-job/mnist
        name: tensorflow

利用TensorBoard监控模型训练

为了训练出高质量模型,数据科学家需要使用TensorBoard等工具对训练流程进行调试与监控。使用Kubernetes以及Kubeflow,用户可以创建如下YAML文件,进而轻松在自己的Kubernetes集群上部署TensorBoard。当在Kubeflow上部署TensorBoard时,用户可以使用Kubeflow提供的AuthN与AuthZ集成在仅有云上安全访问Kubeflow背后的TensorBoard:
// 在Google Cloud Platform上: https://${KFNAME}.endpoints.${PROJECT}.cloud.goog/mnist/kubeflow-mnist/tensorboard/
// 在AWS上:
http://8fb34ebe-istiosystem-istio-2af2-925939634.us-west-2.elb.amazonaws.com/mnist/anonymous/tensorboard/

无需将“kubectl port-forward”转发至各Pod。

模型部署

KFServing是一种基于Knative的自定义资源,用于机器学习模型的部署与管理。KFServing能够带来底层原语(例如Deployment)所无法提供的多种功能,例如:
  1. 利用现成的模型服务器部署模型(用户无需自行编写flask应用)
  2. 基于负载水平进行自动规模伸缩,且同时兼容运行在GPU上的模型
  3. 以安全、受控的方式发布模型
  4. 可解释性(alpha测试阶段)
  5. 载荷记录(alpha测试阶段)


以下为KFServing规范的具体示例,其中演示了模型的具体部署流程。用户只需要使用storageUri提交模型文件URI即可:
apiVersion: "serving.kubeflow.org/v1alpha2"
kind: "InferenceService"
metadata:
name: "sklearn-iris"
spec:
default:
predictor:
  sklearn:
    storageUri: "gs://kfserving-samples/models/sklearn/iris"

感兴趣的朋友可以点击此处了解上述功能的具体使用方法。

模型之外的其他解决方案

单纯创建模型并不是我们的目标,真正重要的是让这些模型运行起来并发挥实际作用。为了让机器学习模型正常工作,我们往往需要将其整合至应用程序当中——具体包括Web应用程序、移动应用程序乃至某些后端报告流水线。

Flask以及bootstrap等框架允许数据科学家们轻松创建出丰富且极具视觉吸引力的Web应用程序,同时保证自己的模型能够正常工作。以下是我们在Kubeflow中为mnist示例截取的UI展示效果。

利用Kubeflow,数据科学家无需学习最新概念与平台知识、也不必处理入口与网络证书等复杂因素,即可轻松将模型部署至应用程序之内。整个部署过程与TensorBoard使用方法类似,唯一的不同只是需要使用Docker镜像与标记。
004.png

如果我们的Kubeflow符合你的实际需求,我们建议你:
  1. 参阅我们的说明文档,了解更多如何在公有或者私有基础设施上部署Kubeflow的细节信息。
  2. 逐步查看mnist教程,亲自体验我们的核心应用成果。


Kubeflow下一阶段发展方向

除了本文中提到的内容之外,Kubeflow还拥有多种其他功能。目前正处于开发阶段的应用包括:
  • Pipelines(beta阶段),用于定义复杂的机器学习工作流
  • Metadata(beta阶段),用于跟踪各数据集、作业与模型
  • Katib(beta阶段),用于超参数调优
  • 面向xgboost等其他框架的分布式操作程序


在后续升级当中,我们将逐步推出以上应用的1.0版本。

原文链接:Kubeflow 1.0: Cloud-Native ML for Everyone

0 个评论

要回复文章请先登录注册