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ページをご覧ください。