Kubeflowを構築する

2021年10月27日(水)
木村 友哉(きむら ともや)張替 清音(はりがえ きよなり)
連載の2回目となる今回は、Kubeflowの内部構造の概要と構築手順について解説します。

はじめに

前回は、Kubeflow登場の背景とその概要、機械学習パイプラインを作成するためのフレームワークであるTensorFlow Extended(TFX)の概要を解説しました。

今回は、最初にKubeflowを構築し利用する上で理解しておくべき内部構造の概要を解説し、次に構築手順と設定について、実際に構築を行いながら確認していきます。

Kubeflowのアーキテクチャ概要

Kubeflowの構築を始める前に、Kubeflowのアーキテクチャの概要を解説します。構築時において各コンポーネントの動作を細かく意識する必要はありませんが、設定変更やトラブルシューティングなどを行う上で役に立ちます。

図1:Kubeflowのアーキテクチャ概要

図1:Kubeflowのアーキテクチャ概要

図1はKubeflowおよびKubernetesの主なコンポーネントとリクエストフローの概要図です。図に示すように、Kubeflowの各コンポーネントはKubernetes上で連携し合うことで、機械学習プラットフォームとしての機能を実現しています。

注釈
図1では、Kubeflowのアーキテクチャの概要を説明するため、各コンポーネントを簡略化して図示しています。実際にKubeflowによってデプロイされるコンポーネントは、バックエンドコンポーネントや本連載では取り上げないJob管理コンポーネントなどを含め、他にも多く存在します。
また本稿では、KubernetesコンポーネントのリクエストフローやDeployment、Pod、Service、Custom Resource Definitions(以下、CRD)等のKubernetesリソースの説明は省略しています。必要に応じて、公式ドキュメント等を参照してください。

KubeflowにおけるIstioの役割

Istioはマイクロサービス間の相互の通信を管理し、サービスメッシュを実現するOSSプロダクトです。KubeflowにおけるIstioの主な役割は次の2つです。

・ゲートウェイ

Kubeflowへの入り口の役割はIstioのIngress Gatewayというコンポーネントが担います。Kubernetesクラスタ外からのリクエストを受け付け、それに応じたコンポーネントに連携します。ユーザーがKubeflow UI(WebUI)にアクセスする際や、機械学習モデルの推論インターフェース(REST API)から推論結果を取得する場合など、Kubeflowに対するリクエストはすべてIngress Gatewayを介し、各コンポーネントへ連携されます。

・コンポーネント間の通信管理

図1に示すとおり、Kubeflowのコンポーネント群はIstioが構築するサービスメッシュ内で相互に連携しています。Istioはコンポーネント間の通信を管理し、アクセス制御やルーティングを行います。また、Istioが果たす重要な役割の1つとして、サービスメッシュ内に作成された新たなエンドポイントを自動的に検出し管理できる点が挙げられます。例えば、ユーザーが新たに作成したノートブックサーバーに接続して利用することもIstioなしでは実現できません。

CRDとカスタムコントローラー

Kubeflowが機械学習プラットフォームとしての機能を実現するための重要な概念として、CRDとカスタムコントローラーがあります。Notebook ServersやKubeflow PipelineなどのKubeflowコンポーネントの裏側は、CRDとカスタムコントローラーが支えています。その例として、次のフローで説明します。

・ノートブックサーバー作成フロー

  1. Notebook Serversの管理画面よりノートブックサーバーを作成すると、そのバックエンドコンポーネントはAPI Serverを介して、Notebook CRDオブジェクトを作成します
  2. Notebook CRDオブジェクトが作成されると、必要なKubernetesリソース(Deployment、Serviceなど)はNotebook ControllerによりAPI Serverを介して作成され、Node上にノートブックサーバーのPodを起動します

・機械学習パイプライン実行フロー

  1. Kubeflow Pipelineの管理画面からパイプラインを実行すると、そのバックエンドコンポーネントはAPI Serverを介してパイプラインを実行するために必要なCRDオブジェクトを作成します
  2. CRDオブジェクトが作成されると、Pipeline Orchestration Controllerは定義されたパイプライン内の一連のステップを完了するためのPodを作成し、処理を実行します。※デフォルトではArgo Workflowsのワークフローエンジンが利用されます

KFServingとKnative

KFServingはKnativeというコンポーネントに基づき構築されています。KnativeはKubernetes上でのサーバーレスワークロードを管理するOSSのプロダクトです。なお、KnativeもIstioのサービスメッシュを利用します。KFServingでは、Knativeのコンポーネント群と連携することで、Inference ServiceというCRDオブジェクトを作成するだけで、機械学習モデルのサービングが行えます。なお、KFServingの詳しいアーキテクチャについては、本連載の機械学習モデルのサービングを紹介する回で解説する予定です。

ここまで、Kubeflowのアーキテクチャ概要について解説しました。これだけ多くのコンポーネントで構成されているKubeflowの構築はとても大変な作業になるのではという印象を持たれた方も多いかと思います。Kubeflowは以下に示す2つのデプロイ方法をサポートしておりますが、幸いなことにそのいずれ方法でも、容易に構築が可能となっています。

・パッケージ化されたディストリビューションを利用してデプロイする方法

パブリッククラウドのプラットフォームやサードパーティベンダにより開発されているパッケージ化されたディストリビューションで構築する方法です。セットアップスクリプトを実行することで自動的にKubeflowを構築できます

・Kubeflowのコンポーネントを個別にデプロイする方法

Notebook ServersやKubeflow PipelinesといったKubeflowのコンポーネントを個別に構築する方法です。定義済みマニフェスト(構成ファイル)を手動で適用することで構築できます。

本稿では、パッケージ化されたディストリビューションを利用してKubeflowを構築します。

著者
木村 友哉(きむら ともや)
NTTデータ先端技術株式会社

ソフトウェアソリューション事業本部 AIソリューション事業部 ビッグデータ基盤担当

2020年入社。現在はKubernetesやKubeflowを中心としたOSSを用いたクラウドネイティブなデータ分析・活用基盤に関する技術検証やソリューション開発に従事。

著者
張替 清音(はりがえ きよなり)
NTTデータ先端技術株式会社

ソフトウェアソリューション事業本部 AIソリューション事業部 ビッグデータ基盤担当

2017年入社。HadoopやSparkといったOSSのビッグデータ基盤の導入支援や技術開発を経て、現在はサイバーセキュリティ対策のためのデータ分析基盤の構築や、 OSSをベースとしたクラウドネイティブなデータ分析・活用基盤に関する技術検証やソリューション開発に従事。

連載バックナンバー

AI・人工知能技術解説
第9回

機械学習モデルの継続的な改善に向けて

2022/6/13
連載の最終回となる今回は、機械学習モデルの開発と運用におけるパイプライン全体を協調動作させモデルを継続的に改善する仕組みについて解説します。
AI・人工知能技術解説
第8回

KFServingで機械学習モデルをサービング

2022/4/27
連載の8回目となる今回は、学習済みモデルのデプロイの手順とその運用で利用するKubeflowの機能やコンポーネントについて解説します。
AI・人工知能技術解説
第7回

TFXを使った機械学習パイプラインの構築(デプロイ編)

2022/3/30
連載の7回目となる今回は、実装編で構築した機械学習パイプラインをKubeflow Pipelinesにデプロイし実行します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています