Skip to main content

概要

Metaflow は、Netflixが開発したMLワークフローを作成し実行するためのフレームワークです。 このインテグレーションにより、ユーザーはMetaflowのステップとフローにデコレータを適用して、W&Bにパラメータとアーティファクトを自動的にログすることができます。
  • ステップをデコレートすると、そのステップ内の特定のタイプに対してログのオンまたはオフが適用されます。
  • フローをデコレートすると、フロー内のすべてのステップに対してログのオンまたはオフが適用されます。

クイックスタート

サインアップしてAPIキーを作成する

APIキーはあなたのマシンをW&Bに認証します。ユーザープロフィールからAPIキーを生成することができます。
よりスムーズな方法として、https://wandb.ai/authorizeに直接アクセスしてAPIキーを生成できます。表示されたAPIキーをコピーし、パスワードマネージャーなどの安全な場所に保存してください。
  1. 右上のユーザープロフィールアイコンをクリックします。
  2. User Settingsを選択し、API Keysセクションまでスクロールします。
  3. Revealをクリックし、表示されたAPIキーをコピーします。ページをリロードするとAPIキーを隠すことができます。

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

ローカルにwandbライブラリをインストールし、ログインするためには次の手順を行います。
  • Command Line
  • Python
  • Python notebook
  1. WANDB_API_KEY 環境変数をAPIキーに設定します。
    export WANDB_API_KEY=<your_api_key>
    
  2. wandbライブラリをインストールしてログインします。
    pip install -Uqqq metaflow fastcore wandb
    
    wandb login
    

フローとステップをデコレートする

  • Step
  • Flow
  • Flow and Steps
ステップをデコレートすることで、そのステップ内の特定のタイプに対してログのオンまたはオフが適用されます。この例では、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つの方法でアクセスできます: wandbクライアントライブラリを使用してオリジナルのPythonプロセス内でログされたもの、ウェブアプリUI、あるいはパブリックAPIをプログラムで使用する方法です。パラメータはW&Bのconfigに保存され、Overviewタブで見つけることができます。datasetsmodels、およびその他はW&B Artifactsに保存され、Artifactsタブで見つけることができます。基本的なPythonタイプはW&Bのsummaryディクショナリに保存され、Overviewタブで見ることができます。これらの情報を外部からプログラムで取得する方法の詳細については、パブリックAPIのガイドをご覧ください。

クイックリファレンス

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

wandb_log引数

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

デフォルトでは、もし:

  • settings.run_groupNoneであれば、{flow_name}/{run_id}に設定されます
  • settings.run_job_typeNoneであれば、{run_job_type}/{step_name}に設定されます

よくある質問

正確には何をログしますか?すべてのインスタンスとローカル変数をログしますか?

wandb_logはインスタンス変数のみをログします。ローカル変数は決してログされません。これは不要なデータをログしないために役立ちます。

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

現在、以下のタイプをサポートしています:
ログ設定
デフォルト(常にオン)
  • dict, list, set, str, int, float, bool
datasets
  • pd.DataFrame
  • pathlib.Path
models
  • nn.Module
  • sklearn.base.BaseEstimator
others
  • pickle-ableでありJSONシリアライズ可能なもの

どのようにログの振る舞いを設定できますか?

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

アーティファクトのリネージは追跡されますか?

はい。ステップAの出力であり、ステップBの入力であるアーティファクトがあれば、リネージDAGを自動的に構築します。 この振る舞いの例については、このノートブックおよび対応する W&B Artifactsページをご覧ください。