Metaflow は、ML ワークフローを作成して実行するために Netflix が開発したフレームワークです。
このインテグレーションでは、Metaflow の steps and flows にデコレーターを適用することで、パラメーターと Artifacts を W&B に自動的にログできるようになります。
- step をデコレートすると、その step 内の特定のタイプに対してログするかどうかを切り替えられます。
- フローをデコレートすると、その フロー 内のすべての step に対してログするかどうかを切り替えられます。
APIキーは、お使いのマシンをW&Bに認証するために使用します。APIキーはユーザープロフィールから発行できます。
より手早く行うには、User Settings に直接アクセスしてAPIキーを作成してください。新しく作成したAPIキーはすぐにコピーし、パスワードマネージャーなどの安全な場所に保存してください。
- 右上にあるユーザープロフィールアイコンをクリックします。
- User Settings を選択し、API Keys セクションまでスクロールします。
wandb ライブラリをインストールしてログインする
wandb ライブラリをローカルにインストールしてログインするには、次の手順を実行します。
wandb バージョン 0.19.8 以下では、plum-dispatch の代わりに fastcore バージョン 1.8.0 以下 (fastcore<1.8.0) をインストールしてください。
コマンドライン
Python
Python notebook
-
APIキーを
WANDB_API_KEY 環境変数に設定します。
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()
stepをデコレートすると、そのstep内の特定のタイプに対してログするかどうかをオンまたはオフにできます。この例では、start 内のすべてのデータセットとモデルがログされます。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 -> データセットとしてアップロード
self.model_file = torch.load(...) # nn.Module -> モデルとしてアップロード
self.next(self.transform)
フローをデコレートすることは、構成するすべてのstepをデフォルト設定でデコレートするのと同じです。この場合、WandbExampleFlow 内のすべてのstepで、各stepを @wandb_log(datasets=True, models=True) でデコレートした場合と同様に、デフォルトでデータセットとモデルがログされます。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 -> データセットとしてアップロード
self.model_file = torch.load(...) # nn.Module -> モデルとしてアップロード
self.next(self.transform)
フローをデコレートすることは、すべてのstepをデフォルト設定でデコレートするのと同じです。つまり、後でstepに別の @wandb_log をデコレートすると、その設定がフローレベルのデコレーションを上書きします。この例では:
start と mid は、どちらもデータセットとモデルの両方をログします。
end は、データセットもモデルもログしません。
from wandb.integration.metaflow import wandb_log
@wandb_log(datasets=True, models=True) # start と mid をデコレートするのと同じ
class WandbExampleFlow(FlowSpec):
# このstepではデータセットとモデルがログされます
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> データセットとしてアップロード
self.model_file = torch.load(...) # nn.Module -> モデルとしてアップロード
self.next(self.mid)
# このstepでもデータセットとモデルがログされます
@step
def mid(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> データセットとしてアップロード
self.model_file = torch.load(...) # nn.Module -> モデルとしてアップロード
self.next(self.end)
# このstepでは設定が上書きされ、データセットもモデルもログされません
@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 を使用する方法、または Public API を使用してプログラムからアクセスする方法です。Parameter は W&B の config に保存され、Overview タブ で確認できます。datasets、models、others は W&B Artifacts に保存され、Artifacts タブ で確認できます。基本的な Python の型は W&B の summary dict に保存され、Overview タブで確認できます。API を使用して外部からこの情報をプログラムで取得する方法の詳細については、Public API ガイド を参照してください。
| データ | クライアントライブラリ | UI |
|---|
Parameter(...) | wandb.Run.config | Overview タブ、設定 |
datasets, models, others | wandb.Run.use_artifact("{var_name}:latest") | Artifacts タブ |
基本的な Python の型 (dict, list, str, etc.) | wandb.Run.summary | Overview タブ、Summary |
| kwarg | Options |
|---|
datasets | True: データセットであるインスタンス変数をログするFalse
|
models | True: モデルであるインスタンス変数をログするFalse
|
others | True: pickle としてシリアライズ可能なその他すべてのものをログするFalse
|
settings | wandb.Settings(…): この step またはフロー用に独自の wandb 設定を指定しますNone: wandb.Settings() を渡すのと同じです
デフォルトでは、以下の場合: settings.run_group が None の場合、{flow_name}/{run_id} に設定されますsettings.run_job_type が None の場合、{run_job_type}/{step_name} に設定されます
|
具体的に何がログされますか?インスタンス変数とローカル変数の両方がすべてログされますか?
wandb_log がログするのはインスタンス変数のみです。ローカル変数がログされることはありません。これにより、不要なデータがログされるのを防げます。
現在、次のタイプをサポートしています。
| Logging Setting | Type |
|---|
| デフォルト (常にオン) | 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 |
artifactのリネージはトラッキングされますか?
はい。step Aの出力であり、step Bの入力でもあるartifactがある場合、リネージDAGを自動的に構築します。
この挙動の例については、このnotebookと、対応するW&B Artifacts ページを参照してください