Kubeflow調査

Kubeflowの基本概念

Kubeflowは、Google主導のKubernetesと機械学習ワークフローの統合フレームワークであり、機械学習タスクがクラウド環境でより適切に実行され、分散処理を実行し、多数のマシンに拡張できるようにします。さまざまなプラットフォームに移植して、モデル。効果など。

Kubeflowでできることは次のとおりです。

  • データの準備
  • モデルトレーニング
  • 予測サービング
  • サービス管理

機械学習ワークフローは、開発プロセス生産プロセスの2つの段階に分かれています。

ここに画像の説明を挿入

図1.開発プロセスと生産プロセス

Kubeflowには次の概念があります。

  • パイプライン-一連の計算ステップを実行し、複数のコンポーネントで構成される機械学習ワークフローパイプライン

  • コンポーネント-ワークフロー内の計算タスク。これはPython関数と同等であり、入力と出力が固定されており、相互に依存しています。

  • 実験-ワークフローの構成環境、実行パラメーターのセット

  • 実行-実験環境でのパイプラインの実行を表します

  • 定期的な実行-定期的に繰り返し実行される実行であり、ジョブとも呼ばれます。

  • ステップ-実行中のコンポーネントの実行に対応します

  • アーティファクト-データセットを取得するための入力または出力

ここに画像の説明を挿入

図2.Kubeflowの全体的な設計

Kubeflowコンポーネントを作成する

Kubeflowの設計では、各コンポーネントは1つpython 函数であり、Docker 容器複数のコンポーネントにパッケージ化されパイプライン形成し、実行のためにKubernetesに送信され、指定されたコンピューティングリソース要件が必要に応じて割り当てられ、Kubeflowパイプラインのサーバーがそれを管理します。システムによってロードされる入力データと出力データのs3パスを指定します。実行レコード、パイプライン構成、実行結果はKubeflow UIで表示でき、新しい実行を作成できます。

コンポーネントは特定のコンピューティングタスクであり、Tensorflow、PyTorch、MXNet、MPIなどの複数の機械学習フレームワークをサポートします。YAMLファイル定義されることに加えてパイプラインはPythonスクリプトまたはJupyterNotebook動的に作成することもできます。パイプラインの単一の実行に加えて、**は、サービングの方法でサービスへのコンピューティングモデルの展開もサポートし、サービングのステータスを監視します。**タスクの依存関係はArgoによって管理されています。各コンピューティングタスクには、対応するオペレータースケジューリングがあり、基盤となるKubernetesのスケジューリングとリソース割り当てを制御します。システム全体をさまざまなクラウドプラットフォームで実行できます。

関連文書

Yamlによって定義されています

コード1コンポーネントの定義:

name: xgboost4j - Train classifier
description: Trains a boosted tree ensemble classifier using xgboost4j

inputs:
- {
    
    name: Training data}
- {
    
    name: Rounds, type: Integer, default: '30', help: Number of training rounds}

outputs:
- {
    
    name: Trained model, type: XGBoost model, help: Trained XGBoost model}

implementation:
  container:
    image: gcr.io/ml-pipeline/xgboost-classifier-train@sha256:b3a64d57
    command: [
      /ml/train.py,
      --train-set, {
    
    inputPath: Training data},
      --rounds,    {
    
    inputValue: Rounds},
      --out-model, {
    
    outputPath: Trained model},
    ]
  • name-コンポーネントの名前

  • 説明-タスクの説明

  • 入力-入力パラメータリスト。名前、タイプ、デフォルト値などを定義できます。

  • 出力-出力パラメータリスト

  • 実装-Dockerイメージが指定され、起動パラメーター、およびテンプレートパラメーターが指定される計算タスクの説明

Pythonコードを使用してパイプラインを作成し、デコレータを使用してパイプラインを識別することができます。関数のパラメータは、パイプライン全体のパラメータです中間ステップは直接実行されません。代わりに、計算グラフが作成されます。各ステップはコンポーネントであり、分散処理のためにKubernetesに渡されます

コードで作成

コード2パイプラインの構造:

from kfp import dsl
from kubernetes.client.models import V1EnvVar, V1SecretKeySelector


@dsl.pipeline(
    name='foo',
    description='hello world')
def foo_pipeline(tag: str, pull_image_policy: str):

    # any attributes can be parameterized (both serialized string or actual PipelineParam)
    op = dsl.ContainerOp(name='foo',
                        image='busybox:%s' % tag,
                        # pass in init_container list
                        init_containers=[dsl.InitContainer('print', 'busybox:latest', command='echo "hello"')],
                        # pass in sidecars list
                        sidecars=[dsl.Sidecar('print', 'busybox:latest', command='echo "hello"')],
                        # pass in k8s container kwargs
                        container_kwargs={
    
    'env': [V1EnvVar('foo', 'bar')]},
    )

    # set `imagePullPolicy` property for `container` with `PipelineParam`
    op.container.set_pull_image_policy(pull_image_policy)

    # add sidecar with parameterized image tag
    # sidecar follows the argo sidecar swagger spec
    op.add_sidecar(dsl.Sidecar('redis', 'redis:%s' % tag).set_image_pull_policy('Always'))

ここに画像の説明を挿入

図3.KubeflowSDKを介したコードでの使用

Jupyterで作成

ここに画像の説明を挿入

図4.ノートブックでのKubeflowの使用

Kubeflowアーキテクチャ

Kubeflowでは、Argoワークフローコントローラーがパイプラインの実行を実際に担当し、パイプラインは計算タスクをKubernetesに送信します。

ここに画像の説明を挿入

図5.Kubeflowパイプラインアーキテクチャ

TensorFlowトレーニングサポート(TFJob)

Tensorflowタスクに固有の分散コンピューティングリソース管理の機能は、tf-operatorに基づくKubernetesCRDであるTFJobコンポーネントに実装されています。

PyTorch、MXNet、Chainer、およびMPIタスクに対応するコンポーネントもあります

JupyterNotebookとの統合

上記のように、コンポーネントとパイプラインはYAMLスクリプトとPythonスクリプトを使用して作成できます。また、ノートブックを使用して作成することもできます。これは、インタラクティブな開発シナリオ、Python関数の動的展開、新しいタスクの継続的な作成と展開、データの表示、計算の検証に適しています。結果。

この方法の利点は、ユーザーがローカルで開発環境を作成する必要がなく、ブラウザーで操作するだけでアクセス制御を実行できることです。ノートブックも保存でき、環境全体を同僚と共有できます。

KFServing

Kubeflowは独自のServingコンポーネントを提供します。本番環境にデプロイする必要のある機械学習モデルはサービス指向であり、メモリに常駐します。予測されるたびにモデルをリロードする必要はありません。KFServingの最下層は、KnativeとIstioに基づいており、サーバーレスの柔軟な拡張サービスを実装しています。

ここに画像の説明を挿入

図6.KFServingアーキテクチャ図

分子属性予測問題の解決を例として取り上げ、kubeflowで実装する方法を説明します

  1. 環境を定義し、分子属性予測問題に依存する環境をDockerイメージに編成します
  2. データを定義し、分子属性予測問題が依存するデータをS3などの指定された場所に保存します
  3. 複数のコンポーネントを定義し、パイプラインを開始します
name: mol_attr_pred - Train classifier
description: Trains a Molecular attribute prediction

inputs:
- {
    
    name: Training data}
- {
    
    name: Rounds, type: Integer, default: '30', help: Number of training rounds}

outputs:
- {
    
    name: Trained model, type: Tensorflow model, help: Trained Tensorflow model}

implementation:
  container:
    image: gcr.io/ml-pipeline/mol_attr_pred-classifier-train@sha256:b3a64d57
    command: [
      /ml/train.py,
      --train-set, {
    
    inputPath: Training data},
      --rounds,    {
    
    inputValue: Rounds},
      --out-model, {
    
    outputPath: Trained model},
    ]

ダッシュボードでタスクを表示できます

ここに画像の説明を挿入

図7。ダッシュボード

ここに画像の説明を挿入

図8.パイプラインの開始

Kubeflowの概要

Tensorflow、PyTorch、MXNet、TensorRT、ONNX、MPIなどを含む多くの機械学習フレームワークをサポートします。

高度に統合されたKubernetes、Google Cloud、AWS、Azure、その他のクラウドプラットフォーム

コアは、コンポーネントやパイプラインなどの概念に基づいています

タスク管理、履歴タスク、タスク送信、計算スケジューリング、およびその他の機能を提供します

サービングフレームワーク

JupyterNotebookでのタスクのインタラクティブな作成をサポートする

複数の緩い独立したコンポーネントで構成されます

展開はより複雑で、運用と保守のコストが高く、クラウドプラットフォームとの結合が強すぎます

複雑なAPI、多くのコンポーネント、多くの概念、オーバーエンジニアリング

ドキュメントが乱雑です(非常に紛らわしいです...)

おすすめ

転載: blog.csdn.net/TQCAI666/article/details/114126665