Metaflow
3 minute read
概要
Metaflow は、ML ワークフローを作成および実行するために Netflix によって作成されたフレームワークです。
このインテグレーションを使用すると、Metaflow の ステップとフロー にデコレータを適用して、パラメータと Artifacts を自動的に W&B にログ記録できます。
- ステップをデコレートすると、そのステップ内の特定の種類に対するログ記録をオフまたはオンにします。
- フローをデコレートすると、フロー内のすべてのステップに対するログ記録をオフまたはオンにします。
クイックスタート
サインアップして APIキー を作成する
APIキー は、お使いのマシンを W&B に対して認証します。APIキー は、ユーザープロファイルから生成できます。
- 右上隅にあるユーザープロファイルアイコンをクリックします。
- [User Settings] を選択し、[API Keys] セクションまでスクロールします。
- [Reveal] をクリックします。表示された APIキー をコピーします。APIキー を非表示にするには、ページをリロードします。
wandb ライブラリをインストールしてログインする
wandb ライブラリをローカルにインストールしてログインするには:
-
WANDB_API_KEY環境変数 を APIキー に設定します。export WANDB_API_KEY=<your_api_key> -
wandbライブラリをインストールしてログインします。pip install -Uqqq metaflow fastcore wandb wandb login
pip install -Uqqq metaflow fastcore wandb
import wandb
wandb.login()
!pip install -Uqqq metaflow fastcore wandb
import wandb
wandb.login()
フローとステップをデコレートする
ステップをデコレートすると、そのステップ内の特定の種類に対するログ記録をオフまたはオンにします。
この例では、start 内のすべての Datasets と Models がログ記録されます。
from wandb.integration.metaflow import wandb_log
class WandbExampleFlow(FlowSpec):
@wandb_log(datasets=True, models=True, settings=wandb.Settings(...))
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> upload as dataset
self.model_file = torch.load(...) # nn.Module -> upload as model
self.next(self.transform)
フローをデコレートすることは、すべての構成ステップをデフォルトでデコレートすることと同じです。
この場合、WandbExampleFlow のすべてのステップは、Datasets と Models をデフォルトでログ記録します。これは、各ステップを @wandb_log(datasets=True, models=True) でデコレートするのと同じです。
from wandb.integration.metaflow import wandb_log
@wandb_log(datasets=True, models=True) # decorate all @step
class WandbExampleFlow(FlowSpec):
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> upload as dataset
self.model_file = torch.load(...) # nn.Module -> upload as model
self.next(self.transform)
フローをデコレートすることは、すべてのステップをデフォルトでデコレートすることと同じです。つまり、後で別の @wandb_log でステップをデコレートすると、フローレベルのデコレーションがオーバーライドされます。
この例では:
startとmidは Datasets と Models の両方をログ記録します。endは Datasets も Models もログ記録しません。
from wandb.integration.metaflow import wandb_log
@wandb_log(datasets=True, models=True) # same as decorating start and mid
class WandbExampleFlow(FlowSpec):
# this step will log datasets and models
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> upload as dataset
self.model_file = torch.load(...) # nn.Module -> upload as model
self.next(self.mid)
# this step will also log datasets and models
@step
def mid(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> upload as dataset
self.model_file = torch.load(...) # nn.Module -> upload as model
self.next(self.end)
# this step is overwritten and will NOT log datasets OR models
@wandb_log(datasets=False, models=False)
@step
def end(self):
self.raw_df = pd.read_csv(...).
self.model_file = torch.load(...)
プログラムでデータにアクセスする
キャプチャした情報には、次の 3 つの方法でアクセスできます。wandb クライアントライブラリ を使用してログ記録されている元の Python プロセス内、web アプリ UI を使用、または Public API を使用してプログラムでアクセスできます。Parameter は W&B の config に保存され、Overview タブ にあります。datasets、models、および others は W&B Artifacts に保存され、Artifacts タブ にあります。Base python タイプは W&B の summary 辞書に保存され、Overview タブにあります。API を使用してこの情報を外部からプログラムで取得する方法の詳細については、Public API のガイド を参照してください。
クイックリファレンス
| データ | クライアントライブラリ | UI |
|---|---|---|
Parameter(...) |
wandb.config |
Overview タブ, Config |
datasets、models、others |
wandb.use_artifact("{var_name}:latest") |
Artifacts タブ |
Base Python タイプ (dict、list、str など) |
wandb.summary |
Overview タブ, Summary |
wandb_log kwargs
| kwarg | オプション |
|---|---|
datasets |
|
models |
|
others |
|
settings |
デフォルトでは、以下の場合:
|
よくある質問
実際に何をログに記録しますか?すべてのインスタンス変数とローカル変数をログに記録しますか?
wandb_log はインスタンス変数のみをログに記録します。ローカル変数は決してログに記録されません。これは、不要なデータのログ記録を回避するのに役立ちます。
どのデータ型がログに記録されますか?
現在、これらのタイプをサポートしています。
| ログ設定 | タイプ |
|---|---|
| デフォルト (常にオン) |
|
datasets |
|
models |
|
others |
|
ログ記録の振る舞いを構成するにはどうすればよいですか?
| 変数の種類 | 振る舞い | 例 | データ型 |
|---|---|---|---|
| インスタンス | 自動ログ記録 | self.accuracy |
float |
| インスタンス | datasets=True の場合にログ記録 |
self.df |
pd.DataFrame |
| インスタンス | datasets=False の場合はログ記録されません |
self.df |
pd.DataFrame |
| ローカル | 決してログ記録されない | accuracy |
float |
| ローカル | 決してログ記録されない | df |
pd.DataFrame |
Artifacts のリネージは追跡されますか?
はい。Artifact がステップ A の出力であり、ステップ B の入力である場合、リネージ DAG が自動的に構築されます。
この振る舞いの例については、この notebook と対応する W&B Artifacts ページ を参照してください。
[i18n] feedback_title
[i18n] feedback_question
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.