我们荣幸地代表整个社区宣布我们的第一个主要版本Kubeflow 1.0。 Kubeflow于2017年12月在美国Kubecon开源,并且在过去两年中,Kubeflow项目的增长超出了我们的期望。现在有来自30多个参与组织的数百名贡献者。在1.0版本中,我们将逐步提供一组稳定的应用程序,这些应用程序是在Kubernetes上有效开发,构建,训练和部署模型所需的。
Kubeflow的目标是使机器学习(ML)工程师和数据科学家能够轻松地利用云资产(公有云或本地机房)来处理ML工作负载。您可以在任何符合Kubernetes的集群上使用Kubeflow。
在1.0版本中,我们将逐步提供一组稳定的应用程序,这些应用程序是在Kubernetes上有效开发,构建,训练和部署模型所需的。
毕业应用包括:
- Kubeflow’s UI, the central dashboard
- Jupyter notebook controllerandweb app
- Tensorflow Operator(TFJob) andPyTorch Operatorfor distributed training
- kfctl for deployment and upgrades
- Profile controller and UI for multiuser management
使用Kubeflow开发,构建,训练和部署
使用Kubeflow 1.0,用户可以使用Jupyter开发模型。然后,他们可以使用fairing(Kubeflow的python SDK)之类的Kubeflow工具来构建容器,并创建Kubernetes资源来训练他们的模型。一旦有了模型,他们就可以使用KFServing创建和部署用于推理的服务器。
Kubernetes上的ML入门
Kubernetes是一个出色的平台,可用于基础架构(无论是在公共云还是本地),但是部署针对ML优化并与您的云集成的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
在Kubeflow的用户调查中,数据科学家一直在表达Jupyter notebooks的重要性。此外,他们需要能够将孤立的Jupyter notebooks与Kubernetes on Cloud的效率集成在一起,以使用GPU训练更大的模型并并行运行多个实验。 Kubeflow使利用Kubernetes进行资源管理变得容易,并将数据中心的全部功能置于数据科学家的掌握之中。
借助Kubeflow,可以为每个数据科学家或团队提供各自的命名空间,以在其中运行其工作负载。命名空间提供安全性和资源隔离。使用Kubernetes资源配额,平台管理员可以轻松限制个人或团队可以消耗多少资源,以确保公平的调度。
部署Kubeflow之后,用户可以利用Kubeflow的中央仪表板来启动notebooks:
在Kubeflow UI中,用户可以通过选择Jupyter的预构建docker镜像之一或输入自定义镜像的URL来轻松启动新notebook。接下来,用户可以设置要连接到notebook的CPU和GPU数量。notebook还可以包含配置和密码参数,以简化对外部存储库和数据库的访问。
通过分布式训练更快地训练模型
分布式训练是Google的规范,也是TensorFlow和PyTorch等深度学习框架最令人兴奋和要求最高的功能之一。
当我们启动Kubeflow时,我们的主要动机之一就是利用Kubernetes简化分布式训练。 Kubeflow提供Kubernetes自定义资源,这些资源使使用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:
// On GCP:
https://${KFNAME}.endpoints.${PROJECT}.cloud.goog/mnist/kubeflow-mnist/tensorboard/
// On AWS:
http://8fb34ebe-istiosystem-istio-2af2-925939634.us-west-2.elb.amazonaws.com/mnist/anonymous/tensorboard/
无需使用Kubectl port-forward
转发到各个Pod。
部署模型
KFServing是基于Knative的自定义资源,用于部署和管理ML模型。 KFServing提供了以下功能:
- Deploy your model using out-of-the-box model servers (no need to write your own flask app)
- Auto-scaling based on load, even for models served on GPUs
- Safe, controlled model rollout
- Explainability (alpha)
- Payload logging (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"
查看示例以了解如何使用上述功能。
解决方案不仅仅是模型
为了使ML正常工作,您通常需要将该模型整合到应用程序中-无论是Web应用程序,移动应用程序还是某些后端报告管道的一部分。
诸如flask和bootstrap之类的框架使数据科学家可以轻松地创建丰富的,具有视觉吸引力的Web应用程序,从而使他们的模型能够正常工作。下面是我们为Kubeflow的mnist示例构建的UI的屏幕截图。
借助Kubeflow,数据科学家无需学习新的概念或平台即可部署其应用程序,也无需处理入口,网络证书等。他们可以像TensorBoard一样部署其应用程序。唯一更改的是Docker镜像和标志。
如果这听起来像您要找的东西,我们建议:
1.访问我们的文档,以了解如何在公共或私有云上部署Kubeflow。
2.逐步完成mnist教程,亲自尝试我们的核心应用程序。
Kubeflow其他的功能
除了我们在本博文中介绍的内容外,Kubeflow还有很多其他功能。除了此处列出的应用程序,我们还在开发许多应用程序:
- Pipelines(beta) for defining complex ML workflows
- Metadata(beta) for tracking datasets, jobs, and models,
- Katib(beta) for hyper-parameter tuning
- Distributed operators for other frameworks like xgboost
在将来的版本中,我们会将这些应用程序升级到1.0。