Metaflow
Overview
Metaflowは、MLワークフローを作成および実行するためにNetflixによって作成されたフレームワークです。
このインテグレーションにより、ユーザーはMetaflowのステップとフローにデコレータを適用して、パラメータとArtifactsをW&Bに自動的にログすることができます。
- ステップにデコレートすると、そのステップ内の特定の型のログを有効または無効にできます。
- フローにデコレートすると、フロー内のすべてのステップのログを有効または無効にできます。
クイックスタート
W&Bをインストールしてログインする
- Notebook
- Command Line
!pip install -Uqqq metaflow fastcore wandb
import wandb
wandb.login()
pip install -Uqqq metaflow fastcore wandb
wandb login
フローとステップをデコレートする
- Step
- Flow
- Flow and Steps
ステップをデコレートすると、そのステップ内の特定の型のログを有効または無効にできます。
この例では、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 -> データセットとしてアップロード
self.model_file = torch.load(...) # nn.Module -> モデルとしてアップロード
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) # すべての@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)
フローをデコレートすることは、すべてのステップをデフォルトでデコレートすることと同等です。つまり、後でステップを別の@wandb_log
でデコレートすると、フローレベルのデコレーションが上書きされます。
以下の例では:
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):
# このステップはDatasetsとModelsをログします
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> データセットとしてアップロード
self.model_file = torch.load(...) # nn.Module -> モデルとしてアップロード
self.next(self.mid)
# このステップもDatasetsとModelsをログします
@step
def mid(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> データセットとしてアップロード
self.model_file = torch.load(...) # nn.Module -> モデルとしてアップロード
self.next(self.end)
# このステップは上書きされ、DatasetsやModelsはログされません
@wandb_log(datasets=False, models=False)
@step
def end(self):
self.raw_df = pd.read_csv(...).
self.model_file = torch.load(...)
データはどこにありますか?プログラムでアクセスできますか?
キャプチャした情報には、元のPythonプロセス内でwandb
クライアントライブラリを使用して、webアプリUIを介して、または公開APIを使用してプログラムでアクセスできます。パラメータ
はW&Bのconfig
に保存され、Overviewタブで見つけることができます。datasets
、models
、およびその他のものはW&B Artifactsに保存され、Artifactsタブで見つけることができます。基本的なPythonタイプはW&Bのsummary
辞書に保存され、Overviewタブで見つけることができます。APIを使用してこの情報を外部からプログラムで取得する方法については、公開APIガイドをご覧ください。
チートシートはこちらです:
データ | クライアントライブラリ | UI |
---|---|---|
Parameter(...) | wandb.config | Overviewタブ, Config |
datasets , models , others | wandb.use_artifact("{var_name}:latest") | Artifactsタブ |
基本的な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 |
これはアーティファクトのリネージを追跡しますか?
はい!ステップAの出力でありステップBの入力であるアーティファクトがある場合、自動的にリネージDAGを構築します。
この振る舞いの例については、このノートブックとそれに対応するW&B Artifactsページをご覧ください。