Documentation Index
Fetch the complete documentation index at: https://wb-21fd5541-john-wbdocs-2044-rename-serverless-products.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
WandbCallback クラスを使用して、fastai を W&B に統合できます。詳細については、例付きのインタラクティブなドキュメントをご覧ください。
APIキーは、マシンをW&Bに対して認証するためのものです。APIキーはプロフィールから発行できます。
より手早く行うには、User Settings に直接アクセスしてAPIキーを作成してください。新しく作成したAPIキーはすぐにコピーし、パスワードマネージャーなどの安全な場所に保存してください。
- 右上にあるプロフィールアイコンをクリックします。
- User Settings を選択し、API Keys セクションまでスクロールします。
wandb ライブラリをインストールしてログインする
wandb ライブラリをローカルにインストールしてログインするには、次の手順を実行します。
コマンドライン
Python
Python notebook
-
WANDB_API_KEY の環境変数に APIキー を設定します。
export WANDB_API_KEY=<your_api_key>
-
wandb ライブラリをインストールしてログインします。
pip install wandb
wandb login
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
WandbCallback を learner または fit method に追加する
import wandb
from fastai.callback.wandb import *
# wandb の run のログを開始する
wandb.init(project="my_project")
# 1つのトレーニングフェーズのみログする場合
learn.fit(..., cbs=WandbCallback())
# すべてのトレーニングフェーズで継続的にログする場合
learn = learner(..., cbs=WandbCallback())
WandbCallback は次の引数を受け取ります。
| Args | Description |
|---|
| 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
この例では、マシンに GPU が 2 基あります。ノートブック内で直接分散トレーニングを実行できるようになりました。import wandb
from fastai.vision.all import *
from accelerate import notebook_launcher
from fastai.distributed import *
from fastai.callback.wandb import WandbCallback
wandb.require(experiment="service")
path = 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(in_notebook=True, sync_bn=False):
learn.fit(1)
notebook_launcher(train, num_processes=2)
上記の例では、wandb は各プロセスごとに 1 つの run を起動します。トレーニングの最後には、2 つの run が作成されることになります。これは混乱のもとになることがあるため、メインプロセスでのみログしたい場合があります。そのためには、どのプロセスで実行しているかを手動で判別し、それ以外のすべてのプロセスでは run を作成しないようにする (wandb.init() を呼び出さない) 必要があります。
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():
cb = []
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),
)
if rank_distrib() == 0:
run = 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
import wandb
from fastai.vision.all import *
from accelerate import notebook_launcher
from fastai.distributed import *
from fastai.callback.wandb import WandbCallback
wandb.require(experiment="service")
path = untar_data(URLs.PETS) / "images"
def train():
cb = []
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),
)
if rank_distrib() == 0:
run = wandb.init("fastai_ddp", entity="capecape")
cb = WandbCallback()
learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16()
with learn.distrib_ctx(in_notebook=True, sync_bn=False):
learn.fit(1)
notebook_launcher(train, num_processes=2)