Metaflow は、ML ワークフローの作成と実行のために Netflix によって開発されたフレームワークです。
このインテグレーションにより、ユーザーは Metaflow の steps と flows にデコレータを適用して、パラメータや アーティファクト を W&B に自動的に ログ 記録できるようになります。
- step をデコレートすると、その step 内の特定の型に対して ログ 記録のオン/オフを切り替えることができます。
- flow をデコレートすると、その flow 内のすべての step に対して ログ 記録のオン/オフを切り替えることができます。
クイックスタート
サインアップして APIキー を作成する
APIキー は、お使いの環境を W&B に認証します。ユーザープロフィールから APIキー を生成できます。
For a more streamlined approach, create an API key by going directly to User Settings. Copy the newly created API key immediately and save it in a secure location such as a password manager.
- 右上隅にあるユーザープロフィールのアイコンをクリックします。
- User Settings を選択し、API Keys セクションまでスクロールします。
wandb ライブラリのインストールとログイン
wandb ライブラリをローカルにインストールしてログインするには:
wandb バージョン 0.19.8 以下の場合は、plum-dispatch の代わりに fastcore バージョン 1.8.0 以下 (fastcore<1.8.0) をインストールしてください。
コマンドライン
Python
Python notebook
-
WANDB_API_KEY 環境変数 を作成した APIキー に設定します。
export WANDB_API_KEY=<your_api_key>
-
wandb ライブラリをインストールしてログインします。
pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb
wandb login
pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb
import wandb
wandb.login()
!pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb
import wandb
wandb.login()
flows と steps をデコレートする
step をデコレートすると、その step 内の特定の型に対して ログ 記録のオン/オフを切り替えることができます。この例では、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 -> datasetとしてアップロード
self.model_file = torch.load(...) # nn.Module -> modelとしてアップロード
self.next(self.transform)
flow をデコレートすることは、構成するすべての step をデフォルト設定でデコレートすることと同じです。この場合、WandbExampleFlow 内のすべての step は、各 step を @wandb_log(datasets=True, models=True) でデコレートしたときと同様に、デフォルトで Datasets と Models を ログ 記録します。from wandb.integration.metaflow import wandb_log
@wandb_log(datasets=True, models=True) # すべての @step をデコレート
class WandbExampleFlow(FlowSpec):
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> datasetとしてアップロード
self.model_file = torch.load(...) # nn.Module -> modelとしてアップロード
self.next(self.transform)
flow をデコレートすることは、すべての step をデフォルト設定でデコレートすることと同等です。つまり、後で特定の Step を別の @wandb_log でデコレートした場合、それは flow レベルのデコレーションを上書きします。この例では:
start と mid は Datasets と Models の両方を ログ 記録します。
end は Datasets も Models も ログ 記録しません。
from wandb.integration.metaflow import wandb_log
@wandb_log(datasets=True, models=True) # start と mid をデコレートするのと同じ
class WandbExampleFlow(FlowSpec):
# この step は datasets と models をログ記録します
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> datasetとしてアップロード
self.model_file = torch.load(...) # nn.Module -> modelとしてアップロード
self.next(self.mid)
# この step も datasets と models をログ記録します
@step
def mid(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> datasetとしてアップロード
self.model_file = torch.load(...) # nn.Module -> modelとしてアップロード
self.next(self.end)
# この step は上書きされ、datasets も models もログ記録しません
@wandb_log(datasets=False, models=False)
@step
def end(self):
self.raw_df = pd.read_csv(...).
self.model_file = torch.load(...)
プログラムによる データ へのアクセス
取得した情報には 3 つの方法でアクセスできます。 ログ 記録中の元の Python プロセス内から wandb クライアントライブラリ を使用する方法、Web アプリ UI を使用する方法、または パブリック API を使用してプログラムでアクセスする方法です。Parameter は W&B の config に保存され、Overviewタブ で確認できます。datasets、models、および others は W&B Artifacts に保存され、Artifacts タブ で確認できます。Python の基本型は W&B の summary 辞書に保存され、Overview タブで確認できます。外部からプログラムでこの情報を取得するための API 使用方法の詳細は、パブリック API ガイド を参照してください。
クイックリファレンス
| データ | クライアントライブラリ | UI |
|---|
Parameter(...) | wandb.Run.config | Overviewタブ, Config |
datasets, models, others | wandb.Run.use_artifact("{var_name}:latest") | Artifacts タブ |
Python 基本型 (dict, list, str など) | wandb.Run.summary | Overviewタブ, Summary |
wandb_log kwargs (キーワード引数)
| kwarg | オプション |
|---|
datasets | True: データセットであるインスタンス変数をログ記録するFalse
|
models | True: モデルであるインスタンス変数をログ記録するFalse
|
others | True: pickle としてシリアル化可能なその他のものをログ記録するFalse
|
settings | wandb.Settings(…): この step または flow に対して独自の wandb 設定を指定するNone: wandb.Settings() を渡すのと同等
デフォルトでは以下のようになります: settings.run_group が None の場合、 {flow_name}/{run_id} に設定されますsettings.run_job_type が None の場合、 {run_job_type}/{step_name} に設定されます
|
よくある質問
具体的に何を ログ 記録しますか?すべてのインスタンス変数とローカル変数を ログ 記録しますか?
wandb_log はインスタンス変数のみを ログ 記録します。ローカル変数は 決して ログ 記録されません。これは、不要な データの ログ 記録を避けるために役立ちます。
どのデータ型が ログ 記録されますか?
現在、以下の型をサポートしています:
| ログ設定 | 型 |
|---|
| デフォルト (常にオン) | dict, list, set, str, int, float, bool
|
datasets | |
models | nn.Modulesklearn.base.BaseEstimator
|
others | |
ログ 記録の 振る舞い をどのように 設定 できますか?
| 変数の種類 | 振る舞い | 例 | データ型 |
|---|
| インスタンス | 自動ログ記録 | self.accuracy | float |
| インスタンス | datasets=True の場合にログ記録 | self.df | pd.DataFrame |
| インスタンス | datasets=False の場合はログ記録されない | self.df | pd.DataFrame |
| ローカル | 決してログ記録されない | accuracy | float |
| ローカル | 決してログ記録されない | df | pd.DataFrame |
Artifacts の リネージ (系統) は追跡されますか?
はい。ある アーティファクト が step A の出力であり、step B の入力である場合、自動的に リネージ DAG を構築します。
この 振る舞い の例については、こちらの ノートブック および対応する W&B Artifacts ページ を参照してください。