Metaflow
2 minute read
概要
Metaflow は、Netflixが開発したMLワークフローを作成し実行するためのフレームワークです。
このインテグレーションにより、ユーザーはMetaflowのステップとフローにデコレータを適用して、W&Bにパラメータとアーティファクトを自動的にログすることができます。
- ステップをデコレートすると、そのステップ内の特定のタイプに対してログのオンまたはオフが適用されます。
- フローをデコレートすると、フロー内のすべてのステップに対してログのオンまたはオフが適用されます。
クイックスタート
サインアップしてAPIキーを作成する
APIキーはあなたのマシンをW&Bに認証します。ユーザープロフィールからAPIキーを生成することができます。
- 右上のユーザープロフィールアイコンをクリックします。
- User Settingsを選択し、API Keysセクションまでスクロールします。
- Revealをクリックし、表示されたAPIキーをコピーします。ページをリロードするとAPIキーを隠すことができます。
wandbライブラリをインストールしてログインする
ローカルにwandbライブラリをインストールし、ログインするためには次の手順を行います。
-
WANDB_API_KEY環境変数をAPIキーに設定します。export WANDB_API_KEY=<your_api_key> -
wandbライブラリをインストールしてログインします。pip install -Uqqq metaflow fastcore wandb wandb login
pip install -Uqqq metaflow fastcore wandb
import wandb
wandb.login()
!pip install -Uqqq metaflow fastcore wandb
import wandb
wandb.login()
フローとステップをデコレートする
ステップをデコレートすることで、そのステップ内の特定のタイプに対してログのオンまたはオフが適用されます。
この例では、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)
フローをデコレートすることは、すべての構成ステップをデフォルトでデコレートすることに相当します。
この場合、WandbExampleFlowのすべてのステップは、各ステップを @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は両方、データセットとモデルをログします。endは、データセットもモデルもログしません。
from wandb.integration.metaflow import wandb_log
@wandb_log(datasets=True, models=True) # startとmidをデコレートするのと同じ
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.mid)
# このステップもデータセットとモデルをログします
@step
def mid(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> データセットとしてアップロード
self.model_file = torch.load(...) # nn.Module -> モデルとしてアップロード
self.next(self.end)
# このステップは上書きされており、データセットもモデルもログしません
@wandb_log(datasets=False, models=False)
@step
def end(self):
self.raw_df = pd.read_csv(...).
self.model_file = torch.load(...)
データへプログラムでアクセスする
キャプチャされた情報には3つの方法でアクセスできます: wandbクライアントライブラリを使用してオリジナルのPythonプロセス内でログされたもの、ウェブアプリUI、あるいはパブリックAPIをプログラムで使用する方法です。パラメータはW&Bのconfigに保存され、Overviewタブで見つけることができます。datasets、models、およびその他はW&B Artifactsに保存され、Artifactsタブで見つけることができます。基本的なPythonタイプはW&Bのsummaryディクショナリに保存され、Overviewタブで見ることができます。これらの情報を外部からプログラムで取得する方法の詳細については、パブリックAPIのガイドをご覧ください。
クイックリファレンス
| データ | クライアントライブラリ | UI |
|---|---|---|
Parameter(...) |
wandb.config |
Overviewタブ, Config |
datasets, models, others |
wandb.use_artifact("{var_name}:latest") |
Artifactsタブ |
基本的なPython型 (dict, list, str, etc.) |
wandb.summary |
Overviewタブ, Summary |
wandb_log引数
| 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ページをご覧ください。
フィードバック
このページは役に立ちましたか?
Glad to hear it! If you have more to say, please let us know.
Sorry to hear that. Please tell us how we can improve.