記事のディレクトリ
Kubeflowの基本概念
Kubeflowは、Google主導のKubernetesと機械学習ワークフローの統合フレームワークであり、機械学習タスクがクラウド環境でより適切に実行され、分散処理を実行し、多数のマシンに拡張できるようにします。さまざまなプラットフォームに移植して、モデル。効果など。
Kubeflowでできることは次のとおりです。
- データの準備
- モデルトレーニング
- 予測サービング
- サービス管理
機械学習ワークフローは、開発プロセスと生産プロセスの2つの段階に分かれています。
Kubeflowには次の概念があります。
-
パイプライン-一連の計算ステップを実行し、複数のコンポーネントで構成される機械学習ワークフローパイプライン
-
コンポーネント-ワークフロー内の計算タスク。これはPython関数と同等であり、入力と出力が固定されており、相互に依存しています。
-
実験-ワークフローの構成環境、実行パラメーターのセット
-
実行-実験環境でのパイプラインの実行を表します
-
定期的な実行-定期的に繰り返し実行される実行であり、ジョブとも呼ばれます。
-
ステップ-実行中のコンポーネントの実行に対応します
-
アーティファクト-データセットを取得するための入力または出力
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'))
Jupyterで作成
Kubeflowアーキテクチャ
Kubeflowでは、Argoワークフローコントローラーがパイプラインの実行を実際に担当し、パイプラインは計算タスクをKubernetesに送信します。
TensorFlowトレーニングサポート(TFJob)
Tensorflowタスクに固有の分散コンピューティングリソース管理の機能は、tf-operatorに基づくKubernetesCRDであるTFJobコンポーネントに実装されています。
PyTorch、MXNet、Chainer、およびMPIタスクに対応するコンポーネントもあります
JupyterNotebookとの統合
上記のように、コンポーネントとパイプラインはYAMLスクリプトとPythonスクリプトを使用して作成できます。また、ノートブックを使用して作成することもできます。これは、インタラクティブな開発シナリオ、Python関数の動的展開、新しいタスクの継続的な作成と展開、データの表示、計算の検証に適しています。結果。
この方法の利点は、ユーザーがローカルで開発環境を作成する必要がなく、ブラウザーで操作するだけでアクセス制御を実行できることです。ノートブックも保存でき、環境全体を同僚と共有できます。
KFServing
Kubeflowは独自のServingコンポーネントを提供します。本番環境にデプロイする必要のある機械学習モデルはサービス指向であり、メモリに常駐します。予測されるたびにモデルをリロードする必要はありません。KFServingの最下層は、KnativeとIstioに基づいており、サーバーレスの柔軟な拡張サービスを実装しています。
分子属性予測問題の解決を例として取り上げ、kubeflowで実装する方法を説明します
- 環境を定義し、分子属性予測問題に依存する環境をDockerイメージに編成します
- データを定義し、分子属性予測問題が依存するデータをS3などの指定された場所に保存します
- 複数のコンポーネントを定義し、パイプラインを開始します
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},
]
ダッシュボードでタスクを表示できます
Kubeflowの概要
Tensorflow、PyTorch、MXNet、TensorRT、ONNX、MPIなどを含む多くの機械学習フレームワークをサポートします。
高度に統合されたKubernetes、Google Cloud、AWS、Azure、その他のクラウドプラットフォーム
コアは、コンポーネントやパイプラインなどの概念に基づいています
タスク管理、履歴タスク、タスク送信、計算スケジューリング、およびその他の機能を提供します
サービングフレームワーク
JupyterNotebookでのタスクのインタラクティブな作成をサポートする
複数の緩い独立したコンポーネントで構成されます
展開はより複雑で、運用と保守のコストが高く、クラウドプラットフォームとの結合が強すぎます
複雑なAPI、多くのコンポーネント、多くの概念、オーバーエンジニアリング
ドキュメントが乱雑です(非常に紛らわしいです...)