Pipelines
提供机器学习流程的创建、编排调度和管理,还提供了一个Web UI
。这部分主要基于Argo Workflow
。我相信这会是Kubeflow
后续要大力发展的部分。
Fairing
Kubeflow Fairing
是一个Python
软件包,可轻松在Kubeflow
上训练和部署ML模型。 Fairing
还可以扩展为在其他平台上进行训练或部署。目前, Fairing
已扩展为可在Google AI Platform上进行训练。 Fairing
简化了在混合云环境中构建,训练和部署机器学习(ML)训练job的过程。通过使用Fairing
并添加几行代码,可以直接从Jupyter notebook
在本地或在云中使用Python
代码运行ML训练作业。训练工作完成后,可以使用Fairing
将训练后的模型部署为预测端点。 上面介绍了Kubeflow
代码编辑器Jupyter Notebooks
,用于将代码打包构建image
的Fairing
,以及工作流组件Pipelines
核心组件,下面我们再介绍用来调参的Katib
和发布部署服务的KFServing
。
Katib
在了解katib
的处理流程之前,先介绍下katib
目前有哪些组件:
Experiment Controller :提供对Experiment CRD
的生命周期管理。
Trial Controller :提供对Trial CRD
的生命周期管理。
Suggestions :以Deployment
的方式部署,用Service
方式暴露服务,提供超参数搜索服务。目前有随机搜索,网格搜索,贝叶斯优化等。
Katib Manager :一个GRPC server
,提供了对Katib DB
的操作接口,同时充当Suggestion
与Experiment
之间的代理。
Katib DB :数据库。其中会存储Trial
和Experiment
,以及Trial
的训练指标。目前默认的数据库为MySQL
。
Katib架构
Katib工作原理
当一个Experiment
被创建的时候, Experiment Controller
会先通过Katib Manager
在Katib DB
中创建一个Experiment
对象,并且打上Finalizer
表明这一对象使用了外部资源(数据库)。随后, Experiment Controller
会根据自身的状态和关于并行的定义,通过Katib Manager
提供的GRPC
接口,让Manager
通过Suggestion
提供的GRPC
接口获取超参数取值,然后再转发给Experiment Controller
。在这个过程中, Katib Manager
是一个代理的角色,它代理了Experiment Controller
对Suggestion
的请求。拿到超参数取值后, Experiment Controller
会根据Trial Template
和超参数的取值,构造出Trial
的定义,然后在集群中创建它。
Trial
被创建后,与Experiment Controller
的行为类似, Trial Controller
同样会通过Katib Manager
在Katib DB
中创建一个Trial
对象。随后会构造出期望的Job
(如batchv1 Job
, TFJob
, PyTorchJob
等)和Metrics Collector Job
,然后在集群上创建出来。这些Job
运行结束后, Trial Controller
会更新Trial
的状态,进而Experiment Controller
会更新Experiment
的状态。 然后Experiment
会继续下一轮的迭代。之前的Trial
已经被训练完成,而且训练的指标已经被收集起来了。 Experiment
会根据配置,判断是否要再创建新的Trial
,如果需要则再重复之前的流程。 下图是从网络上(知乎@高策)找到的Katib
竞品对比分析图,可供参考:
超参优化是一种AutoML
的方法。 KubeFlow
把Katib
集成进来作为超参优化的一种方案。超参优化在实际的工作中还没有被大规模的应用,所以这部分的技术还需要一些时间来成熟。
KFServing
对于深度学习的产品化来说,训练只是手段不是目的,目的是将通过训练产生的模型放到手机的程序里或者互联网的应用中,用于语音或者文字的识别等应用场景中。
模型的服务化部署和离线预测也是机器学习流程中非常重要的部分。 KubeFlow
组件中可以看到,它提供基于TF Serving
, KFServing
, Seldon Core Serving
等好几种方案。由于机器学习框架很多,算法模型也各种各样。工业界一直缺少一种能真正统一的部署框架和方案。这方面KubeFlow
也仅仅是把常见的都集成了进来,但是并没有做更多的抽象和统一。 Kubeflow
提供两个支持多框架的模型服务工具: KFServing
和Seldon Core Serving
。或者,可以使用独立的模型服务系统,以便可以选择最能满足模型服务要求的框架。 对于TensorFlow模型,可以使用TensorFlow Serving
将TFJob
导出的模型进行实时预测。但是,如果打算使用多个框架,则应考虑如上所述使用KFServing
或Seldon Core Serving
。 KFServing
是Kubeflow
项目生态系统的一部分, Seldon Core Serving
是Kubeflow
支持的外部项目。看起来KubeFlow
社区更倾向KFServing
这套方案。
KFServing
提供了
CRD ,用于在任意框架上服务机器学习(ML)模型。它旨在通过为常见ML框架( Tensorflow
, XGBoost
, ScikitLearn
, PyTorch
和ONNX
等)提供高性能,高抽象的接口来解决模型服务用例。
NVIDIA Triton Inference Server
是一项REST
和GRPC
服务,用于对TensorRT
, TensorFlow
, Pytorch
, ONNX
和Caffe2
模型进行深度学习推理。该服务器经过优化,可以在GPU和CPU上大规模部署机器学习算法。 Triton
推理服务器以前称为TensorRT
推理服务器。 我们可以将NVIDIA Triton Inference Server
用作独立系统,但如上所述,更应该考虑使用KFServing
。 KFServing
也包括对NVIDIA Triton Inference Server
的支持。 赞!现在我们终于知道如何发布我们训练好的服务了!
虽然kubeflow
最开始只是基于tf-operator
,但后来随着项目发展最后变成一个基于云原生构建的机器学习任务工具大集合。从数据采集,验证,到模型训练和服务发布,几乎所有步骤Kubeflow
都提供解决方案的组件。
上面这张图中的组件我几乎全部介绍了一遍,由于篇幅限制,除了TF-Operator
, Metadata
, Prometheus
,加上剩下的其他组件( Argo
, Istio
...),我会在后续一一进行解剖介绍,TFJob甚至会深入到源码分析,如果对Kubeflow
感兴趣不要忘记点赞转发或直接关注我~
其他干货(必备技能):
从原理到实战,彻底搞懂Nginx!
从原理到实战,彻底搞懂Nginx(高级篇)
Python中的三个”黑魔法“与”骚操作“
作者简介
臧远慧:就职于中科星图股份有限公司(北京),研发部后端技术组。个人擅长Python/Java 开发,了解前端基础;熟练掌握MySQL,MongoDB,了解Redis;熟悉Linux 开发环境,掌握Shell 编程,有良好的Git 源码管理习惯;精通Nginx ,Flask、Swagger 开发框架;有Docker+Kubernetes 云服务开发经验。对人工智能、云原生有较大的兴趣。
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】