Skip to main content

概要

Metaflow は、ML ワークフローを作成して実行するために Netflix が開発したフレームワークです。 このインテグレーションでは、Metaflow の steps and flows にデコレーターを適用することで、パラメーターと Artifacts を W&B に自動的にログできるようになります。
  • step をデコレートすると、その step 内の特定のタイプに対してログするかどうかを切り替えられます。
  • フローをデコレートすると、その フロー 内のすべての step に対してログするかどうかを切り替えられます。

クイックスタート

サインアップしてAPIキーを発行する

APIキーは、お使いのマシンをW&Bに認証するために使用します。APIキーはユーザープロフィールから発行できます。
より手早く行うには、User Settings に直接アクセスしてAPIキーを作成してください。新しく作成したAPIキーはすぐにコピーし、パスワードマネージャーなどの安全な場所に保存してください。
  1. 右上にあるユーザープロフィールアイコンをクリックします。
  2. User Settings を選択し、API Keys セクションまでスクロールします。

wandb ライブラリをインストールしてログインする

wandb ライブラリをローカルにインストールしてログインするには、次の手順を実行します。
wandb バージョン 0.19.8 以下では、plum-dispatch の代わりに fastcore バージョン 1.8.0 以下 (fastcore<1.8.0) をインストールしてください。
  1. APIキーを WANDB_API_KEY 環境変数に設定します。
    export WANDB_API_KEY=<your_api_key>
    
  2. wandb ライブラリをインストールしてログインします。
    pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb
    
    wandb login
    

フローとstepをデコレートする

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)

プログラムからデータにアクセスする

記録された情報には、3 つの方法でアクセスできます。ログを記録している元の Python プロセス内で wandb クライアントライブラリ を使用する方法、Web アプリの UI を使用する方法、または Public API を使用してプログラムからアクセスする方法です。Parameter は W&B の config に保存され、Overview タブ で確認できます。datasetsmodelsothersW&B Artifacts に保存され、Artifacts タブ で確認できます。基本的な Python の型は W&B の summary dict に保存され、Overview タブで確認できます。API を使用して外部からこの情報をプログラムで取得する方法の詳細については、Public API ガイド を参照してください。

クイックリファレンス

データクライアントライブラリUI
Parameter(...)wandb.Run.configOverview タブ、設定
datasets, models, otherswandb.Run.use_artifact("{var_name}:latest")Artifacts タブ
基本的な Python の型 (dict, list, str, etc.)wandb.Run.summaryOverview タブ、Summary

wandb_log kwargs

kwargOptions
datasets
  • True: データセットであるインスタンス変数をログする
  • False
models
  • True: モデルであるインスタンス変数をログする
  • False
others
  • True: pickle としてシリアライズ可能なその他すべてのものをログする
  • False
settings
  • wandb.Settings(…): この step またはフロー用に独自の wandb 設定を指定します
  • None: wandb.Settings() を渡すのと同じです

デフォルトでは、以下の場合:

  • settings.run_groupNone の場合、{flow_name}/{run_id} に設定されます
  • settings.run_job_typeNone の場合、{run_job_type}/{step_name} に設定されます

よくある質問

具体的に何がログされますか?インスタンス変数とローカル変数の両方がすべてログされますか?

wandb_log がログするのはインスタンス変数のみです。ローカル変数がログされることはありません。これにより、不要なデータがログされるのを防げます。

どのデータ型がログされますか?

現在、次のタイプをサポートしています。
Logging SettingType
デフォルト (常にオン)
  • dict, list, set, str, int, float, bool
datasets
  • pd.DataFrame
  • pathlib.Path
models
  • nn.Module
  • sklearn.base.BaseEstimator
others

ログする挙動はどのように設定できますか?

変数の種類挙動データ型
インスタンス自動でログされるself.accuracyfloat
インスタンスdatasets=True の場合にログされるself.dfpd.DataFrame
インスタンスdatasets=False の場合はログされないself.dfpd.DataFrame
ローカルログされないaccuracyfloat
ローカルログされないdfpd.DataFrame

artifactのリネージはトラッキングされますか?

はい。step Aの出力であり、step Bの入力でもあるartifactがある場合、リネージDAGを自動的に構築します。 この挙動の例については、このnotebookと、対応するW&B Artifacts ページを参照してください