メインコンテンツまでスキップ

Kubeflow Pipelines (kfp)

概要

Kubeflow Pipelines (kfp)は、Dockerコンテナをベースとしたポータブルでスケーラブルな機械学習(ML)ワークフローを構築・デプロイするプラットフォームです。

この統合により、ユーザーはkfpのPython関数コンポーネントにデコレータを適用して、パラメータとアーティファクトをW&Bに自動的に記録することができます。

この機能はwandb==0.12.11で有効になり、kfp<2.0.0が必要です。

クイックスタート

W&Bのインストールとログイン

!pip install kfp wandb

import wandb
wandb.login()

コンポーネントにデコレータを追加

@wandb_log デコレータを追加し、コンポーネントを通常どおり作成します。これにより、パイプラインを実行するたびに、入力/出力パラメータとアーティファクトが自動的にW&Bにログされます。

from kfp import components
from wandb.integration.kfp import wandb_log

@wandb_log
def add(a: float, b: float) -> float:
return a + b

add = components.create_component_from_func(add)


### コンテナに環境変数を渡す

コンテナに[WANDB環境変数](../../track/environment-variables.md)を明示的に渡す必要があるかもしれません。双方向リンクの場合は、環境変数`WANDB_KUBEFLOW_URL`にKubeflow Pipelinesインスタンスの基本URL(例: https://kubeflow.mysite.com)を設定する必要があります。

```python
import os
from kubernetes.client.models import V1EnvVar

def add_wandb_env_variables(op):
env = {
"WANDB_API_KEY": os.getenv("WANDB_API_KEY"),
"WANDB_BASE_URL": os.getenv("WANDB_BASE_URL"),
}

for name, value in env.items():
op = op.add_env_variable(V1EnvVar(name, value))
return op

@dsl.pipeline(name="example-pipeline")
def example_pipeline(...):
conf = dsl.get_pipeline_conf()
conf.add_op_transformer(add_wandb_env_variables)
...

私のデータはどこにありますか?プログラムでアクセスできますか?

Kubeflow Pipelines UI経由

W&Bでログを記録したKubeflow Pipelines UIの任意のRunをクリックします。

  • 入力と出力は、Input/OutputタブとML Metadataタブでトラッキングされます。
  • VisualizationsタブからW&Bウェブアプリを表示することもできます。

Kubeflow UIでW&amp;Bを表示する

ウェブアプリUI経由

ウェブアプリUIは、Kubeflow PipelinesのVisualizationsタブと同じ内容ですが、スペースがもっと広いです!ウェブアプリUIについての詳細はこちら

特定のRunの詳細を表示する(Kubeflow UIへのリンクもあります)

パイプラインの各段階での入力と出力の完全なDAGを表示する

Public API経由(プログラムでのアクセス)

Kubeflow PipelinesからW&Bへの概念マッピング

以下は、Kubeflow Pipelinesの概念をW&Bにマッピングしたものです。

Kubeflow PipelinesW&BW&B内の位置
入力スカラー[`config`](https://docs.wandb.ai/guides/track/config)概要タブ
出力スカラー[`summary`](https://docs.wandb.ai/guides/track/log)概要タブ
入力アーティファクト入力アーティファクトアーティファクトタブ
出力アーティファクト出力アーティファクトアーティファクトタブ

細かいログ記録

ログ記録をより細かく制御したい場合は、wandb.logおよびwandb.log_artifactをコンポーネントに追加できます。

明示的なwandbログ記録呼び出しを使用して

以下の例では、モデルをトレーニングしています。@wandb_logデコレータは関連する入力と出力を自動的にトラッキングします。トレーニングプロセスをログに記録したい場合は、以下のようにログを明示的に追加できます。

@wandb_log
def train_model(
train_dataloader_path: components.InputPath("dataloader"),
test_dataloader_path: components.InputPath("dataloader"),
model_path: components.OutputPath("pytorch_model")
):
...
for epoch in epochs:
for batch_idx, (data, target) in enumerate(train_dataloader):
...
if batch_idx % log_interval == 0:
wandb.log({
"epoch": epoch,
"step": batch_idx * len(data),
"loss": loss.item()
})
...
wandb.log_artifact(model_artifact)

暗黙的なwandbの統合

対応しているフレームワークの統合を使用している場合は、コールバックを直接渡すこともできます。


@wandb_log

def train_model(

train_dataloader_path: components.InputPath("dataloader"),

test_dataloader_path: components.InputPath("dataloader"),

model_path: components.OutputPath("pytorch_model")

):

from pytorch_lightning.loggers import WandbLogger

from pytorch_lightning import Trainer



trainer = Trainer(logger=WandbLogger())

... # トレーニングを行う

Was this page helpful?👍👎