メインコンテンツまでスキップ

Fastai

fastai を使ってモデルをトレーニングしている場合、WandbCallback を利用して W&B と簡単に連携できます。詳細はインタラクティブな解説と例 → で確認できます。

W&B でのログの開始

a) https://wandb.ai/site で無料アカウントに登録し、wandb アカウントにログインします。

b) Python 3 の環境で pip を使ってマシンに wandb ライブラリをインストールします。

c) マシン上の wandb ライブラリにログインします。APIキーはこちらで見つけられます:https://wandb.ai/authorize

pip install wandb
wandb login

次に、WandbCallbacklearner または fit メソッドに追加します:

import wandb
from fastai.callback.wandb import *

# wandb run のログ記録を開始
wandb.init(project='my_project')

# トレーニングの一部でのみログを記録する場合
learn.fit(..., cbs=WandbCallback())

# すべてのトレーニングフェーズで連続してログを記録する場合
learn = learner(..., cbs=WandbCallback())
備考

Fastaiのバージョン1を使用している場合は、 Fastai v1ドキュメント を参照してください。

WandbCallback 引数

WandbCallbackは以下の引数を受け付けます:

Args説明
logモデルの "gradients" , "parameters", "all" または None (デフォルト) をログするかどうか。損失とメトリクスは常にログされます。
log_preds予測サンプルをログするかどうか(デフォルトは True)。
log_preds_every_epoch予測を毎エポックログするか、最後にログするか(デフォルトは False)。
log_modelモデルをログするかどうか(デフォルトは False)。これには SaveModelCallback も必要です。
model_name保存する file の名前。SaveModelCallback を上書きします。
log_dataset
  • False(デフォルト)
  • True は、learn.dls.path で参照されるフォルダをログします。
  • ログするフォルダを明示的に参照するパスを定義できます。

注意:サブフォルダ「models」は常に無視されます。

dataset_nameログされたデータセットの名前(デフォルトは folder name)。
valid_dl予測サンプルに使用されるアイテムが含まれる DataLoaders(デフォルトは learn.dls.valid のランダムアイテム)。
n_predsログされる予測の数(デフォルトは 36)。
seedランダムサンプルを定義するために使用されるシード。

カスタムワークフローの場合、データセットとモデルを手動でログすることができます。

  • log_dataset(path, name=None, metadata={})
  • log_model(path, name=None, metadata={})

注意: 任意のサブフォルダ "models"は無視されます。

分散トレーニング

fastaiは、コンテキストマネージャdistrib_ctxを使用することで、分散トレーニングをサポートしています。W&Bはこれを自動的にサポートし、マルチGPU実験をすぐにトラッキングすることができます。

以下に簡単な例を示します。

import wandb
from fastai.vision.all import *
from fastai.distributed import *
from fastai.callback.wandb import WandbCallback

wandb.require(experiment="service")
path = rank0_first(lambda: untar_data(URLs.PETS)/'images')

def train():
dls = ImageDataLoaders.from_name_func(
path, get_image_files(path), valid_pct=0.2,
label_func=lambda x: x[0].isupper(), item_tfms=Resize(224))
wandb.init('fastai_ddp', entity='capecape')
cb = WandbCallback()
learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16()
with learn.distrib_ctx(sync_bn=False):
learn.fit(1)

if __name__ == "__main__":
train()

その後、ターミナルで以下のコマンドを実行します:

$ torchrun --nproc_per_node 2 train.py

この例では、マシンには2つのGPUがあります。

Was this page helpful?👍👎