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 further feedback, please let us know.
Sorry to hear that. Please tell us how we can improve.