K8S向け機械学習ツール「Kubeflow」の詳しい解説

K8S向け機械学習ツール「Kubeflow」の詳しい解説

[51CTO.com オリジナル記事] Kubeflowには多くのコンポーネントがあり、各コンポーネントの機能について混乱しがちです。この記事ではまず、 Kubeflowを体系的にまとめ、各コンポーネントのそれぞれの用途を理解し、コンポーネント間の関係を整理して、必要なコンポーネントを合理的かつ迅速に選択できるようにします。次に、各コンポーネントの基礎となるアーキテクチャとプロセスを紹介し、さらに的を絞った学習のために詳細に分析します。

Kubeflow とは何ですか?

Kubeflowは機械学習ツールキットです。 Kubeflow は、K8S 上で実行されるテクノロジー スタックです。このテクノロジー スタックには多くのコンポーネントが含まれています。コンポーネント間の関係は比較的緩やかです。それらを一緒に使用することも、一部を個別に使用することもできます。次の図は、公式 Web サイトで ML システム コンポーネントを配置するためのプラットフォームとしての Kubeflow を示しています。

まずは Kubeflow のコンポーネントを見てみましょう。コンポーネントはたくさんありますか?次に、各コンポーネントの役割を段階的に説明します。 ML ワークフローは通常、ML システムを開発および展開する際の複数の段階で構成されます。 ML システムの開発は反復的なプロセスです。 ML ワークフローの各段階の出力を評価し、必要に応じてモデルとパラメータを変更して、モデルが引き続き目的の結果を生み出すようにする必要があります。 理解しやすくするために、次の図ではワークフローのステージを順番に示し、ワークフローに Kubeflow を追加して、各ステージでどの Kubeflow コンポーネントが役立つかを示しています。ワークフローの最後にある矢印はプロセスを指しており、プロセスの反復的な性質を示しています。

  • 実験フェーズでは、最初の仮説に基づいてモデルを開発し、モデルを繰り返しテストして更新し、望ましい結果を生成します。

    • ML システムで解決したい問題を特定します。

    • ML モデルのトレーニングに必要なデータを収集して分析します。

    • ML フレームワークとアルゴリズムを選択し、モデルの初期バージョンをコーディングします。

    • データを実験し、モデルをトレーニングします。

    • 最も効率的な処理と最も正確な結果を確保するために、モデルのハイパーパラメータを調整します。

  • 生産フェーズでは、次のプロセスを実行するシステムを導入します。

    • データをトレーニング システムに必要な形式に変換します (トレーニングと予測中にモデルが一貫して動作するようにするには、この変換プロセスは実験と本番の両方で同じである必要があります)。

    • ML モデルをトレーニングします。

    • オンライン予測用のモデルを提供するか、バッチ モードで実行します。

    • モデルのパフォーマンスを監視し、その結果をプログラムに入力してモデルを調整または再トレーニングします。

由此可以看出, Kubeflow的目标是基于K8S ,构建一整套统一的机器学习平台,覆盖最主要的机器学习流程(数据->特征->建模->服务→监控),同时兼顾机器学习的实验探索阶段和正式的生产环境。

Kubeflow组件

Kubeflow提供了一大堆组件,涵盖了机器学习的方方面面,为了对Kubeflow有个更直观深入的了解,先整体看一下Kubeflow都有哪些组件,并对Kubeflow的主要组件进行简单的介绍:

  • Central Dashboard: Kubeflowdashboard看板页面

  • Metadata:用于跟踪各数据集、作业与模型

  • Jupyter Notebooks :一个交互式业务IDE编码环境

  • Frameworks for Training:支持的ML框架

    • Chainer

    • MPI

    • MXNet

    • PyTorch

    • TensorFlow

  • Hyperparameter Tuning: Katib ,超参数服务器

  • Pipelines :一个ML的工作流组件,用于定义复杂的ML工作流

  • Tools for Serving:提供在上对机器学习模型的部署

    • KFServing

    • Seldon Core Serving

    • TensorFlow Serving(TFJob):提供对Tensorflow模型的在线部署,支持版本控制及无需停止线上服务、切换模型等

    • NVIDIA Triton Inference Server(Triton以前叫TensorRT)

    • TensorFlow Batch Prediction

  • Multi-Tenancy in Kubeflow:Kubeflow中的多租户

  • Fairing :一个将code打包构建image的组件

Kubeflowのほとんどのコンポーネントの実装は、 CRDを定義することによって機能します。現在、 Kubeflowの主なコンポーネントは次のとおりです。

  • Operator は、さまざまな機械学習フレームワーク ( TF-Operator PyTorch-Operator Caffe2-Operator MPI-Operator MXNet-Operator )のリソース スケジューリングと分散トレーニング機能を提供します

  • Pipelines は、機械学習のシナリオを実装するArgoベースのパイプライン プロジェクトです。機械学習プロセスの作成、オーケストレーション、スケジュール設定、管理を提供し、 Web UIも提供します

  • Katib は、並列検索や分散トレーニングなどをサポートする、さまざまなOperator基づいたハイパーパラメータ検索とシンプルなモデル構造検索のためのシステムです。ハイパーパラメータの最適化は実際の作業では広く使用されていないため、この部分のテクノロジが成熟するまでにはまだ時間がかかります。

  • Serving は、さまざまなフレームワークでトレーニングされたモデルのサービスベースのデプロイメントとオフライン予測をサポートします。 KubeflowTFServing KFServing Seldonなどに基づくいくつかのソリューションを提供します機械学習フレームワークは数多く存在するため、アルゴリズムモデルも多種多様です。業界には、真に統一された導入フレームワークとソリューションが欠けていました。この点では、 Kubeflowは共通のものを統合しただけで、それ以上の抽象化や統一は行っていません。

上記では、各コンポーネントの基本的な理解と全体的な把握に役立つように、 Kubeflowコンポーネントを体系的にまとめました。鉄は熱いうちに打て。次に、各コンポーネントのアーキテクチャとワークフローを詳しく紹介します。

Jupyter ノートブック

Jupyter自体は多くのコンポーネントで構成されています。個人ユーザーの場合は、 JupyterLab + Notebookを使用すれば十分です。しかし、 Jupyter企業レベルのプラットフォームとみなすだけでは十分ではありません。このとき、複数のユーザー、リソースの割り当て、データの永続性、データの分離、高可用性、権限制御など、考慮すべき点が多数あります。これらの問題こそが、まさにK8Sの強みです。したがって、 JupyterK8Sを併用するのは非常に自然なことです。 JupyterHub 、マルチユーザーJupyterポータルです。設計当初から、マルチユーザーの作成、リソースの割り当て、データの永続化などの機能がプラグイン モードになっていました。その動作メカニズムを下の図に示します。

JupyterHubフレームワークなので、様々なプラグインがあります。たとえば、単一マシン展開でOSユーザーを使用してマルチユーザーとデータの分離を実現したり、 OAuthを使用してユーザー認証などを完了したりすることができます。もちろん、 JupyterHub全体K8Sを組み合わせるのが完璧な姿勢です。 KubeflowコンポーネントMulti-Tenancy in KubeflowについてはKubeflow調べていません。これに基づいて実装されているかどうかは後で比較して検討できます。 次に、 Kubeflowについて説明します。分離の欠如とリソースの制限により、現在のところ、データ サイエンティストのsoloシナリオにのみ適しており、データ サイエンティストのチーム コラボレーション シナリオをサポートすることはできません。公平に言えば、まだユーザーの信頼は得られていない。 Kubeflow default-editor ServiceAccount Jupyter notebook Pod割り当てます。このサービス アカウントは、 kubeflow-edit ClusterRoleにバインドされており 资源具有命名空间范围的权限,其中包括:

  • Pod

  • Deployment

  • Service

  • Job

  • TFJob

  • PyTorchJob

因此,可以直接从Kubeflow中的Jupyter notebook创建上述资源。 notebook中已预装了命令行工具,可以说也是非常简单了。 Jupyter notebook绑定在Kubeflow中时,可以使用Fairing库使用TFJob提交训练作业。训练作业可以运行在单个节点,也可以分布在同一个集群上,但不能在notebook pod内部运行。通过Fairing库提交作业可以使数据科学家清楚地了解Docker容器化和pod分配等流程。 总体而言, Kubeflow-hosted notebooks可以更好地与其他组件集成,同时提供notebook image的可扩展性。

Pipelines

Kubeflow v0.1.3之后, pipeline已经成为Kubeflow的核心组件。 Kubeflow的目的主要是为了简化在上运行机器学习任务的流程,最终希望能够实现一套完整可用的流水线, 来实现机器学习从数据到模型的一整套端到端的过程。 而pipeline是一个工作流平台,能够编译部署机器学习的工作流。所以从这个层面来说, pipeline能够成为Kubeflow的核心组件一点也不意外。 kubeflow/pipelines实现了一个工作流模型。所谓工作流,或者称之为流水线( pipeline ),可以将其当做一个有向无环图( DAG )。其中的每一个节点被称作组件( component )。组件处理真正的逻辑,比如预处理,数据清洗,模型训练等。每一个组件负责的功能不同,但有一个共同点,即组件都是以Docker镜像的方式被打包,以容器的方式被运行的。 下图显示了Kubeflow Pipelines UI中管道的运行时执行图:

实验( experiment )是一个工作空间,在其中可以针对流水线尝试不同的配置。用户在执行的过程中可以看到每一步的输出文件,以及日志。步( step )是组件的一次运行,输出工件( step output artifacts )是在组件的一次运行结束后输出的,能被系统的前端理解并渲染可视化的文件。

Pipelines架构

下图是官方提供的Kubeflow Pipelines架构图:

看起来还是比较复杂的,但整体可以将pipeline主要划分为八部分:

  • Python SDK : 用于创建kubeflow pipelines组件的特定语言( DSL )。

  • DSL compiler : 将Python代码转换成YAML静态配置文件( DSL编译器)。

  • Pipeline Web Server : pipeline的前端服务,它收集各种数据以显示相关视图:当前正在运行的pipeline列表, pipeline执行的历史记录,有关各个pipeline运行的调试信息和执行状态等。

  • Pipeline Service pipeline的后端服务,调用K8S服务从YAML创建pipeline运行。

  • Kubernetes Resources : 创建CRD s运行pipeline

  • Machine Learning Metadata Service : 用于监视由Pipeline Service创建的资源,并将这些资源的状态持久化在ML元数据服务中(存储任务流容器之间的input / output数据交互)。

  • Artifact Storage : 用于存储MetadataArtifact Kubeflow Pipelines将元数据存储在MySQL数据库中,将工件存储在Minio服务器Cloud Storage等工件存储中。

  • Orchestration Controllers :任务编排,比如Argo Workflow控制器,它可以协调任务驱动的工作流。

Pipelines工作原理

流水线的定义可以分为两步,首先是定义组件,组件可以从镜像开始完全自定义。这里介绍一下自定义的方式:首先需要打包一个Docker镜像,这个镜像是组件的依赖,每一个组件的运行,就是一个Docker容器。其次需要为其定义一个python函数,描述组件的输入输出等信息,这一定义是为了能够让流水线理解组件在流水线中的结构,有几个输入节点,几个输出节点等。接下来组件的使用就与普通的组件并无二致了。 实现流水线的第二步,就是根据定义好的组件组成流水线,在流水线中,由输入输出关系会确定图上的边以及方向。在定义好流水线后,可以通过python中实现好的流水线客户端提交到系统中运行。 虽然kubeflow/pipelines的使用略显复杂,但它的实现其实并不麻烦。整个的架构可以分为五个部分,分别是ScheduledWorkflow CRD以及其operator流水线前端,流水线后端, Python SDKpersistence agent

  • ScheduledWorkflow CRD扩展了argoproj/argoWorkflow定义。这也是流水线项目中的核心部分,它负责真正地在上按照拓扑序创建出对应的容器完成流水线的逻辑。

  • Python SDK负责构造出流水线,并且根据流水线构造出ScheduledWorkflowYAML定义,随后将其作为参数传递给流水线系统的后端服务。

  • 后端服务依赖关系存储数据库(如MySQL )和对象存储(如S3 ),处理所有流水线中的CRUD请求。

  • 前端负责可视化整个流水线的过程,以及获取日志,发起新的运行等。

  • Persistence agent负责把数据从etcdsync到后端服务的关系型数据库中,其实现的方式与CRD operator类似,通过informer来监听对应资源实现。

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 ,用于将代码打包构建imageFairing ,以及工作流组件Pipelines核心组件,下面我们再介绍用来调参的Katib和发布部署服务的KFServing

Katib

在了解katib的处理流程之前,先介绍下katib目前有哪些组件:

  • Experiment Controller :提供对Experiment CRD的生命周期管理。

  • Trial Controller :提供对Trial CRD的生命周期管理。

  • Suggestions :以Deployment的方式部署,用Service方式暴露服务,提供超参数搜索服务。目前有随机搜索,网格搜索,贝叶斯优化等。

  • Katib Manager :一个GRPC server ,提供了对Katib DB的操作接口,同时充当SuggestionExperiment之间的代理。

  • Katib DB :数据库。其中会存储TrialExperiment ,以及Trial的训练指标。目前默认的数据库为MySQL

Katib架构

Katib工作原理

当一个Experiment被创建的时候, Experiment Controller会先通过Katib ManagerKatib DB中创建一个Experiment对象,并且打上Finalizer表明这一对象使用了外部资源(数据库)。随后, Experiment Controller会根据自身的状态和关于并行的定义,通过Katib Manager提供的GRPC接口,让Manager通过Suggestion提供的GRPC接口获取超参数取值,然后再转发给Experiment Controller 。在这个过程中, Katib Manager是一个代理的角色,它代理了Experiment ControllerSuggestion的请求。拿到超参数取值后, Experiment Controller会根据Trial Template和超参数的取值,构造出Trial的定义,然后在集群中创建它。

Trial被创建后,与Experiment Controller的行为类似, Trial Controller同样会通过Katib ManagerKatib DB中创建一个Trial对象。随后会构造出期望的Job (如batchv1 Job TFJob PyTorchJob等)和Metrics Collector Job ,然后在集群上创建出来。这些Job运行结束后, Trial Controller会更新Trial的状态,进而Experiment Controller会更新Experiment的状态。 然后Experiment会继续下一轮的迭代。之前的Trial已经被训练完成,而且训练的指标已经被收集起来了。 Experiment会根据配置,判断是否要再创建新的Trial ,如果需要则再重复之前的流程。 下图是从网络上(知乎@高策)找到的Katib竞品对比分析图,可供参考:

超参优化是一种AutoML的方法。 KubeFlowKatib集成进来作为超参优化的一种方案。超参优化在实际的工作中还没有被大规模的应用,所以这部分的技术还需要一些时间来成熟。

KFServing

对于深度学习的产品化来说,训练只是手段不是目的,目的是将通过训练产生的模型放到手机的程序里或者互联网的应用中,用于语音或者文字的识别等应用场景中。

模型的服务化部署和离线预测也是机器学习流程中非常重要的部分。 KubeFlow组件中可以看到,它提供基于TF Serving KFServing Seldon Core Serving等好几种方案。由于机器学习框架很多,算法模型也各种各样。工业界一直缺少一种能真正统一的部署框架和方案。这方面KubeFlow也仅仅是把常见的都集成了进来,但是并没有做更多的抽象和统一。 Kubeflow提供两个支持多框架的模型服务工具: KFServingSeldon Core Serving 。或者,可以使用独立的模型服务系统,以便可以选择最能满足模型服务要求的框架。 对于TensorFlow模型,可以使用TensorFlow ServingTFJob导出的模型进行实时预测。但是,如果打算使用多个框架,则应考虑如上所述使用KFServingSeldon Core Serving KFServingKubeflow项目生态系统的一部分, Seldon Core ServingKubeflow支持的外部项目。看起来KubeFlow社区更倾向KFServing这套方案。

KFServing提供了 CRD ,用于在任意框架上服务机器学习(ML)模型。它旨在通过为常见ML框架( Tensorflow XGBoost ScikitLearn PyTorchONNX等)提供高性能,高抽象的接口来解决模型服务用例。

NVIDIA Triton Inference Server是一项RESTGRPC服务,用于对TensorRT TensorFlow Pytorch ONNXCaffe2模型进行深度学习推理。该服务器经过优化,可以在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感兴趣不要忘记点赞转发或直接关注我~

其他干货(必备技能):

  1. 从原理到实战,彻底搞懂Nginx!

  2. 从原理到实战,彻底搞懂Nginx(高级篇)

  3. Python中的三个”黑魔法“与”骚操作“

作者简介 

臧远慧:就职于中科星图股份有限公司(北京),研发部后端技术组。个人擅长Python/Java 开发,了解前端基础;熟练掌握MySQL,MongoDB,了解Redis;熟悉Linux 开发环境,掌握Shell 编程,有良好的Git 源码管理习惯;精通Nginx ,Flask、Swagger 开发框架;有Docker+Kubernetes 云服务开发经验。对人工智能、云原生有较大的兴趣。

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

<<:  AI | 機械知能が人間に代わって行う 5 つのこと

>>:  COVID-19パンデミックの中、米国の産業界ではロボットがアメリカ人の雇用を急速に置き換えている

ブログ    
ブログ    
ブログ    

推薦する

全人代副代表の馬化騰氏は8つの書面提案を提出し、ブロックチェーンや人工知能など17の質問に答えた。

[[221404]] 3月3日午後9時30分、全国人民代表大会の代表でテンセント会長の馬化騰氏が黒...

モバイルロボットソフトウェアの自動テストの課題への対応

自動化されたモバイル ホーム ロボットの複雑さを探り、セットアップの特有の課題と制約の克服に焦点を当...

深度はディープニューラルネットワークに具体的に何をもたらすのでしょうか?

[[186161]]起源近年、人工知能は爆発的な成長を遂げており、ディープラーニングはその主な原動...

人工知能の時代は私たちの生活にどのような影響を与えるのでしょうか?

これは視覚障害者向けに設計された特別な人工知能メガネです。このメガネを通して、視覚障害者は再びこの色...

ディープラーニングは壁にぶつかる?ルカンとマーカスの間の争いを引き起こしたのは誰ですか?

今日の主人公は、AI の世界で互いに愛し合い、憎み合う古くからの敵同士です。ヤン・ルカンとゲイリー・...

自動運転の時代において、ハッカーがあなたの車を破壊し、あなたを殺す方法はいくつあるでしょうか?

[[383265]] 「ワイルド・スピード8」を見たことがある友人なら、ハッカーが1,000台の車...

ケーキを食べて、ケーキも残すことはできないのですか?清華大学チーム、非常に正確で解釈可能な分類モデルを提案

[[432462]]既存の機械学習分類モデルは、性能と解釈可能性に基づいて、大まかに 2 つのカテ...

スマート製造:デジタル世界と物理世界の統合

スマート製造:デジタル世界と物理世界の統合自動車業界と製造業界の状況の変化により、サプライ チェーン...

スニーカーロボット大戦

[[430002]] 2019年、ボストンのバックベイにあるストリートウェアショップ「Bodega」...

OpenAI、自然言語をコードに翻訳するAIシステムCodexのテストを開始

マイクロソフトなどの企業から強力なサポートを受けて、人工知能のスタートアップ企業であるOpenAIは...

RNN (リカレント ニューラル ネットワーク) の背後にある数学の図解説明

導入最近では、機械学習、ディープラーニング、人工ニューラルネットワークに関する議論がますます増えてい...

...

...