W&B のインテグレーションを使えば、既存のプロジェクトで実験管理やデータのバージョン管理をすばやく簡単にセットアップできます。PyTorch のような ML フレームワーク、Hugging Face のような ML ライブラリ、または Amazon SageMaker のようなクラウドサービスのインテグレーションをご覧ください。
これは、このセクションの複数ページの印刷可能なビューです。 印刷するには、ここをクリックしてください.
インテグレーション
- 1: 任意のライブラリに wandb を追加する
- 2: Azure OpenAI ファインチューニング
- 3: Catalyst
- 4: Cohere fine-tuning
- 5: Databricks
- 6: DeepChecks
- 7: DeepChem
- 8: Docker
- 9: Farama Gymnasium
- 10: fastai
- 10.1: fastai v1
- 11: Hugging Face Transformers
- 12: Hugging Face Diffusers
- 13: Hugging Face AutoTrain
- 14: Hugging Face Accelerate
- 15: Hydra
- 16: Keras
- 17: Kubeflow パイプライン (kfp)
- 18: LightGBM
- 19: Metaflow
- 20: MMEngine
- 21: MMF
- 22: MosaicML Composer
- 23: OpenAI API
- 24: OpenAI Fine-Tuning
- 25: OpenAI Gym
- 26: PaddleDetection
- 27: PaddleOCR
- 28: プロディジー
- 29: PyTorch
- 30: PyTorch Geometric
- 31: Pytorch チューニングする torchtune
- 32: PyTorch Ignite
- 33: PyTorch Lightning
- 34: Ray チューニング
- 35: SageMaker
- 36: Scikit-Learn
- 37: Simple Transformers
- 38: Skorch
- 39: spaCy
- 40: Stable Baselines 3
- 41: TensorBoard
- 42: TensorFlow
- 43: W&B for Julia
- 44: XGBoost
- 45: YOLOv5
- 46: ウルトラリティクス
- 47: YOLOX
1 - 任意のライブラリに wandb を追加する
任意のライブラリに wandb を追加する
このガイドでは、独自の Python ライブラリに W&B をインテグレーションするためのベストプラクティスを提供します。このことで、強力な実験管理、GPU およびシステム監視、モデルチェックポイントなどが利用可能になります。
ここでは、作業しているコードベースが単一の Python トレーニングスクリプトや Jupyter ノートブックよりも複雑な場合のベストなヒントとベストプラクティスを紹介します。対象となるトピックは以下の通りです:
- 設定要件
- ユーザーログイン
- wandb Run の開始
- Run Config の定義
- W&B へのログ記録
- 分散トレーニング
- モデルチェックポイントなど
- ハイパーパラメータチューニング
- 高度なインテグレーション
設定要件
始める前に、ライブラリの依存関係に W&B を必須にするかどうかを決めてください:
インストール時に W&B を必須にする
W&B の Python ライブラリ(wandb
)を requirements.txt
ファイルなどに含めて依存関係ファイルに追加します:
torch==1.8.0
...
wandb==0.13.*
インストール時に W&B をオプションにする
W&B SDK(wandb
)をオプションにする方法は2つあります:
A. ユーザーが手動でインストールせずに wandb
機能を使用しようとしたときにエラーメッセージを表示してエラーを発生させる:
try:
import wandb
except ImportError:
raise ImportError(
"You are trying to use wandb which is not currently installed."
"Please install it using pip install wandb"
)
B. Python パッケージをビルドする場合は wandb
をオプションの依存関係として pyproject.toml
ファイルに追加する:
[project]
name = "my_awesome_lib"
version = "0.1.0"
dependencies = [
"torch",
"sklearn"
]
[project.optional-dependencies]
dev = [
"wandb"
]
ユーザーログイン
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 wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
ユーザーが上記のいずれの手順も行わずに初めて wandb を使用する場合、あなたのスクリプトが wandb.init
を呼び出す際に自動的にログインを求められます。
Run の開始
W&B Run は、W&B によってログ記録された計算の単位です。通常、トレーニング実験ごとに1つの W&B Run を関連付けます。
以下のコードで W&B を初期化して Run を開始します:
run = wandb.init()
オプションとして、プロジェクトの名前をつけることができます。また、コード内で wandb_project
といったパラメータを使ってユーザーに設定してもらうこともできます。エンティティのパラメータについては wandb_entity
などのユーザー名やチーム名を使用します:
run = wandb.init(project=wandb_project, entity=wandb_entity)
Run を終了するには run.finish()
を呼び出す必要があります。次のように Run をコンテキストマネージャとして使うこともできます:
# このブロックが終了すると、自動的に run.finish() が呼び出されます。
# 例外によって終了した場合、run.finish(exit_code=1) を使用して
# Run を失敗とマークします。
with wandb.init() as run:
...
wandb.init
を呼び出すタイミング?
ライブラリは、W&B Run を可能な限り早く作成するべきです。なぜなら、コンソール出力に含まれるエラーメッセージなどの内容が W&B Run の一部としてログされ、デバッグが容易になるからです。
wandb
をオプション依存関係として使用する
ユーザーがライブラリを使うときに wandb
をオプションにしたい場合、以下のいずれかの方法を使用できます:
- 次のように
wandb
フラグを定義する:
trainer = my_trainer(..., use_wandb=True)
python train.py ... --use-wandb
- または、
wandb.init
でwandb
をdisabled
に設定する:
wandb.init(mode="disabled")
export WANDB_MODE=disabled
または
wandb disabled
- または、
wandb
をオフラインに設定します - これは wandb を実行はしますが、インターネットを介して W&B に通信を試みません:
export WANDB_MODE=offline
または
os.environ['WANDB_MODE'] = 'offline'
wandb offline
Run Config の定義
wandb
の Run Config を使って、W&B Run を作成する際にモデルやデータセットに関するメタデータを提供できます。この情報を利用して、異なる実験を比較し、その主な違いをすばやく理解することができます。

ログ可能な一般的な設定パラメータには以下が含まれます:
- モデル名、バージョン、アーキテクチャパラメータなど
- データセット名、バージョン、トレイン/バルの例数など
- 学習パラメータ(学習率、バッチサイズ、オプティマイザーなど)
以下のコードスニペットは設定をログする方法を示しています:
config = {"batch_size": 32, ...}
wandb.init(..., config=config)
Run Config の更新
run.config.update
を使用して設定を更新します。設定辞書の更新は、辞書が定義された後にパラメータが取得された場合に役立ちます。たとえば、モデルがインスタンス化された後にモデルのパラメータを追加したい場合などです。
run.config.update({"model_parameters": 3500})
設定ファイルを定義する方法の詳細については、実験を設定するを参照してください。
W&B へのログ記録
メトリクスのログ記録
キーがメトリクス名となる辞書を作成し、この辞書オブジェクトを run.log
に渡します:
for epoch in range(NUM_EPOCHS):
for input, ground_truth in data:
prediction = model(input)
loss = loss_fn(prediction, ground_truth)
metrics = { "loss": loss }
run.log(metrics)
メトリクスが多い場合、メトリクス名にプレフィックスを使用して UI 上で自動的にグループ化することができます。例えば、train/...
と val/...
を使用することで、トレーニングや検証メトリクス、その他のメトリクスを分けたセクションが W&B ワークスペースに作られます:
metrics = {
"train/loss": 0.4,
"train/learning_rate": 0.4,
"val/loss": 0.5,
"val/accuracy": 0.7
}
run.log(metrics)

x軸の非整合を防ぐ
同じトレーニングステップで run.log
を複数回呼び出すと、wandb SDK は run.log
を呼び出すたびに内部のステップカウンタを増加させます。このカウンタはトレーニングループ内のトレーニングステップと一致しないことがあります。
このような状況を避けるために、wandb.init
を呼び出した直後に run.define_metric
を使用して x 軸のステップを明示的に定義してください:
with wandb.init(...) as run:
run.define_metric("*", step_metric="global_step")
グロブパターンの *
は、すべてのメトリクスがチャートの x 軸として global_step
を使用することを意味します。特定のメトリクスのみを global_step
に対してログする場合は、代わりにそれらを指定できます:
run.define_metric("train/loss", step_metric="global_step")
その後、メトリクス、step
メトリクス、および global_step
を run.log
を呼び出すたびにログします:
for step, (input, ground_truth) in enumerate(data):
...
run.log({"global_step": step, "train/loss": 0.1})
run.log({"global_step": step, "eval/loss": 0.2})
独立したステップ変数にアクセスできない場合、たとえば「global_step」が検証ループ中に利用できない場合、 wandb は自動的に以前にログされた「global_step」 の値を使用します。この場合、メトリクスの初期値をログして、その値が必要なときに定義されるようにしてください。
画像、テーブル、オーディオなどのログ記録
メトリクスに加えて、プロット、ヒストグラム、テーブル、テキスト、画像、動画、オーディオ、3D などのメディアをログすることができます。
データをログする際の考慮事項には以下が含まれます:
- メトリクスはどのくらいの頻度でログされるべきか? オプション化すべきか?
- 視覚化に役立つデータの種類は何か?
- 画像の場合、サンプル予測、セグメンテーションマスクなどのログを記録して、時間の経過を見て進化を追うことができます。
- テキストの場合、後で検討できるサンプル予測のテーブルをログすることができます。
メディア、オブジェクト、プロットなどのログ記録について詳しく学ぶ。
分散トレーニング
分散環境をサポートするフレームワークでは、以下のワークフローのいずれかを適用することができます:
- 「メイン」のプロセスを検出し、そこでのみ
wandb
を使用してください。他のプロセスから必要なデータは最初にメインプロセスにルーティングされなければなりません(このワークフローが推奨されます)。 - すべてのプロセスで
wandb
を呼び出し、それらすべてに同じ一意のgroup
名を与えて自動グループ化します。
詳細については 分散トレーニング実験のログ記録 を参照してください。
モデルチェックポイントとその他のログ記録
フレームワークがモデルまたはデータセットを使用または生成する場合、W&B Artifacts を通じて wandb で完全なトレース可能性を持ってそれらをログし、パイプライン全体を自動的に監視させることができます。

Artifacts を使用しているとき、ユーザーに次のことを定義させることは有用ですが必須ではありません:
- モデルチェックポイントまたはデータセットをログする機能を有すること(任意にする場合)。
- 使用されるアーティファクトのパス/参照を入力として使用する場合。たとえば、
user/project/artifact
のような指定。 - Artifacts をログする頻度。
モデルチェックポイントのログ記録
モデルチェックポイントを W&B にログすることができます。ユニークな wandb
Run ID を使用して出力モデルチェックポイントに名前を付け、Run 間でそれらを区別するのが有効です。また、有用なメタデータを追加することもできます。さらに、以下のようにモデルごとにエイリアスを追加することもできます:
metadata = {"eval/accuracy": 0.8, "train/steps": 800}
artifact = wandb.Artifact(
name=f"model-{run.id}",
metadata=metadata,
type="model"
)
artifact.add_dir("output_model") # モデルの重みが保存されているローカルディレクトリ
aliases = ["best", "epoch_10"]
run.log_artifact(artifact, aliases=aliases)
カスタムエイリアスの作成方法については カスタムエイリアスを作成する を参照してください。
Artifacts は任意の頻度で出力ログが可能(例えば、各エポックごと、各500ステップごとなど)であり、これらは自動的にバージョン管理されます。
学習済みモデルまたはデータセットのログと追跡
トレーニングの入力として使用されるアーティファクト(学習済みモデルやデータセットなど)をログすることができます。以下のスニペットでは、アーティファクトをログし、上記のグラフのように進行中の Run の入力として追加する方法を示しています。
artifact_input_data = wandb.Artifact(name="flowers", type="dataset")
artifact_input_data.add_file("flowers.npy")
run.use_artifact(artifact_input_data)
アーティファクトをダウンロードする
アーティファクト(データセット、モデルなど)を再利用する場合、 wandb
はローカルにコピー(およびキャッシュ)をダウンロードします:
artifact = run.use_artifact("user/project/artifact:latest")
local_path = artifact.download("./tmp")
Artifacts は W&B の Artifacts セクションで見つかり、自動で生成されるエイリアス(latest
, v2
, v3
)またはログ時に手動で生成されるエイリアス(best_accuracy
など)で参照できます。
たとえば分散環境や単純な推論のために wandb
Run(wandb.init
を通して)を作成せずに Artifact をダウンロードしたい場合、代わりに wandb API を使用してアーティファクトを参照できます:
artifact = wandb.Api().artifact("user/project/artifact:latest")
local_path = artifact.download()
詳細については、Artのダウンロードと使用を参照してください。
ハイパーパラメータのチューニング
ライブラリが W&B ハイパーパラメータチューニングを活用したい場合、W&B Sweeps もライブラリに追加できます。
高度なインテグレーション
以下のインテグレーションで高度な W&B インテグレーションがどのように見えるか見ることができます。ただし、ほとんどのインテグレーションはこれほど複雑ではありません:
2 - Azure OpenAI ファインチューニング
イントロダクション
Microsoft Azureを使用してGPT-3.5やGPT-4モデルをファインチューニングすることで、W&Bはメトリクスを自動的にキャプチャし、W&Bの実験管理および評価ツールを通じて系統的な評価を促進することで、モデルの性能を追跡し、分析し、改善します。

前提条件
- 公式のAzureドキュメントに従ってAzure OpenAIサービスをセットアップします。
- APIキーを使用してW&Bアカウントを設定します。
ワークフローの概要
1. ファインチューニングのセットアップ
- Azure OpenAIの要件に従ってトレーニングデータを準備します。
- Azure OpenAIでファインチューニングジョブを設定します。
- W&Bはファインチューニングプロセスを自動的に追跡し、メトリクスとハイパーパラメーターをログします。
2. 実験管理
ファインチューニング中、W&Bは以下をキャプチャします:
- トレーニングと検証のメトリクス
- モデルのハイパーパラメーター
- リソースの利用状況
- トレーニングアーティファクト
3. モデルの評価
ファインチューニング後、W&B Weave を使用して以下を行います:
- モデルの出力を参照データセットと比較評価します。
- 異なるファインチューニングのrun間で性能を比較します。
- 特定のテストケースでモデルの振る舞いを分析します。
- モデル選択のためのデータドリブンの意思決定を行います。
実際の例
- 医療メモ生成デモを探索して、このインテグレーションがどのように以下を実現するかをご覧ください:
- ファインチューニング実験の体系的な追跡
- ドメイン固有のメトリクスを使用したモデルの評価
- ノートブックのファインチューニングのインタラクティブデモを体験してください。
追加リソース
3 - Catalyst
Catalyst は、再現性、迅速な実験、およびコードベースの再利用に焦点を当てたディープ ラーニング R&D のための PyTorch フレームワークです。これにより、新しいものを創り出すことができます。
Catalyst には、パラメータ、メトリクス、画像、その他のアーティファクトをログするための W&B インテグレーションが含まれています。
Python と Hydra を使用した例を含むインテグレーションの ドキュメント をチェックしてください。
インタラクティブな例
Catalyst と W&B インテグレーションを実際に見るために、Colab の例 を実行してください。
4 - Cohere fine-tuning
Weights & Biases を使用すると、Cohere モデルのファインチューニングメトリクスや設定をログに記録し、モデルのパフォーマンスを分析・理解し、その結果を同僚と共有することができます。
この Cohere のガイド では、ファインチューニング run を開始する方法の完全な例が示されています。また、Cohere API ドキュメントはこちら で確認できます。
Cohere ファインチューニング結果のログ
Cohere のファインチューニングログを W&B ワークスペースに追加するには:
-
W&B APIキー、W&B
entity
とproject
名を用いてWandbConfig
を作成します。W&B APIキーは https://wandb.ai/authorize で取得できます。 -
この設定を
FinetunedModel
オブジェクトとともに、モデル名、データセット、ハイパーパラメーターとともに渡して、ファインチューニング run を開始します。from cohere.finetuning import WandbConfig, FinetunedModel # W&B の詳細で設定を作成します wandb_ft_config = WandbConfig( api_key="<wandb_api_key>", entity="my-entity", # 提供された API キーに関連した有効な entity である必要があります project="cohere-ft", ) ... # データセットとハイパーパラメーターを設定します # cohere でファインチューニング run を開始します cmd_r_finetune = co.finetuning.create_finetuned_model( request=FinetunedModel( name="command-r-ft", settings=Settings( base_model=... dataset_id=... hyperparameters=... wandb=wandb_ft_config # ここに W&B の設定を渡します ), ), )
-
作成した W&B プロジェクトで、モデルのファインチューニングトレーニングと検証のメトリクスやハイパーパラメーターを確認します。
Runsの整理
W&B の runs は自動的に整理され、ジョブタイプ、ベースモデル、学習率、その他のハイパーパラメータなど、任意の設定パラメータに基づいてフィルタリングやソートが可能です。
さらに、runs の名前を変更したり、メモを追加したり、タグを作成してグループ化したりすることができます。
リソース
5 - Databricks
W&B は、Databricks 環境での W&B Jupyter ノートブック体験をカスタマイズすることにより、Databricks と統合します。
Databricks の設定
-
クラスターに wandb をインストール
クラスター設定に移動し、クラスターを選択し、Libraries をクリックします。Install New をクリックし、PyPI を選択してパッケージ
wandb
を追加します。 -
認証の設定
あなたの W&B アカウントを認証するために、ノートブックが照会できる Databricks シークレットを追加することができます。
# databricks cli をインストール pip install databricks-cli # databricks UIからトークンを生成 databricks configure --token # 2つのコマンドのいずれかでスコープを作成します(databricksでセキュリティ機能が有効かどうかによります): # セキュリティ追加機能あり databricks secrets create-scope --scope wandb # セキュリティ追加機能なし databricks secrets create-scope --scope wandb --initial-manage-principal users # こちらから api_key を追加します: https://app.wandb.ai/authorize databricks secrets put --scope wandb --key api_key
例
簡単な例
import os
import wandb
api_key = dbutils.secrets.get("wandb", "api_key")
wandb.login(key=api_key)
wandb.init()
wandb.log({"foo": 1})
Sweeps
ノートブックが wandb.sweep() または wandb.agent() を使用しようとする際に必要な設定(暫定的)です。
import os
# これらは将来的には不要になります
os.environ["WANDB_ENTITY"] = "my-entity"
os.environ["WANDB_PROJECT"] = "my-project-that-exists"
6 - DeepChecks
DeepChecks は、データの整合性の検証、分布の確認、データ分割の検証、モデルの評価、および異なるモデル間の比較など、機械学習モデルとデータの検証を最小限の労力で行うことができます。
DeepChecks と wandb のインテグレーションについて詳しく読む ->
はじめに
DeepChecks を Weights & Biases と共に使用するには、まず こちら で Weights & Biases のアカウントにサインアップする必要があります。DeepChecks における Weights & Biases のインテグレーションにより、以下のように素早く始めることができます。
import wandb
wandb.login()
# deepchecks からチェックをインポート
from deepchecks.checks import ModelErrorAnalysis
# チェックを実行
result = ModelErrorAnalysis()
# 結果を wandb にプッシュ
result.to_wandb()
また、Weights & Biases に DeepChecks のテストスイート全体をログすることもできます。
import wandb
wandb.login()
# deepchecks から full_suite テストをインポート
from deepchecks.suites import full_suite
# DeepChecks テストスイートを作成して実行
suite_result = full_suite().run(...)
# 結果を wandb にプッシュ
# ここで必要な wandb.init の設定や引数を渡すことができます
suite_result.to_wandb(project="my-suite-project", config={"suite-name": "full-suite"})
例
``このレポート は、DeepChecks と Weights & Biases を使用することの強力さを示しています

この Weights & Biases インテグレーションに関して質問や問題がある場合は、DeepChecks github リポジトリにイシューを開いてください。対応し、ご回答いたします :)
7 - DeepChem
The DeepChem library は、創薬、材料科学、化学、生物学におけるディープラーニングの利用を民主化するオープンソースツールを提供します。この W&B インテグレーションは、DeepChem を使用してモデルをトレーニングする際に、シンプルで使いやすい実験管理とモデルチェックポイントを追加します。
DeepChem のロギングを 3 行のコードで
logger = WandbLogger(…)
model = TorchModel(…, wandb_logger=logger)
model.fit(…)

Report と Google Colab
W&B DeepChem インテグレーションを使用して生成されたチャートの例として、Using W&B with DeepChem: Molecular Graph Convolutional Networks の記事を参照してください。
すぐに動作するコードを見たい場合は、この Google Colab をチェックしてください。
実験管理のトラッキング
KerasModelまたはTorchModel タイプの DeepChem モデルに 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 wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
トレーニングと評価データを W&B にログする
トレーニング損失と評価メトリクスは、W&Bに自動的に記録されます。オプションの評価は、DeepChem の ValidationCallback を使用して有効化できます。WandbLogger
は ValidationCallback コールバックを検出し、生成されたメトリクスをログします。
from deepchem.models import TorchModel, ValidationCallback
vc = ValidationCallback(…) # optional
model = TorchModel(…, wandb_logger=logger)
model.fit(…, callbacks=[vc])
logger.finish()
from deepchem.models import KerasModel, ValidationCallback
vc = ValidationCallback(…) # optional
model = KerasModel(…, wandb_logger=logger)
model.fit(…, callbacks=[vc])
logger.finish()
8 - Docker
Docker インテグレーション
W&B は、コードが実行された Docker イメージへのポインターを保存することで、以前の実験を正確に実行された環境に復元することができます。wandbライブラリは、この状態を永続化するために WANDB_DOCKER 環境変数を探します。私たちは、この状態を自動的に設定するいくつかのヘルパーを提供しています。
ローカル開発
wandb docker
は、dockerコンテナを起動し、wandbの環境変数を渡し、コードをマウントし、wandb がインストールされていることを確認するコマンドです。デフォルトでは、TensorFlow、PyTorch、Keras、そして Jupyter がインストールされた docker イメージを使用します。wandb docker my/image:latest
のようにして、同じコマンドで独自の docker イメージを開始することもできます。コマンドは現在のディレクトリーをコンテナの “/app” ディレクトリーにマウントしますが、これは “–dir” フラグで変更できます。
プロダクション
wandb docker-run
コマンドは、プロダクションのワークロードに提供されます。これは nvidia-docker
の代替として使用されることを想定しています。これは、docker run
コマンドにあなたの資格情報と WANDB_DOCKER 環境変数を追加する単純なラッパーです。"–runtime" フラグを渡さず、nvidia-docker
がマシンにインストールされている場合、ランタイムが nvidia に設定されていることも確認されます。
Kubernetes
トレーニングワークロードを Kubernetes 上で実行し、k8s API がポッドに公開されている場合(デフォルトでそうです)、wandb は API に対して docker イメージのダイジェストを問い合わせ、WANDB_DOCKER 環境変数を自動的に設定します。
復元
WANDB_DOCKER 環境変数を使用して run が計測されている場合、wandb restore username/project:run_id
を呼び出すと、新しいブランチがチェックアウトされ、コードが復元され、トレーニングに使用された正確な docker イメージが、元のコマンドで事前に設定された状態で起動されます。
9 - Farama Gymnasium
Farama Gymnasium を使用している場合、 gymnasium.wrappers.Monitor
によって生成された環境のビデオを自動的にログします。 キーワード引数 monitor_gym
を wandb.init
に True
と設定するだけです。
私たちの Gymnasium インテグレーションは非常に軽量です。 単に gymnasium
からログされるビデオファイルの名前を見るだけで、それにちなんで名前を付けるか、一致するものが見つからない場合はデフォルトで "videos"
とします。 より細かい制御が必要な場合は、いつでも手動でビデオをログすることができます。
Gymnasium と CleanRL ライブラリを使用する方法について詳しく知りたい方は、このレポートをご覧ください。

10 - fastai
もしあなたが fastai を使ってモデルを訓練しているなら、W&B には WandbCallback
を使用した簡単なインテグレーションがあります。インタラクティブなドキュメントと例についてはこちらをご覧ください →
登録と 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 wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
learner
または fit
メソッドに WandbCallback
を追加する
import wandb
from fastai.callback.wandb import *
# wandb run を開始してログをとる
wandb.init(project="my_project")
# トレーニングフェーズの一部のみログする場合
learn.fit(..., cbs=WandbCallback())
# すべてのトレーニングフェーズで継続的にログをとる場合
learn = learner(..., cbs=WandbCallback())
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 |
注: サブフォルダ “models” は常に無視されます。 |
dataset_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 があります。
ノートブック内で直接分散トレーニングを実行することができます。
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)
例
- Visualize, track, and compare Fastai models: 十分に文書化された手順
- Image Segmentation on CamVid: インテグレーションのサンプルユースケース
10.1 - fastai v1
fastai v1 を使用するスクリプトの場合、モデルのトポロジー、損失、メトリクス、重み、勾配、サンプル予測、および最適な訓練モデルを自動的にログすることができるコールバックがあります。
import wandb
from wandb.fastai import WandbCallback
wandb.init()
learn = cnn_learner(data, model, callback_fns=WandbCallback)
learn.fit(epochs)
ログされるデータは、コールバックのコンストラクタを介して設定可能です。
from functools import partial
learn = cnn_learner(
data, model, callback_fns=partial(WandbCallback, input_type="images")
)
また、トレーニングを開始するときにのみ WandbCallback を使用することも可能です。この場合、それをインスタンス化する必要があります。
learn.fit(epochs, callbacks=WandbCallback(learn))
その段階でカスタムパラメータを与えることもできます。
learn.fit(epochs, callbacks=WandbCallback(learn, input_type="images"))
コード例
インテグレーションがどのように機能するかを見るために、いくつかの例を作成しました:
Fastai v1
- シンプソンキャラクターの分類: Fastai モデルを追跡し比較するためのシンプルなデモ
- Fastai を用いたセマンティックセグメンテーション: 自動運転車のニューラルネットワークを最適化する
オプション
WandbCallback()
クラスは多くのオプションをサポートしています:
キーワード引数 | デフォルト | 説明 |
---|---|---|
learn | N/A | フックする fast.ai learner。 |
save_model | True | モデルが各ステップで改善されれば保存します。また、トレーニング終了時に最適なモデルをロードします。 |
mode | auto | min 、max 、または auto : ステップ間で指定されたトレーニングメトリクスをどのように比較するか。 |
monitor | None | 最適なモデルを保存するために使用されるトレーニングメトリクス。None はデフォルトで検証損失になります。 |
log | gradients | gradients 、parameters 、all 、または None。損失とメトリクスは常にログされます。 |
input_type | None | images または None 。サンプル予測を表示するために使用されます。 |
validation_data | None | input_type が設定されている場合にサンプル予測に使用されるデータ。 |
predictions | 36 | input_type が設定され、validation_data が None の場合に行う予測の数。 |
seed | 12345 | input_type が設定され、validation_data が None の場合にサンプル予測のためのランダムジェネレータを初期化します。 |
11 - Hugging Face Transformers
Hugging Face Transformers ライブラリは、BERTのような最先端のNLPモデルや、混合精度、勾配チェックポイントなどのトレーニング手法を簡単に使用できるようにします。W&B integrationにより、その使いやすさを損なうことなく、柔軟な実験管理とモデルのバージョン管理をインタラクティブな集中ダッシュボードに追加します。
数行で次世代のロギング
os.environ["WANDB_PROJECT"] = "<my-amazing-project>" # W&Bプロジェクトの名前を指定
os.environ["WANDB_LOG_MODEL"] = "checkpoint" # すべてのモデルチェックポイントをログ
from transformers import TrainingArguments, Trainer
args = TrainingArguments(..., report_to="wandb") # W&Bのログを有効化
trainer = Trainer(..., args=args)

始める: 実験をトラックする
サインアップしてAPIキーを作成する
APIキーは、あなたのマシンをW&Bに認証します。ユーザープロフィールからAPIキーを生成できます。
- 右上のユーザーアイコンをクリックします。
- ユーザー設定を選択し、APIキーセクションまでスクロールします。
- Revealをクリックします。表示されたAPIキーをコピーします。APIキーを非表示にするには、ページを再読み込みします。
wandb
ライブラリをインストールしてログインする
wandb
ライブラリをローカルにインストールし、ログインするには:
-
WANDB_API_KEY
環境変数をAPIキーに設定します。export WANDB_API_KEY=<your_api_key>
-
wandb
ライブラリをインストールしてログインします。pip install wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
初めてW&Bを使用する場合、クイックスタートをご覧になることをお勧めします。
プロジェクトの名前を付ける
W&B Projectは、関連するRunsからログされたすべてのチャート、データ、モデルを保存する場所です。プロジェクト名をつけることで、作業を整理し、1つのプロジェクトに関するすべての情報を一ヶ所にまとめることができます。
プロジェクトにrunを追加するには、単にWANDB_PROJECT
環境変数をプロジェクト名に設定するだけです。WandbCallback
は、このプロジェクト名の環境変数を拾い上げ、runを設定する際にそれを使用します。
WANDB_PROJECT=amazon_sentiment_analysis
import os
os.environ["WANDB_PROJECT"]="amazon_sentiment_analysis"
%env WANDB_PROJECT=amazon_sentiment_analysis
Trainer
を初期化する前に設定することを確認してください。プロジェクト名が指定されていない場合、プロジェクト名はhuggingface
にデフォルト設定されます。
トレーニングRunsをW&Bにログする
これは、コード内またはコマンドラインからトレーニング引数を定義する際の最も重要なステップです。report_to
を"wandb"
に設定することで、W&Bログを有効にします。
TrainingArguments
のlogging_steps
引数は、トレーニング中にW&Bにトレーニングメトリクスがプッシュされる頻度を制御します。run_name
引数を使用して、W&B内でトレーニングrunに名前を付けることもできます。
これで終了です。トレーニング中は、モデルが損失、評価メトリクス、モデルトポロジー、勾配をW&Bにログします。
python run_glue.py \ # Pythonスクリプトを実行
--report_to wandb \ # W&Bにログを有効化
--run_name bert-base-high-lr \ # W&B runの名前 (オプション)
# その他のコマンドライン引数をここに
from transformers import TrainingArguments, Trainer
args = TrainingArguments(
# 他の引数やキーワード引数をここに
report_to="wandb", # W&Bにログを有効化
run_name="bert-base-high-lr", # W&B runの名前 (オプション)
logging_steps=1, # W&Bにログする頻度
)
trainer = Trainer(
# 他の引数やキーワード引数をここに
args=args, # トレーニング引数
)
trainer.train() # トレーニングとW&Bへのログを開始
Trainer
をTensorFlowのTFTrainer
に置き換えるだけです。モデルのチェックポイントをオンにする
Artifactsを使用すると、最大100GBのモデルやデータセットを無料で保存し、その後Weights & BiasesのRegistryを使用できます。Registryを使用して、モデルを登録し、それらを探索・評価したり、ステージングの準備をしたり、プロダクション環境にデプロイできます。
Hugging FaceモデルのチェックポイントをArtifactsにログするには、WANDB_LOG_MODEL
環境変数を以下のいずれかに設定します:
checkpoint
:TrainingArguments
のargs.save_steps
ごとにチェックポイントをアップロードします。end
: トレーニング終了時にモデルをアップロードします。またload_best_model_at_end
が設定されている場合です。false
: モデルをアップロードしません。
WANDB_LOG_MODEL="checkpoint"
import os
os.environ["WANDB_LOG_MODEL"] = "checkpoint"
%env WANDB_LOG_MODEL="checkpoint"
これ以降に初期化するすべてのTransformers Trainer
は、モデルをW&Bプロジェクトにアップロードします。ログされたモデルチェックポイントはArtifacts UIを通じて表示可能で、完全なモデルリネージを含みます(UIでのモデルチェックポイントの例はこちらをご覧ください here)。
WANDB_LOG_MODEL
がend
に設定されているときはmodel-{run_id}
として、WANDB_LOG_MODEL
がcheckpoint
に設定されているときはcheckpoint-{run_id}
として、モデルがW&B Artifactsに保存されます。しかし、TrainingArguments
にrun_name
を渡すと、モデルはmodel-{run_name}
またはcheckpoint-{run_name}
として保存されます。W&B Registry
チェックポイントをArtifactsにログしたら、最良のモデルチェックポイントを登録して、**Registry**でチーム全体に中央集約できます。Registryを使用すると、タスクごとに最良のモデルを整理し、モデルライフサイクルを管理し、機械学習ライフサイクル全体を追跡および監査し、オートメーションダウンストリームアクションを自動化できます。
モデルのアーティファクトをリンクするには、Registryを参照してください。
トレーニング中に評価出力を視覚化する
トレーニングや評価中にモデル出力を視覚化することは、モデルがどのようにトレーニングされているかを理解するためにしばしば重要です。
Transformers Trainerのコールバックシステムを使用すると、モデルのテキスト生成出力や他の予測などの役立つデータをW&B Tablesにログできます。
トレーニング中にW&B Tableに評価出力をログする方法については、以下の**カスタムログセクション**をご覧ください:

W&B Runを終了させる(ノートブックのみ)
トレーニングがPythonスクリプトでカプセル化されている場合、スクリプトが終了するとW&B runも終了します。
JupyterまたはGoogle Colabノートブックを使用している場合は、トレーニングが終了したことをwandb.finish()
を呼び出して知らせる必要があります。
trainer.train() # トレーニングとW&Bへのログを開始
# トレーニング後の分析、テスト、他のログ済みコード
wandb.finish()
結果を視覚化する
トレーニング結果をログしたら、W&B Dashboardで結果を動的に探索できます。複数のrunを一度に比較したり、興味深い知見にズームインしたり、柔軟でインタラクティブな可視化を用いて複雑なデータから洞察を引き出すのが簡単です。
高度な機能とFAQ
最良のモデルを保存する方法は?
Trainer
にload_best_model_at_end=True
のTrainingArguments
を渡すと、W&Bは最良のパフォーマンスを示すモデルチェックポイントをアーティファクトに保存します。
モデルチェックポイントをアーティファクトとして保存すれば、それらをRegistryに昇格させることができます。Registryでは以下のことが可能です:
- MLタスクによって最良のモデルバージョンを整理する。
- モデルを集約してチームと共有する。
- モデルをステージングしてプロダクションに展開するか、さらに評価するためにブックマークする。
- 下流のCI/CDプロセスをトリガーする。
保存したモデルをロードするには?
WANDB_LOG_MODEL
でW&B Artifactsにモデルを保存した場合、追加トレーニングや推論のためにモデルウェイトをダウンロードできます。同じHugging Faceアーキテクチャーにモデルを読み戻すだけです。
# 新しいrunを作成
with wandb.init(project="amazon_sentiment_analysis") as run:
# アーティファクトの名前とバージョンを指定
my_model_name = "model-bert-base-high-lr:latest"
my_model_artifact = run.use_artifact(my_model_name)
# フォルダーにモデルウェイトをダウンロードし、パスを返す
model_dir = my_model_artifact.download()
# 同じモデルクラスを使用して、そのフォルダーからHugging Faceモデルをロード
model = AutoModelForSequenceClassification.from_pretrained(
model_dir, num_labels=num_labels
)
# 追加のトレーニングを行うか、推論を実行
チェックポイントからトレーニングを再開するには?
WANDB_LOG_MODEL='checkpoint'
を設定していた場合、model_dir
をTrainingArguments
のmodel_name_or_path
引数として使用し、Trainer
にresume_from_checkpoint=True
を渡すことでトレーニングを再開できます。
last_run_id = "xxxxxxxx" # wandb workspaceからrun_idを取得
# run_idからwandb runを再開
with wandb.init(
project=os.environ["WANDB_PROJECT"],
id=last_run_id,
resume="must",
) as run:
# アーティファクトをrunに接続
my_checkpoint_name = f"checkpoint-{last_run_id}:latest"
my_checkpoint_artifact = run.use_artifact(my_model_name)
# フォルダーにチェックポイントをダウンロードし、パスを返す
checkpoint_dir = my_checkpoint_artifact.download()
# モデルとトレーナーを再初期化
model = AutoModelForSequenceClassification.from_pretrained(
"<model_name>", num_labels=num_labels
)
# 素晴らしいトレーニング引数をここに
training_args = TrainingArguments()
trainer = Trainer(model=model, args=training_args)
# チェックポイントディレクトリを使用してトレーニングをチェックポイントから再開することを確かにする
trainer.train(resume_from_checkpoint=checkpoint_dir)
トレーニング中に評価サンプルをログして表示するには?
Transformers Trainer
を介してW&Bにログすることは、TransformersライブラリのWandbCallback
によって処理されます。Hugging Faceのログをカスタマイズする必要がある場合は、WandbCallback
をサブクラス化し、Trainerクラスから追加のメソッドを利用する追加機能を追加することにより、このコールバックを変更できます。
以下は、HF Trainerにこの新しいコールバックを追加する際の一般的なパターンであり、さらに下にはW&B Tableに評価出力をログするコード完備の例があります:
# 通常通りTrainerをインスタンス化
trainer = Trainer()
# Trainerオブジェクトを渡して新しいログコールバックをインスタンス化
evals_callback = WandbEvalsCallback(trainer, tokenizer, ...)
# Trainerにコールバックを追加
trainer.add_callback(evals_callback)
# 通常通りTrainerトレーニングを開始
trainer.train()
トレーニング中に評価サンプルを表示
以下のセクションでは、WandbCallback
をカスタマイズして、モデルの予測を実行し、トレーニング中にW&B Tableに評価サンプルをログする方法を示します。on_evaluate
メソッドを使用してeval_steps
ごとにログします。
ここでは、トークナイザーを使用してモデル出力から予測とラベルをデコードするためのdecode_predictions
関数を書いています。
その後、予測とラベルからpandas DataFrameを作成し、DataFrameにepoch
列を追加します。
最後に、DataFrameからwandb.Table
を作成し、それをwandbにログします。
さらに、freq
エポックごとに予測をログすることで、ログの頻度を制御できます。
注意: 通常のWandbCallback
とは異なり、このカスタムコールバックはTrainer
の初期化時ではなく、Trainer
がインスタンス化された後でトレーナーに追加する必要があります。これは、Trainer
インスタンスが初期化中にコールバックに渡されるためです。
from transformers.integrations import WandbCallback
import pandas as pd
def decode_predictions(tokenizer, predictions):
labels = tokenizer.batch_decode(predictions.label_ids)
logits = predictions.predictions.argmax(axis=-1)
prediction_text = tokenizer.batch_decode(logits)
return {"labels": labels, "predictions": prediction_text}
class WandbPredictionProgressCallback(WandbCallback):
"""トレーニング中にモデルの予測をログするカスタムWandbCallback。
このコールバックは、トレーニング中の各ログステップでモデルの予測とラベルをwandb.Tableにログします。トレーニングの進行に応じたモデルの予測を視覚化することができます。
Attributes:
trainer (Trainer): Hugging Face Trainerインスタンス。
tokenizer (AutoTokenizer): モデルに関連付けられたトークナイザー。
sample_dataset (Dataset): 予測を生成するための
検証データセットのサブセット。
num_samples (int, optional): 検証データセットから選択するサンプルの数。
デフォルトは100。
freq (int, optional): ログの頻度。デフォルトは2。
"""
def __init__(self, trainer, tokenizer, val_dataset, num_samples=100, freq=2):
"""WandbPredictionProgressCallbackインスタンスを初期化します。
Args:
trainer (Trainer): Hugging Face Trainerインスタンス。
tokenizer (AutoTokenizer): モデルに関連付けられたトークナイザー。
val_dataset (Dataset): 検証データセット。
num_samples (int, optional): 予測を生成するために
検証データセットから選択するサンプルの数。
デフォルトは100。
freq (int, optional): ログの頻度。デフォルトは2。
"""
super().__init__()
self.trainer = trainer
self.tokenizer = tokenizer
self.sample_dataset = val_dataset.select(range(num_samples))
self.freq = freq
def on_evaluate(self, args, state, control, **kwargs):
super().on_evaluate(args, state, control, **kwargs)
# `freq`エポックごとに予測をログすることにより、ログの頻度を制御
if state.epoch % self.freq == 0:
# 予測を生成
predictions = self.trainer.predict(self.sample_dataset)
# 予測とラベルをデコード
predictions = decode_predictions(self.tokenizer, predictions)
# 予測をwandb.Tableに追加
predictions_df = pd.DataFrame(predictions)
predictions_df["epoch"] = state.epoch
records_table = self._wandb.Table(dataframe=predictions_df)
# テーブルをwandbにログ
self._wandb.log({"sample_predictions": records_table})
# まずはTrainerをインスタンス化
trainer = Trainer(
model=model,
args=training_args,
train_dataset=lm_datasets["train"],
eval_dataset=lm_datasets["validation"],
)
# WandbPredictionProgressCallbackをインスタンス化
progress_callback = WandbPredictionProgressCallback(
trainer=trainer,
tokenizer=tokenizer,
val_dataset=lm_dataset["validation"],
num_samples=10,
freq=2,
)
# コールバックをトレーナーに追加
trainer.add_callback(progress_callback)
詳細な例については、このcolabを参照してください。
利用可能な追加のW&B設定は?
Trainer
でログされる内容のさらなる設定は、環境変数を設定することで可能です。W&B環境変数の完全なリストはこちらにあります。
環境変数 | 使用法 |
---|---|
WANDB_PROJECT |
プロジェクト名を付けます(デフォルトはhuggingface ) |
WANDB_LOG_MODEL |
モデルチェックポイントをW&Bアーティファクトとしてログします(デフォルトは
|
WANDB_WATCH |
モデルの勾配、パラメータ、またはそのいずれもログするかどうかを設定します
|
WANDB_DISABLED |
true に設定すると、ログが完全にオフになります(デフォルトはfalse ) |
WANDB_SILENT |
true に設定すると、wandbによって印刷される出力が消音されます(デフォルトはfalse ) |
WANDB_WATCH=all
WANDB_SILENT=true
%env WANDB_WATCH=all
%env WANDB_SILENT=true
wandb.init
をカスタマイズする方法は?
Trainer
が使用するWandbCallback
は、Trainer
が初期化される際に内部的にwandb.init
を呼び出します。代わりに、Trainer
が初期化される前にwandb.init
を手動で呼び出してrunを設定することもできます。これにより、W&Bのrun設定を完全にコントロールできます。
以下は、init
に何を渡すかの例です。wandb.init
の使用方法の詳細については、リファレンスドキュメントを参照してください。
wandb.init(
project="amazon_sentiment_analysis",
name="bert-base-high-lr",
tags=["baseline", "high-lr"],
group="bert",
)
追加のリソース
以下は、6つのTransformersとW&Bに関連する記事で楽しめるかもしれないものです。
Hugging Face Transformersのハイパーパラメータ最適化
- Hugging Face Transformersのハイパーパラメータ最適化のための3つの戦略:グリッド検索、ベイズ最適化、population based trainingが比較されています。
- Hugging Face transformersの標準的なベースラインモデルを使用し、SuperGLUEベンチマークからRTEデータセットを使用してファインチューニングしたいと考えています。
- 結果は、population based trainingがHugging Face transformerモデルのハイパーパラメータ最適化に最も効果的なアプローチであることを示しています。
詳細なレポートはこちらをご覧ください。
Hugging Tweets: ツイートを生成するモデルをトレーニング
- 記事では、著者が任意の人のツイートを5分で再学習するようにGPT2 HuggingFace Transformerモデルをファインチューニングする方法を実演します。
- モデルは以下のパイプラインを使用します:ツイートのダウンロード、データセットの最適化、初期実験、ユーザー間の損失の比較、モデルのファインチューニング。
詳細なレポートはこちらをご覧ください。
Hugging Face BERTとWBによる文の分類
- この記事では、自然言語処理の最近のブレークスルーの力を活用した文分類器の構築について説明します。NLPへの転移学習の適用に焦点を当てています。
- 文法的に正しいかどうかをラベル付けした文のセットである、単一文分類用のThe Corpus of Linguistic Acceptability (CoLA) データセットを使用します。このデータセットは2018年5月に初めて公開されました。
- GoogleのBERTを使用して、最小限の努力で様々なNLPタスクで高性能なモデルを作成します。
詳細なレポートはこちらをご覧ください。
Hugging Faceモデルパフォーマンスをトラックするためのステップバイステップガイド
- W&Bと Hugging Face transformers を使って、BERT の97%の精度を維持しつつ、40%小さいTrasformerであるDistilBERTをGLUEベンチマークでトレーニングします。
- GLUEベンチマークは、NLPモデルをトレーニングするための9つのデータセットとタスクのコレクションです。
詳細なレポートはこちらをご覧ください。
HuggingFaceにおけるEarly Stoppingの例
- Early Stopping正則化を使用して、Hugging Face Transformerをファインチューニングすることは、PyTorchやTensorFlowでネイティブに実行できます。
- TensorFlowでEarlyStoppingコールバックを使用する方法は、
tf.keras.callbacks.EarlyStopping
コールバックを使って簡単にできます。 - PyTorchでは、オフの早期停止メソッドはありませんが、GitHub Gistで利用可能な早期停止フックがあります。
詳細なレポートはこちらをご覧ください。
カスタムデータセットでHugging Face Transformersをファインチューニングする方法
カスタムIMDBデータセットでセンチメント分析(二項分類)のためにDistilBERT transformerをファインチューニングします。
詳細なレポートはこちらをご覧ください。
ヘルプを受けたり、機能をリクエストする
Hugging Face W&Bインテグレーションに関する問題、質問、または機能のリクエストについては、Hugging Faceフォーラムのこのスレッドに投稿するか、Hugging FaceTransformers GitHubリポジトリで問題を開いてください。
12 - Hugging Face Diffusers
Hugging Face Diffusers は、画像、オーディオ、さらには分子の3D構造を生成するための最先端の学習済み拡散モデルのためのライブラリです。W&B インテグレーションは、柔軟な実験管理、メディア可視化、パイプライン アーキテクチャー、および設定管理をインタラクティブで集中化されたダッシュボードに追加し、使いやすさを損ないません。
たった2行で次世代のログ
実験に関連するすべてのプロンプト、ネガティブプロンプト、生成されたメディア、および設定を、たった2行のコードを含めるだけでログできます。ログを始めるためのコードはこちらの2行です:
# autolog 関数をインポート
from wandb.integration.diffusers import autolog
# パイプラインを呼び出す前に autolog を呼ぶ
autolog(init=dict(project="diffusers_logging"))
![]() |
---|
実験の結果がどのようにログされるかの例です。 |
始め方
-
diffusers
,transformers
,accelerate
, およびwandb
をインストールします。-
コマンドライン:
pip install --upgrade diffusers transformers accelerate wandb
-
ノートブック:
!pip install --upgrade diffusers transformers accelerate wandb
-
-
autolog
を使用して Weights & Biases の run を初期化し、すべてのサポートされているパイプライン呼び出しからの入出力を自動的に追跡します。init
パラメータを持つautolog()
関数を呼び出すことができ、このパラメータはwandb.init()
によって要求されるパラメータの辞書が受け入れられます。autolog()
を呼び出すと、Weights & Biases の run が初期化され、すべてのサポートされているパイプライン呼び出しからの入力と出力が自動的に追跡されます。- 各パイプライン呼び出しはその run のワークスペース内の独自の table に追跡され、パイプライン呼び出しに関連する設定はその run のワークフローリストに追加されます。
- プロンプト、ネガティブプロンプト、生成されたメディアは
wandb.Table
にログされます。 - シードやパイプライン アーキテクチャーを含む実験に関連するすべての他の設定は、その run の設定セクションに保存されます。
- 各パイプライン呼び出しの生成されたメディアは run の media panels にもログされます。
サポートされているパイプライン呼び出しのリストは[こちら](https://github.com/wandb/wandb/blob/main/wandb/integration/diffusers/autologger.py#L12-L72)から見つけることができます。このインテグレーションの新機能をリクエストしたり、関連するバグを報告したりする場合は、[https://github.com/wandb/wandb/issues](https://github.com/wandb/wandb/issues)で問題をオープンしてください。
例
Autologging
ここでは、autolog の動作を示す簡単なエンドツーエンドの例を示します。
import torch from diffusers import DiffusionPipeline # autolog 関数をインポート from wandb.integration.diffusers import autolog # パイプラインを呼び出す前に autolog を呼ぶ autolog(init=dict(project="diffusers_logging")) # 拡散パイプラインを初期化 pipeline = DiffusionPipeline.from_pretrained( "stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16 ).to("cuda") # プロンプト、ネガティブプロンプト、種を定義 prompt = ["a photograph of an astronaut riding a horse", "a photograph of a dragon"] negative_prompt = ["ugly, deformed", "ugly, deformed"] generator = torch.Generator(device="cpu").manual_seed(10) # パイプラインを呼び出して画像を生成 images = pipeline( prompt, negative_prompt=negative_prompt, num_images_per_prompt=2, generator=generator, )
import torch from diffusers import DiffusionPipeline import wandb # autolog 関数をインポート from wandb.integration.diffusers import autolog # パイプラインを呼び出す前に autolog を呼ぶ autolog(init=dict(project="diffusers_logging")) # 拡散パイプラインを初期化 pipeline = DiffusionPipeline.from_pretrained( "stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16 ).to("cuda") # プロンプト、ネガティブプロンプト、種を定義 prompt = ["a photograph of an astronaut riding a horse", "a photograph of a dragon"] negative_prompt = ["ugly, deformed", "ugly, deformed"] generator = torch.Generator(device="cpu").manual_seed(10) # パイプラインを呼び出して画像を生成 images = pipeline( prompt, negative_prompt=negative_prompt, num_images_per_prompt=2, generator=generator, ) # 実験を終了 wandb.finish()
-
単一の実験の結果:
-
複数の実験の結果:
-
実験の設定:
パイプラインを呼び出した後、IPython ノートブック環境でコードを実行する際にはwandb.finish()
を明示的に呼び出す必要があります。Python スクリプトを実行する際は必要ありません。マルチパイプライン ワークフローの追跡
このセクションでは、
StableDiffusionXLPipeline
で生成された潜在変数が対応するリファイナーによって調整される、典型的なStable Diffusion XL + Refiner ワークフローを使用した autolog のデモンストレーションを行います。import torch from diffusers import StableDiffusionXLImg2ImgPipeline, StableDiffusionXLPipeline from wandb.integration.diffusers import autolog # SDXL ベース パイプラインを初期化 base_pipeline = StableDiffusionXLPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True, ) base_pipeline.enable_model_cpu_offload() # SDXL リファイナー パイプラインを初期化 refiner_pipeline = StableDiffusionXLImg2ImgPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-refiner-1.0", text_encoder_2=base_pipeline.text_encoder_2, vae=base_pipeline.vae, torch_dtype=torch.float16, use_safetensors=True, variant="fp16", ) refiner_pipeline.enable_model_cpu_offload() prompt = "a photo of an astronaut riding a horse on mars" negative_prompt = "static, frame, painting, illustration, sd character, low quality, low resolution, greyscale, monochrome, nose, cropped, lowres, jpeg artifacts, deformed iris, deformed pupils, bad eyes, semi-realistic worst quality, bad lips, deformed mouth, deformed face, deformed fingers, deformed toes standing still, posing" # 乱数を制御することで実験を再現可能にします。 # シードは自動的に WandB にログされます。 seed = 42 generator_base = torch.Generator(device="cuda").manual_seed(seed) generator_refiner = torch.Generator(device="cuda").manual_seed(seed) # WandB Autolog を Diffusers に呼び出します。これにより、 # プロンプト、生成された画像、パイプライン アーキテクチャー、すべての # 関連する実験設定が Weights & Biases に自動的にログされ、 # 画像生成実験を簡単に再現、共有、分析できるようになります。 autolog(init=dict(project="sdxl")) # ベースパイプラインを呼び出して潜在変数を生成 image = base_pipeline( prompt=prompt, negative_prompt=negative_prompt, output_type="latent", generator=generator_base, ).images[0] # リファイナーパイプラインを呼び出して調整された画像を生成 image = refiner_pipeline( prompt=prompt, negative_prompt=negative_prompt, image=image[None, :], generator=generator_refiner, ).images[0]
import torch from diffusers import StableDiffusionXLImg2ImgPipeline, StableDiffusionXLPipeline import wandb from wandb.integration.diffusers import autolog # SDXL ベース パイプラインを初期化 base_pipeline = StableDiffusionXLPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True, ) base_pipeline.enable_model_cpu_offload() # SDXL リファイナー パイプラインを初期化 refiner_pipeline = StableDiffusionXLImg2ImgPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-refiner-1.0", text_encoder_2=base_pipeline.text_encoder_2, vae=base_pipeline.vae, torch_dtype=torch.float16, use_safetensors=True, variant="fp16", ) refiner_pipeline.enable_model_cpu_offload() prompt = "a photo of an astronaut riding a horse on mars" negative_prompt = "static, frame, painting, illustration, sd character, low quality, low resolution, greyscale, monochrome, nose, cropped, lowres, jpeg artifacts, deformed iris, deformed pupils, bad eyes, semi-realistic worst quality, bad lips, deformed mouth, deformed face, deformed fingers, deformed toes standing still, posing" # 乱数を制御することで実験を再現可能にします。 # シードは自動的に WandB にログされます。 seed = 42 generator_base = torch.Generator(device="cuda").manual_seed(seed) generator_refiner = torch.Generator(device="cuda").manual_seed(seed) # WandB Autolog を Diffusers に呼び出します。これにより、 # プロンプト、生成された画像、パイプライン アーキテクチャー、すべての # 関連する実験設定が Weights & Biases に自動的にログされ、 # 画像生成実験を簡単に再現、共有、分析できるようになります。 autolog(init=dict(project="sdxl")) # ベースパイプラインを呼び出して潜在変数を生成 image = base_pipeline( prompt=prompt, negative_prompt=negative_prompt, output_type="latent", generator=generator_base, ).images[0] # リファイナーパイプラインを呼び出して調整された画像を生成 image = refiner_pipeline( prompt=prompt, negative_prompt=negative_prompt, image=image[None, :], generator=generator_refiner, ).images[0] # 実験を終了 wandb.finish()
- Stable Diffusion XL + Refiner の実験の例:
追加リソース
13 - Hugging Face AutoTrain
Hugging Face AutoTrain は、自然言語処理 (NLP) タスク、コンピュータビジョン (CV) タスク、スピーチ タスク、さらには表形式のタスクのための最先端モデルをトレーニングするノーコードツールです。
Weights & Biases は Hugging Face AutoTrain に直接インテグレーションされています。実験管理と設定管理を提供します。実験には CLI コマンド内の単一パラメータを使用するだけで簡単です。

必要条件をインストールする
autotrain-advanced
と wandb
をインストールします。
pip install --upgrade autotrain-advanced wandb
!pip install --upgrade autotrain-advanced wandb
これらの変更を示すために、このページでは数学データセット上での LLM の微調整を行い、GSM8k Benchmarks での pass@1
での最先端の結果を達成します。
データセットを準備する
Hugging Face AutoTrain は、独自の CSV データセットが適切に動作するために特定の形式を持つことを期待しています。
-
トレーニングファイルには、トレーニングで使用される
text
カラムが含まれている必要があります。最良の結果を得るために、text
カラムのデータは### Human: Question?### Assistant: Answer.
形式に準拠している必要があります。timdettmers/openassistant-guanaco
に優れた例を確認してください。しかし、MetaMathQA データセット には、
query
、response
、type
のカラムが含まれています。まず、このデータセットを前処理します。type
カラムを削除し、query
とresponse
カラムの内容を### Human: Query?### Assistant: Response.
形式で新しいtext
カラムに結合します。トレーニングは、結果のデータセット、rishiraj/guanaco-style-metamath
を使用します。
autotrain
を使用したトレーニング
コマンドラインまたはノートブックから autotrain
の高度な機能を使用してトレーニングを開始できます。--log
引数を使用するか、--log wandb
を使用して、W&B run に結果をログします。
autotrain llm \
--train \
--model HuggingFaceH4/zephyr-7b-alpha \
--project-name zephyr-math \
--log wandb \
--data-path data/ \
--text-column text \
--lr 2e-5 \
--batch-size 4 \
--epochs 3 \
--block-size 1024 \
--warmup-ratio 0.03 \
--lora-r 16 \
--lora-alpha 32 \
--lora-dropout 0.05 \
--weight-decay 0.0 \
--gradient-accumulation 4 \
--logging_steps 10 \
--fp16 \
--use-peft \
--use-int4 \
--merge-adapter \
--push-to-hub \
--token <huggingface-token> \
--repo-id <huggingface-repository-address>
# ハイパーパラメーターを設定する
learning_rate = 2e-5
num_epochs = 3
batch_size = 4
block_size = 1024
trainer = "sft"
warmup_ratio = 0.03
weight_decay = 0.
gradient_accumulation = 4
lora_r = 16
lora_alpha = 32
lora_dropout = 0.05
logging_steps = 10
# トレーニングを実行する
!autotrain llm \
--train \
--model "HuggingFaceH4/zephyr-7b-alpha" \
--project-name "zephyr-math" \
--log "wandb" \
--data-path data/ \
--text-column text \
--lr str(learning_rate) \
--batch-size str(batch_size) \
--epochs str(num_epochs) \
--block-size str(block_size) \
--warmup-ratio str(warmup_ratio) \
--lora-r str(lora_r) \
--lora-alpha str(lora_alpha) \
--lora-dropout str(lora_dropout) \
--weight-decay str(weight_decay) \
--gradient-accumulation str(gradient_accumulation) \
--logging-steps str(logging_steps) \
--fp16 \
--use-peft \
--use-int4 \
--merge-adapter \
--push-to-hub \
--token str(hf_token) \
--repo-id "rishiraj/zephyr-math"

追加のリソース
14 - Hugging Face Accelerate
Hugging Face Accelerate は、同じ PyTorch コードを任意の分散設定で実行できるようにするライブラリで、モデルトレーニングとスケールでの推論を簡素化します。
Accelerate は Weights & Biases Tracker を含んでおり、以下でその使用方法を示します。また、Accelerate Trackers について詳しくは こちらのドキュメント をご覧ください。
Accelerate を使ってログを開始する
Accelerate と Weights & Biases を使用するには、以下の疑似コードに従ってください。
from accelerate import Accelerator
# Accelerator オブジェクトに wandb でログを記録するように伝える
accelerator = Accelerator(log_with="wandb")
# wandb run を初期化し、wandb のパラメータと任意の設定情報を渡す
accelerator.init_trackers(
project_name="my_project",
config={"dropout": 0.1, "learning_rate": 1e-2}
init_kwargs={"wandb": {"entity": "my-wandb-team"}}
)
...
# `accelerator.log`を呼び出して wandb にログを記録する、`step` はオプション
accelerator.log({"train_loss": 1.12, "valid_loss": 0.8}, step=global_step)
# wandb トラッカーが正しく終了するようにする
accelerator.end_training()
さらに説明すると、以下の手順が必要です。
- Accelerator クラスを初期化するときに
log_with="wandb"
を渡す init_trackers
メソッドを呼び出し、以下を渡します:
project_name
よりプロジェクト名wandb.init
に渡したい任意のパラメータをネストされた dict でinit_kwargs
に- wandb run にログ記録したい任意の実験設定情報を
config
で
- Weights & Biases にログを記録するために
.log
メソッドを使用する;step
引数はオプション - トレーニングが終了したら
.end_training
を呼び出す
W&B トラッカーへのアクセス
W&B トラッカーにアクセスするには、Accelerator.get_tracker()
メソッドを使用します。トラッカーの.name
属性に対応する文字列を渡すと、main
プロセスのトラッカーが返されます。
wandb_tracker = accelerator.get_tracker("wandb")
そこから、通常通り wandb の run オブジェクトと対話できます:
wandb_tracker.log_artifact(some_artifact_to_log)
Accelerate にビルトインされたトラッカーは、正しいプロセスで自動的に実行されるので、トラッカーがメインプロセスでのみ実行するように設定されている場合、それが自動的に行われます。
Accelerate のラッピングを完全に削除したい場合は、次の方法で同じ結果を得ることができます:
wandb_tracker = accelerator.get_tracker("wandb", unwrap=True)
with accelerator.on_main_process:
wandb_tracker.log_artifact(some_artifact_to_log)
Accelerate 記事
以下は Accelerate 記事で、お楽しみいただけるかもしれません。
HuggingFace Accelerate Super Charged With Weights & Biases
- この記事では、HuggingFace Accelerate が提供するものと、Weights & Biases に結果を記録しながら分散トレーニングと評価を簡単に行う方法を紹介します。
完全なレポートは こちらをご覧ください。
15 - Hydra
Hydra は、研究やその他の複雑なアプリケーションの開発を簡素化するオープンソースの Python フレームワークです。重要な機能は、構成を合成して階層的に動的に作成し、それを構成ファイルやコマンドラインを介してオーバーライドする能力です。
W&B の機能を活用しながら、Hydra を使った設定管理を引き続き利用できます。
メトリクスの追跡
通常通り、wandb.init
と wandb.log
を用いてメトリクスを追跡します。ここでは、wandb.entity
と wandb.project
は hydra 設定ファイル内で定義されています。
import wandb
@hydra.main(config_path="configs/", config_name="defaults")
def run_experiment(cfg):
run = wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project)
wandb.log({"loss": loss})
ハイパーパラメーターの追跡
Hydra は設定辞書を操作するためのデフォルト手段として omegaconf を利用しています。OmegaConf
の辞書は基本的な辞書のサブクラスではないため、Hydra の Config
を直接 wandb.config
に渡すとダッシュボードで予期せぬ結果を引き起こします。omegaconf.DictConfig
を基本的な dict
型に変換してから wandb.config
に渡す必要があります。
@hydra.main(config_path="configs/", config_name="defaults")
def run_experiment(cfg):
wandb.config = omegaconf.OmegaConf.to_container(
cfg, resolve=True, throw_on_missing=True
)
wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project)
wandb.log({"loss": loss})
model = Model(**wandb.config.model.configs)
マルチプロセッシングのトラブルシューティング
プロセスの開始時にハングアップする場合、この既知の問題による可能性があります。これを解決するには、次のように wandb.init
に追加の設定パラメータを追加することで、wandb のマルチプロセッシングプロトコルを変更してみてください。
wandb.init(settings=wandb.Settings(start_method="thread"))
または、シェルからグローバルな環境変数を設定することで:
$ export WANDB_START_METHOD=thread
ハイパーパラメーターの最適化
W&B Sweeps は高度にスケーラブルなハイパーパラメーター探索プラットフォームで、最低限のコードスペースで W&B 実験に関する興味深い洞察と可視化を提供します。 Sweeps は Hydra プロジェクトにノーコーディングでシームレスに統合されます。必要なのは、通常のようにスイープの対象となる様々なパラメータを説明する設定ファイルです。
単純な例としての sweep.yaml
ファイルは以下の通りです:
program: main.py
method: bayes
metric:
goal: maximize
name: test/accuracy
parameters:
dataset:
values: [mnist, cifar10]
command:
- ${env}
- python
- ${program}
- ${args_no_hyphens}
スイープを呼び出します:
wandb sweep sweep.yaml` \
W&B は自動的にプロジェクト内にスイープを作成し、各マシンでスイープを実行するための wandb agent
コマンドを返します。
Hydra デフォルトに存在しないパラメーターを渡す
Hydra はデフォルトの設定ファイルに存在しない追加のパラメーターをコマンドラインを通して渡すことをサポートしており、コマンド前に +
を付けることで可能です。例えば、一部の値とともに追加のパラメーターを渡すには、以下のように単に呼び出します:
$ python program.py +experiment=some_experiment
このような +
設定に対して、Hydra Experiments の設定時と同様にスイープすることはできません。この問題を回避するために、実験パラメーターをデフォルトの空ファイルで初期化し、W&B Sweep を用いて各呼び出し時にこれらの空の設定をオーバーライドすることができます。詳細については、この W&B Report をご覧ください。
16 - Keras
Keras コールバック
W&B は Keras 用に3つのコールバックを提供しています。wandb
v0.13.4から利用可能です。レガシーな WandbCallback
は下にスクロールしてください。
-
WandbMetricsLogger
: このコールバックは Experiment Tracking に使用します。トレーニングと検証のメトリクス、システムメトリクスを Weights and Biases にログします。 -
WandbModelCheckpoint
: モデルのチェックポイントを Weights and Biases の Artifacts にログするためにこのコールバックを使用します。 -
WandbEvalCallback
: このベースコールバックは、モデルの予測を Weights and Biases の Tables にログして、インタラクティブな可視化を行います。
これらの新しいコールバックは以下の特徴を持っています:
- Keras のデザイン哲学に従います。
- すべての機能に対して単一のコールバック (
WandbCallback
) を使用する際の認知負荷を減らします。 - Keras ユーザーがコールバックをサブクラス化してニッチなユースケースをサポートできるように簡単に改修できます。
WandbMetricsLogger
を使用して実験を追跡
WandbMetricsLogger
は、on_epoch_end
や on_batch_end
などのコールバックメソッドが引数として取得する Keras の logs
辞書を自動的にログします。
これにより次の項目が追跡されます:
model.compile
に定義されたトレーニングと検証のメトリクス。- システム (CPU/GPU/TPU) のメトリクス。
- 学習率(固定値または学習率スケジューラ)。
import wandb
from wandb.integration.keras import WandbMetricsLogger
# 新しい W&B run を初期化
wandb.init(config={"bs": 12})
# WandbMetricsLogger を model.fit に渡す
model.fit(
X_train, y_train, validation_data=(X_test, y_test), callbacks=[WandbMetricsLogger()]
)
WandbMetricsLogger
リファレンス
パラメータ | 説明 |
---|---|
log_freq |
(epoch , batch , または int ): epoch の場合、各エポック終了時にメトリクスをログします。batch の場合、各バッチ終了時にメトリクスをログします。int の場合、その数のバッチ終了時にメトリクスをログします。デフォルトは epoch 。 |
initial_global_step |
(int): 初期エポックからトレーニングを再開し、かつ学習率スケジューラを使用する場合、学習率を正しくログするためにこの引数を使用します。step_size * initial_step として計算できます。デフォルトは 0。 |
WandbModelCheckpoint
を使用してモデルをチェックポイント
WandbModelCheckpoint
コールバックを使用して、Keras モデル (SavedModel
形式) またはモデルの重みを定期的に保存し、モデルのバージョン管理のために W&B アーティファクトとしてアップロードします。
このコールバックは tf.keras.callbacks.ModelCheckpoint
からサブクラス化されているため、チェックポイントのロジックは親コールバックによって処理されます。
このコールバックが保存するもの:
- モニターに基づいて最高のパフォーマンスを達成したモデル。
- パフォーマンスに関係なく各エポック終了時のモデル。
- エポックまたは一定のトレーニングバッチ数後のモデル。
- モデルの重みのみ、またはモデル全体。
SavedModel
形式または.h5
形式いずれかのモデル。
このコールバックは WandbMetricsLogger
と併用してください。
import wandb
from wandb.integration.keras import WandbMetricsLogger, WandbModelCheckpoint
# 新しい W&B run を初期化
wandb.init(config={"bs": 12})
# WandbModelCheckpoint を model.fit に渡す
model.fit(
X_train,
y_train,
validation_data=(X_test, y_test),
callbacks=[
WandbMetricsLogger(),
WandbModelCheckpoint("models"),
],
)
WandbModelCheckpoint
リファレンス
パラメータ | 説明 |
---|---|
filepath |
(str): モードファイルを保存するパス。 |
monitor |
(str): モニターするメトリクスの名前。 |
verbose |
(int): 冗長モード。0 または 1。モード 0 は静かに動作し、モード 1 はコールバックがアクションをとるときにメッセージを表示します。 |
save_best_only |
(Boolean): save_best_only=True の場合、monitor と mode 属性で定義された要件に基づいて最新のモデルまたはベストとみなされるモデルのみを保存します。 |
save_weights_only |
(Boolean): True の場合、モデルの重みのみを保存します。 |
mode |
(auto , min , or max ): val_acc の場合は max に設定し、val_loss の場合は min に設定してください。 |
save_freq |
(“epoch” or int): epoch を使用する場合、コールバックは各エポック後にモデルを保存します。整数を使用する場合、指定されたバッチ数の終了時にモデルを保存します。val_acc や val_loss などの検証メトリクスを監視する場合、save_freq は “epoch” に設定する必要があります。 |
options |
(str): save_weights_only が真の場合はオプションの tf.train.CheckpointOptions オブジェクト、save_weights_only が偽の場合はオプションの tf.saved_model.SaveOptions オブジェクト。 |
initial_value_threshold |
(float): 監視するメトリクスの初期 “ベスト” 値。 |
N エポック後にチェックポイントをログ
デフォルト (save_freq="epoch"
) では、コールバックは各エポック後にアーティファクトとしてチェックポイントを作成し、アップロードします。特定のバッチ数後にチェックポイントを作成するには、save_freq
を整数に設定します。N
エポック後にチェックポイントを作成するには、train
データローダーの基数を計算し、それを save_freq
に渡します。
WandbModelCheckpoint(
filepath="models/",
save_freq=int((trainloader.cardinality()*N).numpy())
)
TPU アーキテクチャーで効率的にチェックポイントをログ
TPU 上でチェックポイントを作成する際に、UnimplementedError: File system scheme '[local]' not implemented
エラーメッセージが発生することがあります。これは、モデルディレクトリー (filepath
) がクラウドストレージバケットパス (gs://bucket-name/...
) を使用しなければならないためであり、このバケットは TPU サーバーからアクセス可能でなければなりません。ただし、ローカルパスを使用してチェックポイントを行い、それを Artifacts としてアップロードすることは可能です。
checkpoint_options = tf.saved_model.SaveOptions(experimental_io_device="/job:localhost")
WandbModelCheckpoint(
filepath="models/,
options=checkpoint_options,
)
モデル予測を WandbEvalCallback
で可視化
WandbEvalCallback
は、モデル予測のための Keras コールバックを主に構築するための抽象基底クラスであり、副次的にデータセットの可視化にも使われます。
この抽象コールバックは、データセットやタスクに対してはアグノスティックです。これを使用するには、このベース WandbEvalCallback
コールバッククラスを継承し、add_ground_truth
と add_model_prediction
メソッドを実装します。
WandbEvalCallback
は、以下のメソッドを提供するユーティリティクラスです:
- データと予測の
wandb.Table
インスタンスを作成します。 - データと予測のテーブルを
wandb.Artifact
としてログします。 on_train_begin
時にデータテーブルをログします。on_epoch_end
時に予測テーブルをログします。
以下の例では、画像分類タスクのために WandbClfEvalCallback
を使用しています。この例のコールバックは検証データ (data_table
) を W&B にログし、推論を行い、各エポック終了時に予測 (pred_table
) を W&B にログします。
import wandb
from wandb.integration.keras import WandbMetricsLogger, WandbEvalCallback
# モデル予測可視化用コールバックを実装
class WandbClfEvalCallback(WandbEvalCallback):
def __init__(
self, validation_data, data_table_columns, pred_table_columns, num_samples=100
):
super().__init__(data_table_columns, pred_table_columns)
self.x = validation_data[0]
self.y = validation_data[1]
def add_ground_truth(self, logs=None):
for idx, (image, label) in enumerate(zip(self.x, self.y)):
self.data_table.add_data(idx, wandb.Image(image), label)
def add_model_predictions(self, epoch, logs=None):
preds = self.model.predict(self.x, verbose=0)
preds = tf.argmax(preds, axis=-1)
table_idxs = self.data_table_ref.get_index()
for idx in table_idxs:
pred = preds[idx]
self.pred_table.add_data(
epoch,
self.data_table_ref.data[idx][0],
self.data_table_ref.data[idx][1],
self.data_table_ref.data[idx][2],
pred,
)
# ...
# 新しい W&B run を初期化
wandb.init(config={"hyper": "parameter"})
# コールバックを Model.fit に追加
model.fit(
X_train,
y_train,
validation_data=(X_test, y_test),
callbacks=[
WandbMetricsLogger(),
WandbClfEvalCallback(
validation_data=(X_test, y_test),
data_table_columns=["idx", "image", "label"],
pred_table_columns=["epoch", "idx", "image", "label", "pred"],
),
],
)
WandbEvalCallback
リファレンス
パラメータ | 説明 |
---|---|
data_table_columns |
(list) data_table の列名のリスト |
pred_table_columns |
(list) pred_table の列名のリスト |
メモリ使用量の詳細
data_table
は on_train_begin
メソッドが呼び出されたときに W&B にログされます。一度 W&B アーティファクトとしてアップロードされると、data_table_ref
クラス変数を使用してこのテーブルにアクセスすることができます。data_table_ref
は 2D リストで、self.data_table_ref[idx][n]
のようにインデックスを付けてアクセスできます。この例では、idx
は行番号で、n
は列番号です。
コールバックのカスタマイズ
on_train_begin
や on_epoch_end
メソッドをオーバーライドして、より細かい制御を行うことができます。N
バッチ後にサンプルをログしたい場合、on_train_batch_end
メソッドを実装することができます。
WandbEvalCallback
を継承してモデル予測可視化のコールバックを実装している場合、何か明確にすべき点や修正が必要な場合は、問題を報告してお知らせください。issue を開いてください。WandbCallback
[レガシー]
WandbCallback
クラスを使用して、model.fit
で追跡されるすべてのメトリクスと損失値を自動的に保存します。
import wandb
from wandb.integration.keras import WandbCallback
wandb.init(config={"hyper": "parameter"})
... # Keras でモデルをセットアップするためのコード
# コールバックを model.fit に渡す
model.fit(
X_train, y_train, validation_data=(X_test, y_test), callbacks=[WandbCallback()]
)
短いビデオ Get Started with Keras and Weights & Biases in Less Than a Minute をご覧ください。
より詳細なビデオは Integrate Weights & Biases with Keras をご覧ください。Colab Jupyter Notebook を確認できます。
WandbCallback
クラスは、広範なロギング設定オプションをサポートしています:監視するメトリクスの指定、重みや勾配の追跡、トレーニングデータと検証データ上の予測のログなど。
keras.WandbCallback
の参考文献のドキュメントも確認してください。より詳細な情報があります。
WandbCallback
- Keras によって収集された任意のメトリクスの履歴データを自動的にログします:
keras_model.compile()
に渡された損失とその他の項目。 monitor
とmode
属性によって定義された “最良” のトレーニングステップに関連付けられたサマリーメトリクスを設定します。これはデフォルトでは最小のval_loss
を持つエポックとなります。WandbCallback
はデフォルトで最も良いepoch
に関連付けられたモデルを保存します。- 勾配とパラメータのヒストグラムをオプションでログします。
- オプションで wandb に視覚化するためのトレーニングおよび検証データを保存します。
WandbCallback
リファレンス
引数 | |
---|---|
monitor |
(str) monitor するメトリックの名前。デフォルトは val_loss 。 |
mode |
(str) {auto , min , max } のいずれか。min - モニターが最小化されるときにモデルを保存 max - モニターが最大化されるときにモデルを保存 auto - モデル保存のタイミングを推測(デフォルト)。 |
save_model |
True - monitor が過去のすべてのエポックを上回った場合にモデルを保存 False - モデルを保存しない |
save_graph |
(boolean) True の場合、wandb にモデルグラフを保存します(デフォルトは True)。 |
save_weights_only |
(boolean) True の場合、モデルの重みのみを保存します(model.save_weights(filepath) )。そうでなければ、完全なモデルを保存します。 |
log_weights |
(boolean) True の場合、モデルのレイヤーの重みのヒストグラムを保存します。 |
log_gradients |
(boolean) True の場合、トレーニング勾配のヒストグラムをログします |
training_data |
(tuple) model.fit に渡される (X,y) と同じ形式。勾配を計算するために必要で、log_gradients が True の場合必須です。 |
validation_data |
(tuple) model.fit に渡される (X,y) と同じ形式。Wandb が視覚化するためのデータセット。フィールドを設定すると、各エポックで wandb が少数の予測を行い、視覚化のための結果を保存します。 |
generator |
(generator) wandb が視覚化するための検証データを返すジェネレータ。このジェネレータはタプル (X,y) を返すべきです。validate_data またはジェネレータのいずれかをセットすることで、wandb は特定のデータ例を視覚化できます。 |
validation_steps |
(int) validation_data がジェネレータの場合、完全な検証セットのためにジェネレータを実行するステップ数。 |
labels |
(list) wandb でデータを視覚化する場合、複数クラスの分類器を構築する際の数値出力を理解しやすい文字列に変換するラベルのリスト。バイナリ分類器の場合、2つのラベル [label for false , label for true ] を渡すことができます。validate_data と generator の両方がfalseの場合は何も行いません。 |
predictions |
(int) 各エポックの視覚化のために行う予測の数。最大は 100 です。 |
input_type |
(string) 視覚化を助けるためのモデル入力の型。image 、images 、segmentation_mask のいずれか。 |
output_type |
(string) 視覚化を助けるためのモデル出力の型。image 、images 、segmentation_mask のいずれか。 |
log_evaluation |
(boolean) True の場合、各エポックで検証データとモデルの予測を含むテーブルを保存します。詳細は validation_indexes 、validation_row_processor 、output_row_processor を参照してください。 |
class_colors |
([float, float, float]) 入力または出力がセグメンテーションマスクの場合、各クラスのための RGB タプル(範囲 0-1)を含む配列。 |
log_batch_frequency |
(integer) None の場合、コールバックは各エポックをログします。整数を設定する場合、コールバックは log_batch_frequency バッチごとにトレーニングメトリクスをログします。 |
log_best_prefix |
(string) None の場合、追加のサマリーメトリクスを保存しません。文字列が設定されている場合、プレフィックスとともに監視されたメトリクスとエポックを毎回保存し、サマリーメトリクスとして保存します。 |
validation_indexes |
([wandb.data_types._TableLinkMixin]) 各検証例に関連付けるインデックスキーの順序付きリスト。log_evaluation が True で validation_indexes を提供する場合、検証データのテーブルを作成しません。その代わり、各予測を TableLinkMixin で表される行に関連付けます。行のキーを取得するには、Table.get_index() を使用します。 |
validation_row_processor |
(Callable) 検証データに適用される関数で、一般にデータを視覚化するのに使用します。関数には ndx (int) と row (dict) が渡されます。モデルに単一の入力がある場合、row["input"] はその行の入力データを含みます。そうでない場合、入力スロットの名前を含みます。fit フィット関数が単一のターゲットを取り込む場合、row["target"] はその行のターゲットデータを含みます。異なるアウトプットスロットの名前を含んでいます。たとえば、入力データが単一の配列で、そのデータをImageとして視覚化するためには、lambda ndx, row: {"img": wandb.Image(row["input"])} をプロセッサとして提供します。log_evaluation がFalseの場合や validation_indexes が存在する場合は無視されます。 |
output_row_processor |
(Callable) validation_row_processor と同様だが、モデルの出力に適用されます。row["output"] はモデルの出力結果を含みます。 |
infer_missing_processors |
(Boolean) validation_row_processor と output_row_processor が欠落している場合にそれを推測するかどうかを決定します。デフォルトでは True。labels を提供すると、W&B は適切な場合に分類タイプのプロセッサを推測しようとします。 |
log_evaluation_frequency |
(int) 評価結果の記録頻度を決定します。デフォルトは 0 で、トレーニングの終了時にのみログします。1に設定すると各エポックごとにログします。2ならば隔エポックでログします。log_evaluation が False のときには効果がありません。 |
よくある質問
Keras
のマルチプロセッシングを wandb
でどのように使用しますか?
use_multiprocessing=True
を設定したときにこのエラーが発生する場合があります:
Error("You must call wandb.init() before wandb.config.batch_size")
それを回避する方法:
Sequence
クラスの構築時に、これを追加:wandb.init(group='...')
。main
で、if __name__ == "__main__":
を使用して、スクリプトロジックの残りをその中に置くようにしてください。
17 - Kubeflow パイプライン (kfp)
https://www.kubeflow.org/docs/components/pipelines/overview/ は、Dockerコンテナに基づいて、移植性がありスケーラブルな機械学習(ML)ワークフローを構築およびデプロイするためのプラットフォームです。
このインテグレーションにより、ユーザーは kfp のPython機能コンポーネントにデコレーターを適用して、パラメータとArtifactsを自動的にW&Bにログすることができます。
この機能は wandb==0.12.11
で有効になり、kfp<2.0.0
が必要です。
登録して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 wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
コンポーネントをデコレートする
@wandb_log
デコレーターを追加し、通常通りコンポーネントを作成します。これにより、パイプラインを実行するたびに入力/出力パラメータとArtifactsがW&Bに自動的にログされます。
from kfp import components
from wandb.integration.kfp import wandb_log
@wandb_log
def add(a: float, b: float) -> float:
return a + b
add = components.create_component_from_func(add)
環境変数をコンテナに渡す
環境変数をコンテナに明示的に渡す必要があるかもしれません。双方向リンクのためには、WANDB_KUBEFLOW_URL
環境変数をKubeflow Pipelinesインスタンスの基本URLに設定する必要があります。例えば、https://kubeflow.mysite.com
です。
import os
from kubernetes.client.models import V1EnvVar
def add_wandb_env_variables(op):
env = {
"WANDB_API_KEY": os.getenv("WANDB_API_KEY"),
"WANDB_BASE_URL": os.getenv("WANDB_BASE_URL"),
}
for name, value in env.items():
op = op.add_env_variable(V1EnvVar(name, value))
return op
@dsl.pipeline(name="example-pipeline")
def example_pipeline(param1: str, param2: int):
conf = dsl.get_pipeline_conf()
conf.add_op_transformer(add_wandb_env_variables)
データへのプログラムによるアクセス
Kubeflow Pipelines UI から
W&Bでログされた任意の Run を Kubeflow Pipelines UI でクリックします。
Input/Output
とML Metadata
タブで入力と出力の詳細を見つけます。Visualizations
タブからW&Bウェブアプリを表示します。

ウェブアプリ UI から
ウェブアプリ UI は Kubeflow Pipelines の Visualizations
タブと同じコンテンツを持っていますが、より多くのスペースがあります。ここでウェブアプリ UI についてもっと学びましょう。


公開APIを通じて(プログラムによるアクセス)
- プログラムによるアクセスのために、私たちの公開APIをご覧ください。
Kubeflow Pipelines と W&B の概念マッピング
ここに、Kubeflow Pipelines の概念を W&B にマッピングしたものがあります。
Kubeflow Pipelines | W&B | W&B 内の場所 |
---|---|---|
Input Scalar | config |
Overview tab |
Output Scalar | summary |
Overview tab |
Input Artifact | Input Artifact | Artifacts tab |
Output Artifact | Output Artifact | Artifacts tab |
細かいログ
ログのコントロールを細かくしたい場合は、コンポーネントに wandb.log
と wandb.log_artifact
の呼び出しを追加できます。
明示的な wandb.log_artifacts
呼び出しと共に
以下の例では、モデルをトレーニングしています。@wandb_log
デコレーターは関連する入力と出力を自動的に追跡します。トレーニングプロセスをログに追加したい場合は、以下のようにそのログを明示的に追加できます。
@wandb_log
def train_model(
train_dataloader_path: components.InputPath("dataloader"),
test_dataloader_path: components.InputPath("dataloader"),
model_path: components.OutputPath("pytorch_model"),
):
...
for epoch in epochs:
for batch_idx, (data, target) in enumerate(train_dataloader):
...
if batch_idx % log_interval == 0:
wandb.log(
{"epoch": epoch, "step": batch_idx * len(data), "loss": loss.item()}
)
...
wandb.log_artifact(model_artifact)
暗黙的な wandb インテグレーションを使用
もしサポートする フレームワークインテグレーションを使用 している場合は、コールバックを直接渡すこともできます。
@wandb_log
def train_model(
train_dataloader_path: components.InputPath("dataloader"),
test_dataloader_path: components.InputPath("dataloader"),
model_path: components.OutputPath("pytorch_model"),
):
from pytorch_lightning.loggers import WandbLogger
from pytorch_lightning import Trainer
trainer = Trainer(logger=WandbLogger())
... # トレーニングを行う
18 - LightGBM
wandb
ライブラリには、LightGBM 用の特別なコールバックが含まれています。また、Weights & Biases の一般的なログ機能を使用して、大規模な実験やハイパーパラメータ探索を追跡することも簡単です。
from wandb.integration.lightgbm import wandb_callback, log_summary
import lightgbm as lgb
# メトリクスを W&B にログ
gbm = lgb.train(..., callbacks=[wandb_callback()])
# 特徴量のインポータンスプロットをログし、モデルのチェックポイントを W&B にアップロード
log_summary(gbm, save_model_checkpoint=True)
ハイパーパラメーターの調整と Sweeps
モデルから最大のパフォーマンスを引き出すには、ツリーの深さや学習率のようなハイパーパラメーターを調整する必要があります。Weights & Biases は、大規模なハイパーパラメータのテスト実験を設定、調整、分析するための強力なツールキットである Sweepsを含んでいます。
これらのツールについて学び、XGBoost で Sweeps を使用する方法の例を確認するには、この対話型 Colab ノートブックをチェックしてください。

19 - Metaflow
概要
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ページをご覧ください。
20 - MMEngine
MMEngine by OpenMMLab は、PyTorch に基づくディープラーニングモデルのトレーニングのための基盤ライブラリです。MMEngine は OpenMMLab のアルゴリズムライブラリ用の次世代のトレーニングアーキテクチャーを実装し、OpenMMLab 内の30以上のアルゴリズムライブラリに対して統一された実行基盤を提供します。そのコアコンポーネントには、トレーニングエンジン、評価エンジン、モジュール管理が含まれます。
Weights and Biases は、専用のWandbVisBackend
を通じて MMEngine に直接統合されています。これを使用して
- トレーニングおよび評価メトリクスをログする。
- 実験設定をログおよび管理する。
- グラフ、画像、スカラーなどの追加記録をログする。
はじめに
openmim
および wandb
をインストールします。
pip install -q -U openmim wandb
!pip install -q -U openmim wandb
次に、mim
を使用して mmengine
および mmcv
をインストールします。
mim install -q mmengine mmcv
!mim install -q mmengine mmcv
WandbVisBackend
を MMEngine Runner で使用する
このセクションでは、mmengine.runner.Runner
を使用した WandbVisBackend
の典型的なワークフローを示します。
-
可視化設定から
visualizer
を定義します。from mmengine.visualization import Visualizer # 可視化の設定を定義する visualization_cfg = dict( name="wandb_visualizer", vis_backends=[ dict( type='WandbVisBackend', init_kwargs=dict(project="mmengine"), ) ], save_dir="runs/wandb" ) # 可視化設定から visualizer を取得する visualizer = Visualizer.get_instance(**visualization_cfg)
[W&B run 初期化](/ja/ref/python/init/)の入力パラメータ用引数の辞書を `init_kwargs` に渡します。
-
visualizer
とともにrunner
を初期化し、runner.train()
を呼び出します。from mmengine.runner import Runner # PyTorch のトレーニングヘルパーである mmengine Runner を構築する runner = Runner( model, work_dir='runs/gan/', train_dataloader=train_dataloader, train_cfg=train_cfg, optim_wrapper=opt_wrapper_dict, visualizer=visualizer, # visualizer を渡す ) # トレーニングを開始する runner.train()
WandbVisBackend
を OpenMMLab コンピュータビジョンライブラリで使用するWandbVisBackend
は、MMDetection のような OpenMMLab コンピュータビジョンライブラリを使って実験管理を追跡するためにも簡単に使用できます。# デフォルトのランタイム設定から基本設定を継承する _base_ = ["../_base_/default_runtime.py"] # base configs から `visualizer` の `vis_backends` に # `WandbVisBackend` の設定辞書を割り当てる _base_.visualizer.vis_backends = [ dict( type='WandbVisBackend', init_kwargs={ 'project': 'mmdet', 'entity': 'geekyrakshit' }, ), ]
-
21 - MMF
WandbLogger
クラスは、Meta AI の MMF ライブラリで Weights & Biases を使用して、トレーニング/検証メトリクス、システム (GPU および CPU) メトリクス、モデルチェックポイント、設定パラメータをログすることを可能にします。
現行の機能
以下の機能は、MMF の WandbLogger
によりサポートされています:
- トレーニング & 検証メトリクス
- 時間に応じた学習率
- モデル チェックポイントを W&B Artifacts に保存
- GPU および CPU システムメトリクス
- トレーニング設定パラメータ
設定パラメータ
wandb ロギングを有効にしカスタマイズするために MMF 設定で利用可能なオプションは次のとおりです:
training:
wandb:
enabled: true
# エンティティは、run を送信するユーザー名またはチーム名です。
# デフォルトでは、run はユーザー アカウントにログされます。
entity: null
# wandb で実験をログする際に使用するプロジェクト名
project: mmf
# プロジェクト内で実験をログする際に使用する実験/ run 名。
# デフォルトの実験名は: ${training.experiment_name}
name: ${training.experiment_name}
# モデル チェックポイントを有効にし、チェックポイントを W&B Artifacts に保存します
log_model_checkpoint: true
# wandb.init() に渡したい追加の引数値。
# 使用可能な引数を確認するには、ドキュメント /ref/python/init をチェックしてください。
# 例えば:
# job_type: 'train'
# tags: ['tag1', 'tag2']
env:
# wandb メタデータが保存されるディレクトリへのパスを変更するには(デフォルト: env.log_dir):
wandb_logdir: ${env:MMF_WANDB_LOGDIR,}
22 - MosaicML Composer
Composer は、ニューラルネットワークをより良く、より速く、より安価にトレーニングするためのライブラリです。ニューラルネットワークのトレーニングを加速し、一般化能力を向上させるための最新のメソッドが多数含まれており、多様な強化を容易に組み合わせるためのオプションの Trainer API も用意されています。
W&B は、あなたの ML 実験をログするための軽量なラッパーを提供します。しかし、自分でそれらを組み合わせる必要はありません:W&B は WandBLogger を介して Composer ライブラリに直接組み込まれています。
W&B へのログの開始
from composer import Trainer
from composer.loggers import WandBLogger
trainer = Trainer(..., logger=WandBLogger())

Composer の WandBLogger
を使用する
Composer ライブラリは、Trainer
内の WandBLogger クラスを使用して、Weights & Biases へのメトリクスをログします。ロガーをインスタンス化し、それを Trainer
に渡すだけです。
wandb_logger = WandBLogger(project="gpt-5", log_artifacts=True)
trainer = Trainer(logger=wandb_logger)
ロガーの引数
WandbLogger のパラメータは以下です。完全な一覧と説明については Composer のドキュメント を参照してください
パラメータ | 説明 |
---|---|
project |
W&B プロジェクト名 (str, optional) |
group |
W&B グループ名 (str, optional) |
name |
W&B run 名。指定されていない場合は State.run_name が使用されます (str, optional) |
entity |
W&B エンティティ名。ユーザー名や W&B チーム名など (str, optional) |
tags |
W&B タグ (List[str], optional) |
log_artifacts |
チェックポイントを wandb にログするかどうか。デフォルト: false (bool, optional) |
rank_zero_only |
ランクゼロのプロセスでのみログするかどうか。アーティファクトをログする場合、すべてのランクでログすることが強く推奨されます。ランク 1 以上のアーティファクトは保存されないため、関連する情報が失われる可能性があります。例えば、Deepspeed ZeRO を使用する場合、すべてのランクからのアーティファクトがなければチェックポイントから復元することはできません。デフォルト: True (bool, optional) |
init_kwargs |
wandb.init に渡すパラメータ、config など。このリストについては完全な一覧をこちら から確認できます。 |
典型的な使用法は次のとおりです:
init_kwargs = {"notes":"この実験での学習率の向上をテストしています",
"config":{"arch":"Llama",
"use_mixed_precision":True
}
}
wandb_logger = WandBLogger(log_artifacts=True, init_kwargs=init_kwargs)
予測サンプルをログする
Composer のコールバック システムを使用して、WandBLogger を通じて Weights & Biases へのログを制御できます。この例では、バリデーション画像と予測のサンプルがログされています:
import wandb
from composer import Callback, State, Logger
class LogPredictions(Callback):
def __init__(self, num_samples=100, seed=1234):
super().__init__()
self.num_samples = num_samples
self.data = []
def eval_batch_end(self, state: State, logger: Logger):
"""バッチごとの予測を計算し、それを self.data に保存します"""
if state.timer.epoch == state.max_duration: # 最後のバリデーションエポックで
if len(self.data) < self.num_samples:
n = self.num_samples
x, y = state.batch_pair
outputs = state.outputs.argmax(-1)
data = [[wandb.Image(x_i), y_i, y_pred] for x_i, y_i, y_pred in list(zip(x[:n], y[:n], outputs[:n]))]
self.data += data
def eval_end(self, state: State, logger: Logger):
"wandb.Table を作成してログします"
columns = ['image', 'ground truth', 'prediction']
table = wandb.Table(columns=columns, data=self.data[:self.num_samples])
wandb.log({'sample_table':table}, step=int(state.timer.batch))
...
trainer = Trainer(
...
loggers=[WandBLogger()],
callbacks=[LogPredictions()]
)
23 - OpenAI API
W&B OpenAI API インテグレーションを使用して、リクエスト、レスポンス、トークンカウント、モデルメタデータをすべての OpenAI Models、ファインチューニングされた Models を含めてログします。
API 入出力をログに記録することで、異なるプロンプトの性能を迅速に評価し、異なるモデル設定(例えば温度)を比較し、トークン使用量などの他の使用メトリクスを追跡することができます。

OpenAI Python API ライブラリをインストール
W&B オートログ インテグレーションは OpenAI version 0.28.1 以下で動作します。
OpenAI Python API version 0.28.1 をインストールするには、次を実行します:
pip install openai==0.28.1
OpenAI Python API を使用
1. autolog をインポートし、初期化
最初に、wandb.integration.openai
から autolog
をインポートし、初期化します。
import os
import openai
from wandb.integration.openai import autolog
autolog({"project": "gpt5"})
オプションで、wandb.init()
が受け入れる引数の辞書を autolog
に渡すことができます。これにはプロジェクト名、チーム名、エンティティなどが含まれます。wandb.init
についての詳細は、API リファレンスガイドを参照してください。
2. OpenAI API を呼び出す
OpenAI API への各呼び出しは、W&B に自動的にログされます。
os.environ["OPENAI_API_KEY"] = "XXX"
chat_request_kwargs = dict(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers"},
{"role": "user", "content": "Where was it played?"},
],
)
response = openai.ChatCompletion.create(**chat_request_kwargs)
3. OpenAI API 入力とレスポンスを確認
ステップ 1 で autolog
により生成された W&B run リンクをクリックしてください。これにより、W&B App のプロジェクトワークスペースにリダイレクトされます。
作成した run を選択すると、トレーステーブル、トレースタイムライン、使用した OpenAI LLM のモデルアーキテクチャーを確認することができます。
オートログをオフにする
W&B は、OpenAI API の使用を終了した際に、disable()
を呼び出してすべての W&B プロセスを閉じることを推奨します。
autolog.disable()
これで入力と補完が W&B にログされ、分析や同僚との共有の準備が整います。
24 - OpenAI Fine-Tuning
OpenAI GPT-3.5 や GPT-4 モデルのファインチューニングのメトリクスと設定を W&B にログします。 W&B エコシステムを活用してファインチューニング 実験、Models、Datasets を追跡し、結果を同僚と共有できます。
ファインチューニングのために W&B と OpenAI を統合する方法についての追加情報は、OpenAI ドキュメントの Weights and Biases Integration セクションを参照してください。
OpenAI Python API のインストールまたは更新
W&B の OpenAI ファインチューニング インテグレーションは、OpenAI バージョン 1.0 以上で動作します。 最新バージョンの OpenAI Python API ライブラリに関する情報は、PyPI ドキュメントを参照してください。
OpenAI Python API をインストールするには、次のコマンドを実行してください:
pip install openai
既に OpenAI Python API をインストールしている場合は、次のコマンドで更新できます:
pip install -U openai
OpenAI ファインチューニング結果を同期する
W&B を OpenAI のファインチューニング API と統合して、ファインチューニングのメトリクスと設定を W&B にログします。これには、wandb.integration.openai.fine_tuning
モジュールの WandbLogger
クラスを使用します。
from wandb.integration.openai.fine_tuning import WandbLogger
# ファインチューニングのロジック
WandbLogger.sync(fine_tune_job_id=FINETUNE_JOB_ID)

ファインチューニングを同期する
スクリプトからの結果を同期
from wandb.integration.openai.fine_tuning import WandbLogger
# ワンラインコマンド
WandbLogger.sync()
# オプションパラメータを渡す
WandbLogger.sync(
fine_tune_job_id=None,
num_fine_tunes=None,
project="OpenAI-Fine-Tune",
entity=None,
overwrite=False,
model_artifact_name="model-metadata",
model_artifact_type="model",
**kwargs_wandb_init
)
リファレンス
引数 | 説明 |
---|---|
fine_tune_job_id | client.fine_tuning.jobs.create を使用してファインチューンジョブを作成すると取得する OpenAI ファインチューン ID です。 この引数が None(デフォルト)の場合、まだ同期されていないすべての OpenAI ファインチューン ジョブが W&B に同期されます。 |
openai_client | 初期化された OpenAI クライアントを sync に渡します。クライアントが提供されない場合、ログは自動的にクライアントを初期化します。 デフォルトでは None です。 |
num_fine_tunes | ID が提供されない場合、未同期のファインチューンはすべて W&B にログされます。この引数を使用して、同期する最新のファインチューンの数を選択できます。num_fine_tunes が 5 の場合、最新のファインチューン 5 つを選択します。 |
project | ファインチューニングのメトリクス、Models、Data などがログされる Weights and Biases プロジェクト名。 デフォルトでは、プロジェクト名は “OpenAI-Fine-Tune” です。 |
entity | W&B ユーザー名またはチーム名。実行結果を送信するエンティティです。 デフォルトでは、通常はユーザー名であるデフォルトエンティティが使用されます。 |
overwrite | ロギングを強制し、同一ファインチューンジョブの既存の wandb run を上書きします。デフォルトでは False です。 |
wait_for_job_success | OpenAI ファインチューニングジョブが開始されると、通常少し時間がかかります。ファインチューニングジョブが終了すると、メトリクスが W&B にすぐにログされるように、この設定は 60 秒ごとにファインチューニングジョブのステータスが succeeded に変わるかどうかを確認します。ファインチューニングジョブが成功したと検出されると、自動的にメトリクスが W&B に同期されます。 デフォルトで True に設定されています。 |
model_artifact_name | ログされるモデル アーティファクトの名前。デフォルトは "model-metadata" です。 |
model_artifact_type | ログされるモデル アーティファクトのタイプ。デフォルトは "model" です。 |
**kwargs_wandb_init | 直接 wandb.init() に渡される追加の引数 |
データセットのバージョン管理と可視化
バージョン管理
ファインチューニングのために OpenAI にアップロードしたトレーニングおよび検証データは、バージョン管理を容易にするために自動的に W&B Artifacts としてログされます。 以下に、この アーティファクト 内のトレーニングファイルのビューを示します。ここでは、このファイルをログした W&B run、ログされた時期、このデータセットのバージョン、メタデータ、およびトレーニングデータから学習済みモデルまでの DAG リネージを確認できます。

可視化
データセットは W&B Tables として可視化され、データセットを探索、検索、および対話することができます。以下に、 W&B Tables を使用して可視化されたトレーニングサンプルをチェックしてください。

ファインチューニング済みモデルとモデルのバージョン管理
OpenAI はファインチューニングされたモデルの ID を提供します。モデルの重みにはアアクセスできないため、WandbLogger
はモデルのすべての詳細(ハイパーパラメーター、データファイルの ID など)と fine_tuned_model
ID を含む model_metadata.json
ファイルを作成し、 W&B アーティファクトとしてログします。
このモデル(メタデータ)アーティファクトは、W&B Registry のモデルにさらにリンクすることができます。

よくある質問
チームとファインチューン結果を W&B で共有するにはどうすればよいですか?
以下を使用してファインチューンジョブをチームアカウントにログします:
WandbLogger.sync(entity="YOUR_TEAM_NAME")
自分の runs をどのように整理できますか?
あなたの W&B runs は自動的に整理され、ジョブ タイプ、ベースモデル、学習率、トレーニングファイル名、その他のハイパーパラメーターなど、任意の設定パラメーターに基づいてフィルタリングやソートができます。
さらに、run の名前を変更したり、メモを追加したり、タグを作成してグループ化することができます。
満足したら、ワークスペースを保存し、run および保存されたアーティファクト(トレーニング/検証ファイル)からデータをインポートしてレポートを作成できます。
ファインチューンされたモデルにアクセスするにはどうすればよいですか?
ファインチューンされたモデル ID は、アーティファクト (model_metadata.json
) として W&B にログされます。
import wandb
ft_artifact = wandb.run.use_artifact("ENTITY/PROJECT/model_metadata:VERSION")
artifact_dir = artifact.download()
ここで VERSION
は次のいずれかです:
v2
などのバージョン番号ft-xxxxxxxxx
などのファインチューン ID- 自動的または手動で追加されたエイリアス、例えば
latest
ダウンロードした model_metadata.json
ファイルを読み取ることで fine_tuned_model
ID にアクセスできます。
ファインチューンが正常に同期されなかった場合はどうすればよいですか?
ファインチューンが W&B に正常にログされなかった場合は、overwrite=True
を使用し、ファインチューン ジョブ ID を渡すことができます:
WandbLogger.sync(
fine_tune_job_id="FINE_TUNE_JOB_ID",
overwrite=True,
)
W&B で自分の Datasets と Models を追跡できますか?
トレーニングと検証データは自動的に アーティファクト として W&B にログされます。ファインチューンされたモデルの ID を含むメタデータも アーティファクト としてログされます。
wandb.Artifact
、wandb.log
などの低レベルの wandb API を使用してパイプラインを常に制御できます。これにより、データとモデルの完全なトレーサビリティが可能になります。

リソース
- OpenAI ファインチューニング ドキュメント は非常に詳細で多くの有用なヒントが含まれています
- デモ Colab
- W&B で OpenAI GPT-3.5 および GPT-4 モデルをファインチューニングする方法 レポート
25 - OpenAI Gym
「2021 年から Gym を維持しているチームは、将来のすべての開発を Gymnasium に移しました。Gym の代替である Gymnasium (import gymnasium as gym) を利用できるようにするため、Gym は今後更新を受けることはありません。」(出典)
Gym はもはや積極的に維持されているプロジェクトではないため、Gymnasium とのインテグレーションを試してみてください。
もし OpenAI Gym を使用している場合、Weights & Biases は自動的に gym.wrappers.Monitor
によって生成された環境のビデオをログします。ただし、wandb.init
の monitor_gym
キーワード引数を True
に設定するか、wandb.gym.monitor()
を呼び出してください。
私たちの gym インテグレーションは非常に軽量です。単に gym
からログされるビデオファイルの名前を見て、それにちなんで名前を付けるか、一致しない場合は「videos」にフォールバックします。より細かい制御をしたい場合は、いつでも手動でビデオをログすることができます。
OpenRL ベンチマーク は、CleanRL によって、OpenAI Gym の例でこのインテグレーションを使用しています。gym を使用する方法を示すソースコード(特定の run に使用された特定のコードを含む)を見つけることができます。

26 - PaddleDetection
PaddleDetection は、PaddlePaddle に基づくエンドツーエンドの物体検出開発キットです。ネットワークコンポーネント、データ拡張、損失などの設定可能なモジュールを使用して、さまざまな主流オブジェクトを検出し、インスタンスをセグメント化し、キーポイントを追跡および検出します。
PaddleDetection には、トレーニングと検証のメトリクス、モデルチェックポイント、およびそれに対応するメタデータをログするための W&B インテグレーションが組み込まれています。
PaddleDetection WandbLogger
は、トレーニングと評価のメトリクスを Weights & Biases にログし、トレーニング中にモデルチェックポイントも記録します。
W&B ブログ記事を読む では、YOLOX モデルを COCO2017
データセットのサブセットで PaddleDetectionと統合する方法を示しています。
サインアップして API キーを作成する
APIキーは、あなたのマシンをW&Bに認証します。APIキーはユーザープロフィールから生成できます。
- 画面右上のユーザープロフィールアイコンをクリックします。
- ユーザー設定 を選び、API キー セクションまでスクロールします。
- 表示 をクリックし、表示された API キーをコピーします。API キーを非表示にするには、ページをリロードします。
wandb
ライブラリをインストールしログインする
wandb
ライブラリをローカルにインストールしてログインする方法:
-
WANDB_API_KEY
環境変数 をあなたのAPIキーに設定します。export WANDB_API_KEY=<your_api_key>
-
wandb
ライブラリをインストールしてログインします。pip install wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
トレーニングスクリプトで WandbLogger
を有効にする
PaddleDetection の train.py
に引数を渡して wandb を使用するには:
--use_wandb
フラグを追加します- 最初の wandb 引数の前に
-o
を付けます(これは一度だけで結構です) - 個々の wandb 引数にはすべて
wandb-
プレフィックスを含める必要があります。例えば、wandb.init
に渡す引数にはwandb-
プレフィックスが追加されます
python tools/train.py
-c config.yml \
--use_wandb \
-o \
wandb-project=MyDetector \
wandb-entity=MyTeam \
wandb-save_dir=./logs
config.yml
ファイルの wandb
キーの下に wandb 引数を追加します:
wandb:
project: MyProject
entity: MyTeam
save_dir: ./logs
train.py
ファイルを実行すると、W&B ダッシュボードへのリンクが生成されます。

フィードバックや問題
Weights & Biases インテグレーションに関するフィードバックや問題がある場合は、PaddleDetection GitHub に issue を作成するか、support@wandb.com にメールしてください。
27 - PaddleOCR
PaddleOCR は、多言語対応で素晴らしく、実用的でユーザーがより良いモデルをトレーニングし、PaddlePaddleで実践的に適用できるOCRツールの作成を目指しています。PaddleOCRはOCRに関連するさまざまな最先端のアルゴリズムをサポートし、産業用ソリューションを開発しました。PaddleOCRにはWeights & Biasesのインテグレーションがあり、トレーニングと評価メトリクスをログに記録し、対応するメタデータとともにモデルのチェックポイントを保存できます。
例: ブログ & Colab
PaddleOCRでICDAR2015データセットを使ってモデルをトレーニングする方法を知るには、こちらをお読みください。さらにGoogle Colabも提供されており、対応するライブW&Bダッシュボードはこちらで利用できます。このブログの中国語バージョンもこちらで利用できます: W&B对您的OCR模型进行训练和调试
サインアップして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 wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
config.yml
ファイルにwandbを追加する
PaddleOCRでは設定変数をyamlファイルで提供する必要があります。設定yamlファイルの最後に次のスニペットを追加することで、すべてのトレーニングおよびバリデーションメトリクスをW&Bダッシュボードに自動的にログ記録するとともに、モデルのチェックポイントも保存されます:
Global:
use_wandb: True
wandb.init
に渡したい追加の任意の引数は、yamlファイルのwandb
ヘッダーの下に追加することもできます:
wandb:
project: CoolOCR # (optional) これはwandbプロジェクト名です
entity: my_team # (optional) wandbチームを使っている場合、ここでチーム名を渡すことができます
name: MyOCRModel # (optional) これはwandb runの名前です
config.yml
ファイルをtrain.py
に渡す
yamlファイルは、PaddleOCRリポジトリ内で利用可能なトレーニングスクリプトへの引数として提供されます。
python tools/train.py -c config.yml
Weights & Biasesをオンにしてtrain.py
ファイルを実行するとき、W&Bダッシュボードへのリンクが生成されます:



フィードバックや問題点
Weights & Biasesのインテグレーションに関するフィードバックや問題がある場合は、PaddleOCR GitHubで問題を報告するか、support@wandb.comにメールしてください。
28 - プロディジー
Prodigy は、機械学習モデルのトレーニングと評価用データを作成するためのアノテーションツールであり、エラー分析、データの調査とクリーニングにも使用されます。W&B Tables を使用すると、W&B 内でデータセットのログ、可視化、分析、共有(およびそれ以上!)が可能です。
W&B の Prodigy とのインテグレーション により、Prodigy でアノテーションされたデータセットを W&B に直接アップロードし、Tables と一緒に使用するシンプルで使いやすい機能が追加されます。
このようにいくつかのコードを実行します:
import wandb
from wandb.integration.prodigy import upload_dataset
with wandb.init(project="prodigy"):
upload_dataset("news_headlines_ner")
すると、このような視覚的でインタラクティブな共有可能なテーブルが得られます:

クイックスタート
wandb.integration.prodigy.upload_dataset
を使用して、アノテーション済みの prodigy データセットをローカルの Prodigy データベースから直接 W&B の Table形式でアップロードできます。Prodigy の詳細、インストール & セットアップを含む情報は、Prodigy ドキュメントを参照してください。
W&B は自動的に画像と固有表現フィールドをそれぞれ wandb.Image
と wandb.Html
に変換しようとします。これらの可視化を含めるために、結果のテーブルに追加の列が追加されることがあります。
詳細な例を読む
W&B Prodigy インテグレーションを使用して生成された可視化例については、Visualizing Prodigy Datasets Using W&B Tables を参照してください。
spaCy も使用していますか?
W&B は spaCy とのインテグレーションも備えています。ドキュメントはこちらを参照してください。
29 - PyTorch
PyTorch は、特に研究者の間で、Python におけるディープラーニングの最も人気のあるフレームワークの一つです。W&B は、PyTorch に対して一流のサポートを提供し、勾配のログから CPU と GPU 上でのコードのプロファイリングまで対応しています。
Colab ノートブックで私たちのインテグレーションを試してみてください。
また、example repo では、スクリプトや Fashion MNIST を使用した Hyperband によるハイパーパラメータ最適化などの例を含むものがあります。それが生成する W&B Dashboard もご覧いただけます。
wandb.watch
を使った勾配のログ
勾配を自動的にログするには、wandb.watch
を呼び出して、PyTorch モデルを渡します。
import wandb
wandb.init(config=args)
model = ... # モデルをセットアップする
# マジック
wandb.watch(model, log_freq=100)
model.train()
for batch_idx, (data, target) in enumerate(train_loader):
output = model(data)
loss = F.nll_loss(output, target)
loss.backward()
optimizer.step()
if batch_idx % args.log_interval == 0:
wandb.log({"loss": loss})
同じスクリプト内で複数のモデルを追跡する必要がある場合は、それぞれのモデルに対して wandb.watch
を個別に呼び出すことができます。この関数の参照ドキュメントはこちら。
wandb.log
が呼び出されるまでログされません。画像とメディアのログ
画像データを持つ PyTorch Tensors
を wandb.Image
に渡すことができ、torchvision
のユーティリティが自動的に画像に変換します。
images_t = ... # PyTorch Tensors として画像を生成またはロードする
wandb.log({"examples": [wandb.Image(im) for im in images_t]})
PyTorch や他のフレームワークにおけるリッチメディアのログについての詳細は、メディアログガイドをご覧ください。
メディアと一緒にモデルの予測や派生メトリクスなどの情報も含めたい場合は、wandb.Table
を使用します。
my_table = wandb.Table()
my_table.add_column("image", images_t)
my_table.add_column("label", labels)
my_table.add_column("class_prediction", predictions_t)
# Table を W&B にログ
wandb.log({"mnist_predictions": my_table})

データセットやモデルのログと視覚化についての詳細は、W&B Tables のガイドをご覧ください。
PyTorch コードのプロファイリング

W&B は PyTorch Kineto の Tensorboard プラグイン と直接統合されており、PyTorch コードのプロファイリング、CPU と GPU の通信の詳細の検査、ボトルネックや最適化を識別するためのツールを提供します。
profile_dir = "path/to/run/tbprofile/"
profiler = torch.profiler.profile(
schedule=schedule, # スケジュールの詳細はプロファイラードキュメントを参照
on_trace_ready=torch.profiler.tensorboard_trace_handler(profile_dir),
with_stack=True,
)
with profiler:
... # プロファイルしたいコードをここで実行
# 詳細な使用情報はプロファイラードキュメントを参照
# wandb アーティファクトを作成
profile_art = wandb.Artifact("trace", type="profile")
# pt.trace.json ファイルをアーティファクトに追加
profile_art.add_file(glob.glob(profile_dir + ".pt.trace.json"))
# アーティファクトをログ
profile_art.save()
こちらの Colabで作業中の例コードを見て実行できます。
30 - PyTorch Geometric
PyTorch Geometric または PyG は、最も人気のある幾何学的ディープラーニングのためのライブラリの1つであり、W&B はそれと非常に良く連携し、グラフの可視化と実験の追跡を行うことができます。
PyTorch Geometric をインストールした後、以下の手順に従ってください。
サインアップとAPI キーの作成
APIキーは、あなたのマシンをW&Bに認証します。APIキーはユーザープロフィールから生成できます。
- 右上のユーザープロフィールアイコンをクリックします。
- ユーザー設定を選択し、API キーセクションまでスクロールします。
- Reveal をクリックします。表示されたAPIキーをコピーします。APIキーを隠すには、ページをリロードしてください。
wandb
ライブラリのインストールとログイン
wandb
ライブラリをローカルにインストールし、ログインするには:
-
WANDB_API_KEY
環境変数 をAPIキーに設定します。export WANDB_API_KEY=<your_api_key>
-
wandb
ライブラリをインストールし、ログインします。pip install wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
グラフの可視化
入力グラフの詳細(エッジ数、ノード数など)を保存できます。W&B は plotly グラフと HTML パネルのログ記録をサポートしているため、グラフのために作成したあらゆる可視化を W&B にログすることができます。
PyVis を使用する
以下のスニペットは、PyVis と HTML を使ってそれを行う方法を示しています。
from pyvis.network import Network
import wandb
wandb.init(project=’graph_vis’)
net = Network(height="750px", width="100%", bgcolor="#222222", font_color="white")
# PyG グラフから PyVis ネットワークへのエッジを追加
for e in tqdm(g.edge_index.T):
src = e[0].item()
dst = e[1].item()
net.add_node(dst)
net.add_node(src)
net.add_edge(src, dst, value=0.1)
# PyVisの可視化をHTMLファイルに保存
net.show("graph.html")
wandb.log({"eda/graph": wandb.Html("graph.html")})
wandb.finish()

Plotly を使用する
Plotly を使用してグラフの可視化を作成するには、まず PyG グラフを networkx オブジェクトに変換する必要があります。その後、ノードとエッジのために Plotly スキャッタープロットを作成する必要があります。このタスクには以下のスニペットが使用できます。
def create_vis(graph):
G = to_networkx(graph)
pos = nx.spring_layout(G)
edge_x = []
edge_y = []
for edge in G.edges():
x0, y0 = pos[edge[0]]
x1, y1 = pos[edge[1]]
edge_x.append(x0)
edge_x.append(x1)
edge_x.append(None)
edge_y.append(y0)
edge_y.append(y1)
edge_y.append(None)
edge_trace = go.Scatter(
x=edge_x, y=edge_y,
line=dict(width=0.5, color='#888'),
hoverinfo='none',
mode='lines'
)
node_x = []
node_y = []
for node in G.nodes():
x, y = pos[node]
node_x.append(x)
node_y.append(y)
node_trace = go.Scatter(
x=node_x, y=node_y,
mode='markers',
hoverinfo='text',
line_width=2
)
fig = go.Figure(data=[edge_trace, node_trace], layout=go.Layout())
return fig
wandb.init(project=’visualize_graph’)
wandb.log({‘graph’: wandb.Plotly(create_vis(graph))})
wandb.finish()

メトリクスのログ化
損失関数、精度などのメトリクスを含む実験を追跡するためにW&Bを使用することができます。トレーニングループに次の行を追加してください:
wandb.log({
‘train/loss’: training_loss,
‘train/acc’: training_acc,
‘val/loss’: validation_loss,
‘val/acc’: validation_acc
})

その他のリソース
31 - Pytorch チューニングする torchtune
torchtune は、大規模言語モデル(LLM)の作成、ファインチューニング、実験プロセスを効率化するために設計された PyTorch ベースのライブラリです。さらに、torchtune は W&B でのログ記録 をサポートしており、トレーニングプロセスの追跡と可視化を強化します。

torchtune を使用した Mistral 7B のファインチューニング に関する W&B ブログ記事をチェックしてください。
W&B のログ記録が手の届くところに
ローンチ時にコマンドライン引数をオーバーライドします:
tune run lora_finetune_single_device --config llama3/8B_lora_single_device \
metric_logger._component_=torchtune.utils.metric_logging.WandBLogger \
metric_logger.project="llama3_lora" \
log_every_n_steps=5
レシピの設定で W&B ログ記録を有効にします:
# inside llama3/8B_lora_single_device.yaml
metric_logger:
_component_: torchtune.utils.metric_logging.WandBLogger
project: llama3_lora
log_every_n_steps: 5
W&B メトリックロガーの使用
metric_logger
セクションを変更して、レシピの設定ファイルで W&B ログ記録を有効にします。_component_
を torchtune.utils.metric_logging.WandBLogger
にクラスを変更します。また、project
名と log_every_n_steps
を渡してログ記録の振る舞いをカスタマイズすることもできます。
wandb.init
メソッドに渡すのと同様に、他の kwargs
を渡すこともできます。例えば、チームで作業している場合、WandBLogger
クラスに entity
引数を渡してチーム名を指定することができます。
# inside llama3/8B_lora_single_device.yaml
metric_logger:
_component_: torchtune.utils.metric_logging.WandBLogger
project: llama3_lora
entity: my_project
job_type: lora_finetune_single_device
group: my_awesome_experiments
log_every_n_steps: 5
tune run lora_finetune_single_device --config llama3/8B_lora_single_device \
metric_logger._component_=torchtune.utils.metric_logging.WandBLogger \
metric_logger.project="llama3_lora" \
metric_logger.entity="my_project" \
metric_logger.job_type="lora_finetune_single_device" \
metric_logger.group="my_awesome_experiments" \
log_every_n_steps=5
何がログされますか?
W&B ダッシュボードを探索して、ログされたメトリックを見ることができます。デフォルトでは、W&B は設定ファイルとローンチのオーバーライドからすべてのハイパーパラメーターをログします。
W&B は Overview タブで解決された設定をキャプチャします。W&B は YAML 形式で設定を Files タブ にも保存します。

ログされたメトリック
各レシピにはそれぞれのトレーニングループがあります。個別のレシピを確認して、そのログされたメトリックを見ることができます。これにはデフォルトで以下が含まれています:
Metric | 説明 |
---|---|
loss |
モデルのロス |
lr |
学習率 |
tokens_per_second |
モデルのトークン毎秒 |
grad_norm |
モデルの勾配ノルム |
global_step |
トレーニングループの現在のステップに対応します。勾配の累積を考慮に入れ、オプティマイザーステップが取られるたびにモデルが更新され、勾配が累積され、gradient_accumulation_steps ごとに1回モデルが更新されます。 |
global_step
はトレーニングステップの数と同じではありません。トレーニングループの現在のステップに対応します。勾配の累積を考慮に入れ、オプティマイザーステップが取られるたびに global_step
が1増加します。例えば、データローダーに10バッチあり、勾配の累積ステップが2で3エポック走行する場合、オプティマイザーは15回ステップし、この場合 global_step
は1から15までの範囲になります。torchtune の効率的な設計により、カスタムメトリクスを簡単に追加したり、既存のものを変更することができます。対応する レシピファイル を変更し、例えば以下のように current_epoch
を全エポック数のパーセンテージとして記録するだけで十分です。
# inside `train.py` function in the recipe file
self._metric_logger.log_dict(
{"current_epoch": self.epochs * self.global_step / self._steps_per_epoch},
step=self.global_step,
)
self._metric_logger.*
関数を呼び出す必要があります。チェックポイントの保存とロード
torchtune ライブラリは様々な チェックポイントフォーマット をサポートしています。使用しているモデルの出所に応じて、適切な チェックポインタークラス に切り替えるべきです。
もしモデルのチェックポイントを W&B Artifacts に保存したい場合は、対応するレシピ内の save_checkpoint
関数をオーバーライドするのが最も簡単です。
ここにモデルのチェックポイントを W&B Artifacts に保存するために save_checkpoint
関数をオーバーライドする方法の例を示します。
def save_checkpoint(self, epoch: int) -> None:
...
## Let's save the checkpoint to W&B
## depending on the Checkpointer Class the file will be named differently
## Here is an example for the full_finetune case
checkpoint_file = Path.joinpath(
self._checkpointer._output_dir, f"torchtune_model_{epoch}"
).with_suffix(".pt")
wandb_artifact = wandb.Artifact(
name=f"torchtune_model_{epoch}",
type="model",
# description of the model checkpoint
description="Model checkpoint",
# you can add whatever metadata you want as a dict
metadata={
utils.SEED_KEY: self.seed,
utils.EPOCHS_KEY: self.epochs_run,
utils.TOTAL_EPOCHS_KEY: self.total_epochs,
utils.MAX_STEPS_KEY: self.max_steps_per_epoch,
},
)
wandb_artifact.add_file(checkpoint_file)
wandb.log_artifact(wandb_artifact)
32 - PyTorch Ignite
- この例の W&B レポート →で結果の可視化を確認してください。
- このホストされたノートブック →で、コードを実際に実行してみてください。
IgniteはWeights & Biasesハンドラーをサポートしており、トレーニングおよび検証中にメトリクス、モデル/オプティマイザーパラメータ、勾配をログできます。また、モデルのチェックポイントをWeights & Biasesクラウドにログするためにも使用できます。このクラスはwandbモジュールのラッパーでもあります。つまり、このラッパーを使用して任意のwandb関数を呼び出すことができます。モデルパラメータと勾配を保存する方法の例を参照してください。
基本設定
from argparse import ArgumentParser
import wandb
import torch
from torch import nn
from torch.optim import SGD
from torch.utils.data import DataLoader
import torch.nn.functional as F
from torchvision.transforms import Compose, ToTensor, Normalize
from torchvision.datasets import MNIST
from ignite.engine import Events, create_supervised_trainer, create_supervised_evaluator
from ignite.metrics import Accuracy, Loss
from tqdm import tqdm
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
self.conv2_drop = nn.Dropout2d()
self.fc1 = nn.Linear(320, 50)
self.fc2 = nn.Linear(50, 10)
def forward(self, x):
x = F.relu(F.max_pool2d(self.conv1(x), 2))
x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
x = x.view(-1, 320)
x = F.relu(self.fc1(x))
x = F.dropout(x, training=self.training)
x = self.fc2(x)
return F.log_softmax(x, dim=-1)
def get_data_loaders(train_batch_size, val_batch_size):
data_transform = Compose([ToTensor(), Normalize((0.1307,), (0.3081,))])
train_loader = DataLoader(MNIST(download=True, root=".", transform=data_transform, train=True),
batch_size=train_batch_size, shuffle=True)
val_loader = DataLoader(MNIST(download=False, root=".", transform=data_transform, train=False),
batch_size=val_batch_size, shuffle=False)
return train_loader, val_loader
igniteでのWandBLogger
の使用はモジュラーなプロセスです。まず、WandBLoggerオブジェクトを作成します。次に、トレーナーまたは評価者にアタッチしてメトリクスを自動的にログします。この例では:
- トレーニング損失をログし、トレーナーオブジェクトにアタッチします。
- 検証損失をログし、評価者にアタッチします。
- 学習率などのオプションのパラメータをログします。
- モデルをウォッチします。
from ignite.contrib.handlers.wandb_logger import *
def run(train_batch_size, val_batch_size, epochs, lr, momentum, log_interval):
train_loader, val_loader = get_data_loaders(train_batch_size, val_batch_size)
model = Net()
device = 'cpu'
if torch.cuda.is_available():
device = 'cuda'
optimizer = SGD(model.parameters(), lr=lr, momentum=momentum)
trainer = create_supervised_trainer(model, optimizer, F.nll_loss, device=device)
evaluator = create_supervised_evaluator(model,
metrics={'accuracy': Accuracy(),
'nll': Loss(F.nll_loss)},
device=device)
desc = "ITERATION - loss: {:.2f}"
pbar = tqdm(
initial=0, leave=False, total=len(train_loader),
desc=desc.format(0)
)
#WandBlogger オブジェクトの作成
wandb_logger = WandBLogger(
project="pytorch-ignite-integration",
name="cnn-mnist",
config={"max_epochs": epochs,"batch_size":train_batch_size},
tags=["pytorch-ignite", "mninst"]
)
wandb_logger.attach_output_handler(
trainer,
event_name=Events.ITERATION_COMPLETED,
tag="training",
output_transform=lambda loss: {"loss": loss}
)
wandb_logger.attach_output_handler(
evaluator,
event_name=Events.EPOCH_COMPLETED,
tag="training",
metric_names=["nll", "accuracy"],
global_step_transform=lambda *_: trainer.state.iteration,
)
wandb_logger.attach_opt_params_handler(
trainer,
event_name=Events.ITERATION_STARTED,
optimizer=optimizer,
param_name='lr' # 任意のオプション
)
wandb_logger.watch(model)
任意でigniteのEVENTS
を利用してメトリクスを直接ターミナルにログできます
@trainer.on(Events.ITERATION_COMPLETED(every=log_interval))
def log_training_loss(engine):
pbar.desc = desc.format(engine.state.output)
pbar.update(log_interval)
@trainer.on(Events.EPOCH_COMPLETED)
def log_training_results(engine):
pbar.refresh()
evaluator.run(train_loader)
metrics = evaluator.state.metrics
avg_accuracy = metrics['accuracy']
avg_nll = metrics['nll']
tqdm.write(
"Training Results - Epoch: {} Avg accuracy: {:.2f} Avg loss: {:.2f}"
.format(engine.state.epoch, avg_accuracy, avg_nll)
)
@trainer.on(Events.EPOCH_COMPLETED)
def log_validation_results(engine):
evaluator.run(val_loader)
metrics = evaluator.state.metrics
avg_accuracy = metrics['accuracy']
avg_nll = metrics['nll']
tqdm.write(
"Validation Results - Epoch: {} Avg accuracy: {:.2f} Avg loss: {:.2f}"
.format(engine.state.epoch, avg_accuracy, avg_nll))
pbar.n = pbar.last_print_n = 0
trainer.run(train_loader, max_epochs=epochs)
pbar.close()
if __name__ == "__main__":
parser = ArgumentParser()
parser.add_argument('--batch_size', type=int, default=64,
help='トレーニングの入力バッチサイズ (デフォルト: 64)')
parser.add_argument('--val_batch_size', type=int, default=1000,
help='検証の入力バッチサイズ (デフォルト: 1000)')
parser.add_argument('--epochs', type=int, default=10,
help='トレーニングのエポック数 (デフォルト: 10)')
parser.add_argument('--lr', type=float, default=0.01,
help='学習率 (デフォルト: 0.01)')
parser.add_argument('--momentum', type=float, default=0.5,
help='SGDモメンタム (デフォルト: 0.5)')
parser.add_argument('--log_interval', type=int, default=10,
help='トレーニング状況をログするまでに待機するバッチ数')
args = parser.parse_args()
run(args.batch_size, args.val_batch_size, args.epochs, args.lr, args.momentum, args.log_interval)
このコードは以下の可視化を生成します:




詳細はIgnite Docsを参照してください。
33 - PyTorch Lightning
PyTorch Lightning は、PyTorch コードを整理し、分散トレーニングや 16 ビット精度のような高度な機能を簡単に追加するための軽量ラッパーを提供します。 W&B は、あなたの ML 実験を記録するための軽量ラッパーを提供します。しかし、自分でそれらを組み合わせる必要はありません。Weights & Biases は、WandbLogger
を介して PyTorch Lightning ライブラリに直接組み込まれています。
Lightning との統合
from lightning.pytorch.loggers import WandbLogger
from lightning.pytorch import Trainer
wandb_logger = WandbLogger(log_model="all")
trainer = Trainer(logger=wandb_logger)
wandb.log() を使用する際の注意点: WandbLogger
は Trainer の global_step
を使用して W&B にログを記録します。コード内で直接 wandb.log
を追加で呼び出す場合、wandb.log()
の step
引数を使用しないでください。
代わりに、Trainer の global_step
を他のメトリクスと同様に記録してください:
wandb.log({"accuracy":0.99, "trainer/global_step": step})
import lightning as L
from wandb.integration.lightning.fabric import WandbLogger
wandb_logger = WandbLogger(log_model="all")
fabric = L.Fabric(loggers=[wandb_logger])
fabric.launch()
fabric.log_dict({"important_metric": important_metric})

サインアップして APIキーを作成する
APIキー は、あなたのマシンを W&B に認証するためのものです。あなたのユーザープロフィールから APIキー を生成できます。
- 右上のユーザープロフィールアイコンをクリックします。
- User Settings を選択し、API Keys セクションまでスクロールします。
- Reveal をクリックします。表示された APIキー をコピーします。APIキー を非表示にするには、ページをリロードします。
wandb
ライブラリをインストールしてログインする
ローカルに wandb
ライブラリをインストールしてログインする方法:
-
あなたの APIキー に
WANDB_API_KEY
環境変数 を設定します。export WANDB_API_KEY=<your_api_key>
-
wandb
ライブラリをインストールしてログインします。pip install wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
PyTorch Lightning の WandbLogger
を使用する
PyTorch Lightning には、メトリクスやモデルの重み、メディアなどを記録するための複数の WandbLogger
クラスがあります。
Lightning と統合するには、WandbLogger をインスタンス化し、Lightning の Trainer
または Fabric
に渡してください。
trainer = Trainer(logger=wandb_logger)
fabric = L.Fabric(loggers=[wandb_logger])
fabric.launch()
fabric.log_dict({
"important_metric": important_metric
})
よく使用されるロガーの引数
以下に、WandbLogger でよく使用されるパラメータを示します。すべてのロガー引数の詳細については PyTorch Lightning のドキュメントを確認してください。
Parameter | Description |
---|---|
project |
記録する wandb Project を定義します |
name |
あなたの wandb run に名前を付けます |
log_model |
log_model="all" の場合はすべてのモデルを記録し、log_model=True の場合はトレーニングの最後に記録します |
save_dir |
データが保存されるパス |
ハイパーパラメーターを記録する
class LitModule(LightningModule):
def __init__(self, *args, **kwarg):
self.save_hyperparameters()
wandb_logger.log_hyperparams(
{
"hyperparameter_1": hyperparameter_1,
"hyperparameter_2": hyperparameter_2,
}
)
追加の設定パラメータを記録する
# パラメータを1つ追加する
wandb_logger.experiment.config["key"] = value
# 複数のパラメータを追加する
wandb_logger.experiment.config.update({key1: val1, key2: val2})
# 直接 wandb モジュールを使用する
wandb.config["key"] = value
wandb.config.update()
勾配、パラメータヒストグラム、モデルトポロジーを記録する
モデルのオブジェクトを wandblogger.watch()
に渡すことで、トレーニング中のモデルの勾配とパラメータを監視できます。PyTorch Lightning の WandbLogger
ドキュメントを参照してください。
メトリクスを記録する
WandbLogger
を使用しているときは、LightningModule
内で self.log('my_metric_name', metric_value)
を呼び出すことで W&B にメトリクスを記録できます。たとえば、training_step
や validation_step
メソッド内でこれを行います。
以下のコードスニペットは、メトリクスとハイパーパラメーターを記録するための LightningModule
を定義する方法を示しています。この例では、torchmetrics
ライブラリを使用してメトリクスを計算します。
import torch
from torch.nn import Linear, CrossEntropyLoss, functional as F
from torch.optim import Adam
from torchmetrics.functional import accuracy
from lightning.pytorch import LightningModule
class My_LitModule(LightningModule):
def __init__(self, n_classes=10, n_layer_1=128, n_layer_2=256, lr=1e-3):
"""モデルパラメータを定義するためのメソッド"""
super().__init__()
# mnist 画像は (1, 28, 28) (チャンネル、幅、高さ) です
self.layer_1 = Linear(28 * 28, n_layer_1)
self.layer_2 = Linear(n_layer_1, n_layer_2)
self.layer_3 = Linear(n_layer_2, n_classes)
self.loss = CrossEntropyLoss()
self.lr = lr
# ハイパーパラメーターを self.hparams に保存します (W&B によって自動でログされます)
self.save_hyperparameters()
def forward(self, x):
"""推論のための入力 -> 出力 メソッド"""
# (b, 1, 28, 28) -> (b, 1*28*28)
batch_size, channels, width, height = x.size()
x = x.view(batch_size, -1)
# 3 * (線形 + ReLU)
x = F.relu(self.layer_1(x))
x = F.relu(self.layer_2(x))
x = self.layer_3(x)
return x
def training_step(self, batch, batch_idx):
"""1つのバッチからの損失を返す必要があります"""
_, loss, acc = self._get_preds_loss_accuracy(batch)
# 損失とメトリクスを記録する
self.log("train_loss", loss)
self.log("train_accuracy", acc)
return loss
def validation_step(self, batch, batch_idx):
"""メトリクスを記録するために使用されます"""
preds, loss, acc = self._get_preds_loss_accuracy(batch)
# 損失とメトリクスを記録する
self.log("val_loss", loss)
self.log("val_accuracy", acc)
return preds
def configure_optimizers(self):
"""モデルオプティマイザーを定義します"""
return Adam(self.parameters(), lr=self.lr)
def _get_preds_loss_accuracy(self, batch):
"""train/valid/test ステップが類似しているための便利な機能"""
x, y = batch
logits = self(x)
preds = torch.argmax(logits, dim=1)
loss = self.loss(logits, y)
acc = accuracy(preds, y)
return preds, loss, acc
import lightning as L
import torch
import torchvision as tv
from wandb.integration.lightning.fabric import WandbLogger
import wandb
fabric = L.Fabric(loggers=[wandb_logger])
fabric.launch()
model = tv.models.resnet18()
optimizer = torch.optim.SGD(model.parameters(), lr=lr)
model, optimizer = fabric.setup(model, optimizer)
train_dataloader = fabric.setup_dataloaders(
torch.utils.data.DataLoader(train_dataset, batch_size=batch_size)
)
model.train()
for epoch in range(num_epochs):
for batch in train_dataloader:
optimizer.zero_grad()
loss = model(batch)
loss.backward()
optimizer.step()
fabric.log_dict({"loss": loss})
メトリクスの最小/最大値を記録する
wandb の define_metric
関数を使用して、W&B の要約メトリクスがそのメトリクスの最小、最大、平均、または最良の値を表示するかどうかを定義できます。define_metric
が使用されていない場合、最後に記録された値が要約メトリクスに表示されます。詳細な define_metric
の ドキュメントはこちら と ガイドはこちら を参照してください。
W&B の要約メトリクスで最大の検証精度を追跡するよう W&B に指示するには、トレーニングの開始時に一度だけ wandb.define_metric
を呼び出します:
class My_LitModule(LightningModule):
...
def validation_step(self, batch, batch_idx):
if trainer.global_step == 0:
wandb.define_metric("val_accuracy", summary="max")
preds, loss, acc = self._get_preds_loss_accuracy(batch)
# 損失とメトリクスを記録する
self.log("val_loss", loss)
self.log("val_accuracy", acc)
return preds
wandb.define_metric("val_accuracy", summary="max")
fabric = L.Fabric(loggers=[wandb_logger])
fabric.launch()
fabric.log_dict({"val_accuracy": val_accuracy})
モデルチェックポイントを作成する
モデルのチェックポイントを W&B の Artifacts として保存するには、Lightning の ModelCheckpoint
コールバックを使用し、WandbLogger
の log_model
引数を設定します。
trainer = Trainer(logger=wandb_logger, callbacks=[checkpoint_callback])
fabric = L.Fabric(loggers=[wandb_logger], callbacks=[checkpoint_callback])
最新 及び 最良 のエイリアスは、W&B の Artifact からモデルのチェックポイントを簡単に取得できるように自動的に設定されます:
# アーティファクトパネルでリファレンスを取得できます
# "VERSION" はバージョン (例: "v2") またはエイリアス ("latest" または "best") です
checkpoint_reference = "USER/PROJECT/MODEL-RUN_ID:VERSION"
# チェックポイントをローカルにダウンロードする(既にキャッシュされていない場合)
wandb_logger.download_artifact(checkpoint_reference, artifact_type="model")
# チェックポイントをローカルにダウンロードする(既にキャッシュされていない場合)
run = wandb.init(project="MNIST")
artifact = run.use_artifact(checkpoint_reference, type="model")
artifact_dir = artifact.download()
# チェックポイントをロードする
model = LitModule.load_from_checkpoint(Path(artifact_dir) / "model.ckpt")
# 生のチェックポイントをリクエストする
full_checkpoint = fabric.load(Path(artifact_dir) / "model.ckpt")
model.load_state_dict(full_checkpoint["model"])
optimizer.load_state_dict(full_checkpoint["optimizer"])
記録されたモデルのチェックポイントは W&B Artifacts UI を通じて表示可能で、完全なモデルリネージも含まれます(UIでのモデルチェックポイントの例はこちら (https://wandb.ai/wandb/arttest/artifacts/model/iv3_trained/5334ab69740f9dda4fed/lineage?_gl=1yyql5q_gaMTQxOTYyNzExOS4xNjg0NDYyNzk1_ga_JH1SJHJQXJ*MTY5MjMwNzI2Mi4yNjkuMS4xNjkyMzA5NjM2LjM3LjAuMA..))。
最良のモデルチェックポイントをブックマークし、チーム全体でそれらを一元化するために、W&B Model Registry にリンクすることができます。
これにより、タスクごとに最良のモデルを整理し、モデルのライフサイクルを管理し、MLライフサイクル全体で簡単な追跡と監査を可能にし、Webhooksやジョブでのダウンストリームアクションを自動化することができます。
画像やテキストなどを記録する
WandbLogger
は、メディアを記録するための log_image
、log_text
、log_table
メソッドを持っています。
他にも、音声、分子、ポイントクラウド、3Dオブジェクトなどのメディアタイプを記録するために、直接的に wandb.log
や trainer.logger.experiment.log
を呼び出すことができます。
# テンソル、NumPy 配列、または PIL 画像を使用
wandb_logger.log_image(key="samples", images=[img1, img2])
# キャプションを追加
wandb_logger.log_image(key="samples", images=[img1, img2], caption=["tree", "person"])
# ファイルパスを使用
wandb_logger.log_image(key="samples", images=["img_1.jpg", "img_2.jpg"])
# トレーナで .log を使用
trainer.logger.experiment.log(
{"samples": [wandb.Image(img, caption=caption) for (img, caption) in my_images]},
step=current_trainer_global_step,
)
# データはリストのリストであるべきです
columns = ["input", "label", "prediction"]
my_data = [["cheese", "english", "english"], ["fromage", "french", "spanish"]]
# カラムとデータを使用
wandb_logger.log_text(key="my_samples", columns=columns, data=my_data)
# pandas データフレームを使用
wandb_logger.log_text(key="my_samples", dataframe=my_dataframe)
# テキストキャプション、画像、およびオーディオを含む W&B テーブルを記録
columns = ["caption", "image", "sound"]
# データはリストのリストであるべきです
my_data = [
["cheese", wandb.Image(img_1), wandb.Audio(snd_1)],
["wine", wandb.Image(img_2), wandb.Audio(snd_2)],
]
# テーブルを記録
wandb_logger.log_table(key="my_samples", columns=columns, data=data)
Lightning のコールバックシステムを使用して、WandbLogger を介して Weights & Biases にログを記録するタイミングを制御することができます。この例では、検証画像と予測のサンプルをログします:
import torch
import wandb
import lightning.pytorch as pl
from lightning.pytorch.loggers import WandbLogger
# または
# from wandb.integration.lightning.fabric import WandbLogger
class LogPredictionSamplesCallback(Callback):
def on_validation_batch_end(
self, trainer, pl_module, outputs, batch, batch_idx, dataloader_idx
):
"""検証バッチの終了時に呼び出されます。"""
# `outputs` は `LightningModule.validation_step` からのもので、今回はモデルの予測に相当します
# 最初のバッチから20のサンプル画像予測をログします
if batch_idx == 0:
n = 20
x, y = batch
images = [img for img in x[:n]]
captions = [
f"Ground Truth: {y_i} - Prediction: {y_pred}"
for y_i, y_pred in zip(y[:n], outputs[:n])
]
# オプション1: `WandbLogger.log_image` で画像をログ
wandb_logger.log_image(key="sample_images", images=images, caption=captions)
# オプション2: 画像と予測をW&B テーブルとしてログ
columns = ["image", "ground truth", "prediction"]
data = [
[wandb.Image(x_i), y_i, y_pred] or x_i,
y_i,
y_pred in list(zip(x[:n], y[:n], outputs[:n])),
]
wandb_logger.log_table(key="sample_table", columns=columns, data=data)
trainer = pl.Trainer(callbacks=[LogPredictionSamplesCallback()])
複数の GPU を使用して Lightning と W&B を使用する
PyTorch Lightning は DDP インターフェースを通じてマルチGPUをサポートしています。ただし、PyTorch Lightning のデザインは GPU をインスタンス化する際に注意が必要です。
Lightning は、トレーニングループ内の各 GPU (またはランク) がまったく同じ方法で、同じ初期条件でインスタンス化されなければならないと仮定しています。ただし、ランク0のプロセスだけが wandb.run
オブジェクトに アクセスでき、非ゼロランクのプロセスには wandb.run = None
となります。これが原因で、非ゼロプロセスが失敗する可能性があります。このような状況になると、ランク0のプロセスが非ゼロランクのプロセスに参加を待つことになり、既にクラッシュしてしまうため、デッドロックに陥る可能性があります。
このため、トレーニングコードのセットアップに注意する必要があります。推奨される方法は、コードを wandb.run
オブジェクトに依存しないようにすることです。
class MNISTClassifier(pl.LightningModule):
def __init__(self):
super(MNISTClassifier, self).__init__()
self.model = nn.Sequential(
nn.Flatten(),
nn.Linear(28 * 28, 128),
nn.ReLU(),
nn.Linear(128, 10),
)
self.loss = nn.CrossEntropyLoss()
def forward(self, x):
return self.model(x)
def training_step(self, batch, batch_idx):
x, y = batch
y_hat = self.forward(x)
loss = self.loss(y_hat, y)
self.log("train/loss", loss)
return {"train_loss": loss}
def validation_step(self, batch, batch_idx):
x, y = batch
y_hat = self.forward(x)
loss = self.loss(y_hat, y)
self.log("val/loss", loss)
return {"val_loss": loss}
def configure_optimizers(self):
return torch.optim.Adam(self.parameters(), lr=0.001)
def main():
# 同じ値にランダムシードをすべて設定します。
# これは分散トレーニングの設定で重要です。
# 各ランクは自身の初期重みセットを取得します。
# 一致しない場合、勾配も一致せず、
# トレーニングが収束しない可能性があります。
pl.seed_everything(1)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True, num_workers=4)
val_loader = DataLoader(val_dataset, batch_size=64, shuffle=False, num_workers=4)
model = MNISTClassifier()
wandb_logger = WandbLogger(project="<project_name>")
callbacks = [
ModelCheckpoint(
dirpath="checkpoints",
every_n_train_steps=100,
),
]
trainer = pl.Trainer(
max_epochs=3, gpus=2, logger=wandb_logger, strategy="ddp", callbacks=callbacks
)
trainer.fit(model, train_loader, val_loader)
例
Colab のビデオチュートリアルに従うことができます。こちら をクリックしてください。
よくある質問 (FAQ)
W&B は Lightning とどのように統合されていますか?
コアなインテグレーションは、Lightning loggers
API に基づいており、ログのコードをフレームワークに依存しない方法で多く書かせることができます。Logger
は Lightning Trainer
に渡され、この API の豊富な フックとコールバックシステム に基づいてトリガーされます。これにより、研究コードがエンジニアリングやログのコードと完全に分離されます。
追加のコードなしでインテグレーションがログする内容は?
モデルのチェックポイントを W&B に保存し、今後のRunsで使用するために閲覧またはダウンロードできるようにします。また、GPU使用量やネットワークI/Oなどのシステムメトリクス、ハードウェア情報やOS情報などの環境情報、gitコミットやdiffパッチ、ノートブックコンテンツやセッション履歴を含むコードの状態、標準出力に印刷されるものをキャプチャします。
トレーニングセットアップで wandb.run
を使用する必要がある場合はどうすればいいですか?
アクセスが必要な変数のスコープを自分で拡張する必要があります。言い換えれば、初期条件がすべてのプロセスで同じであることを確認してください。
if os.environ.get("LOCAL_RANK", None) is None:
os.environ["WANDB_DIR"] = wandb.run.dir
条件が同じならば、os.environ["WANDB_DIR"]
を使用してモデルのチェックポイントディレクトリをセットアップできます。これにより、非ゼロランクプロセスでも wandb.run.dir
にアクセスできます。
34 - Ray チューニング
W&B は、2 つの軽量なインテグレーションを提供することで Ray と統合します。
WandbLoggerCallback
関数は、Tune に報告されたメトリクスを Wandb API に自動的にログします。setup_wandb()
関数は、関数 API で使用でき、Tune のトレーニング情報を使用して Wandb API を自動的に初期化します。通常どおり Wandb API を使用できます。例えば、wandb.log()
を使用してトレーニングプロセスをログすることができます。
インテグレーションを設定
from ray.air.integrations.wandb import WandbLoggerCallback
Wandb の設定は、tune.run()
の config
引数に wandb キーを渡すことで行います(以下の例を参照)。
wandb の設定エントリの内容は、wandb.init()
にキーワード引数として渡されます。以下の設定は例外で、WandbLoggerCallback
自体を設定するために使用されます:
パラメータ
project (str)
: Wandb プロジェクトの名前。必須。
api_key_file (str)
: Wandb API キーを含むファイルへのパス。
api_key (str)
: Wandb API キー。api_key_file
の設定に代わるものです。
excludes (list)
: ログから除外するメトリクスのリスト。
log_config (bool)
: 結果辞書の設定パラメータをログするかどうか。デフォルトは False です。
upload_checkpoints (bool)
: True の場合、モデルのチェックポイントがアーティファクトとしてアップロードされます。デフォルトは False です。
例
from ray import tune, train
from ray.air.integrations.wandb import WandbLoggerCallback
def train_fc(config):
for i in range(10):
train.report({"mean_accuracy": (i + config["alpha"]) / 10})
tuner = tune.Tuner(
train_fc,
param_space={
"alpha": tune.grid_search([0.1, 0.2, 0.3]),
"beta": tune.uniform(0.5, 1.0),
},
run_config=train.RunConfig(
callbacks=[
WandbLoggerCallback(
project="<your-project>", api_key="<your-api-key>", log_config=True
)
]
),
)
results = tuner.fit()
setup_wandb
from ray.air.integrations.wandb import setup_wandb
このユーティリティ関数は、Ray Tune で Wandb を使用するための初期化を支援します。基本的な使用法として、トレーニング関数内で setup_wandb()
を呼び出します:
from ray.air.integrations.wandb import setup_wandb
def train_fn(config):
# Wandb を初期化
wandb = setup_wandb(config)
for i in range(10):
loss = config["a"] + config["b"]
wandb.log({"loss": loss})
tune.report(loss=loss)
tuner = tune.Tuner(
train_fn,
param_space={
# 検索スペースをここに定義
"a": tune.choice([1, 2, 3]),
"b": tune.choice([4, 5, 6]),
# wandb の設定
"wandb": {"project": "Optimization_Project", "api_key_file": "/path/to/file"},
},
)
results = tuner.fit()
例コード
インテグレーションがどのように機能するかを見るためにいくつかの例を作成しました:
35 - SageMaker
W&B は Amazon SageMaker とインテグレーションしており、ハイパーパラメーターを自動で読み取り、分散 run をグループ化し、チェックポイントから run を再開します。
認証
W&B はトレーニングスクリプトと相対的な位置にある secrets.env
という名前のファイルを探し、wandb.init()
が呼び出されたときにそれを環境にロードします。wandb.sagemaker_auth(path="source_dir")
を実行することで、secrets.env
ファイルを生成できます。このファイルを .gitignore
に追加することを忘れないでください!
既存の推定器
SageMaker の事前設定された推定器を使用している場合、ソースディレクトリーに wandb を含む requirements.txt
を追加する必要があります。
wandb
Python 2 を実行している推定器を使用している場合、wandb をインストールする前に wheel から直接 psutil
をインストールする必要があります。
https://wheels.galaxyproject.org/packages/psutil-5.4.8-cp27-cp27mu-manylinux1_x86_64.whl
wandb
GitHub で完全な例を確認し、ブログ でさらに詳しく読んでください。
また、SageMaker と W&B を使用した感情分析器のデプロイに関するチュートリアルを読むこともできます。
W&B sweep agent は SageMaker インテグレーションがオフになっている場合のみ SageMaker ジョブで期待通りに動作します。wandb.init
の呼び出しを変更して SageMaker インテグレーションをオフにしてください。
wandb.init(..., settings=wandb.Settings(sagemaker_disable=True))
36 - Scikit-Learn
wandbを使って、scikit-learn モデルの性能を数行のコードで視覚化し比較することができます。 例を試す →
始めに
サインアップして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 wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
メトリクスをログする
import wandb
wandb.init(project="visualize-sklearn")
y_pred = clf.predict(X_test)
accuracy = sklearn.metrics.accuracy_score(y_true, y_pred)
# メトリクスを時間でログする場合、wandb.logを使用
wandb.log({"accuracy": accuracy})
# またはトレーニングの最後にメトリクスをログするには、wandb.summaryを使用することもできます
wandb.summary["accuracy"] = accuracy
プロットを作成する
ステップ1: wandbをインポートして新しいrunを初期化
import wandb
wandb.init(project="visualize-sklearn")
ステップ2: プロットを可視化する
個別のプロット
モデルをトレーニングし、予測を行った後、wandbでプロットを生成して予測を分析することができます。サポートされているチャートの完全なリストについては、以下のSupported Plotsセクションを参照してください。
# 単一のプロットを可視化
wandb.sklearn.plot_confusion_matrix(y_true, y_pred, labels)
すべてのプロット
W&B には plot_classifier
などの関数があり、関連する複数のプロットを描画します。
# すべての分類器プロットを可視化
wandb.sklearn.plot_classifier(
clf,
X_train,
X_test,
y_train,
y_test,
y_pred,
y_probas,
labels,
model_name="SVC",
feature_names=None,
)
# すべての回帰プロット
wandb.sklearn.plot_regressor(reg, X_train, X_test, y_train, y_test, model_name="Ridge")
# すべてのクラスタリングプロット
wandb.sklearn.plot_clusterer(
kmeans, X_train, cluster_labels, labels=None, model_name="KMeans"
)
既存のMatplotlibプロット
Matplotlibで作成されたプロットも、W&B ダッシュボードにログすることができます。そのためには、最初に plotly
をインストールする必要があります。
pip install plotly
最後に、以下のようにW&Bのダッシュボードにプロットをログすることができます。
import matplotlib.pyplot as plt
import wandb
wandb.init(project="visualize-sklearn")
# plt.plot(), plt.scatter() などをここで行います。
# ...
# plt.show()の代わりに:
wandb.log({"plot": plt})
サポートされているプロット
学習曲線

モデルを様々な長さのデータセットでトレーニングし、交差検証スコアとデータセットサイズのプロットを生成します。トレーニングセットとテストセット両方に対して。
wandb.sklearn.plot_learning_curve(model, X, y)
- model (clf or reg): 学習済みの回帰器または分類器を受け取ります。
- X (arr): データセットの特徴。
- y (arr): データセットのラベル。
ROC

ROC曲線は、真陽性率 (y軸) 対 偽陽性率 (x軸) をプロットします。理想的なスコアは、TPR = 1 かつ FPR = 0で、グラフの左上の点です。通常、ROC曲線の下面積 (AUC-ROC) を計算し、AUC-ROC が大きいほど良いです。
wandb.sklearn.plot_roc(y_true, y_probas, labels)
- y_true (arr): テストセットのラベル。
- y_probas (arr): テストセットの予測確率。
- labels (list): 目標変数 (y) の名前付きラベル。
クラスの割合

トレーニングセットとテストセット内のターゲットクラスの分布をプロットします。非バランスなクラスを検出し、1つのクラスがモデルに過度の影響を与えないようにするために役立ちます。
wandb.sklearn.plot_class_proportions(y_train, y_test, ['dog', 'cat', 'owl'])
- y_train (arr): トレーニングセットのラベル。
- y_test (arr): テストセットのラベル。
- labels (list): 目標変数 (y) の名前付きラベル。
精度-再現率曲線

異なる閾値に対する精度と再現率のトレードオフを計算します。曲線下面積が高いということは、再現率も精度も高いことを表しており、高精度は低誤報率に、高再現率は低漏れ率に関連しています。
精度と再現率の両方が高いことは、分類器が正確な結果(高精度)を返していること、さらに全ての陽性結果の大半を返していること(高再現率)を示しています。クラスが非常に不均衡な時に、PR曲線は役立ちます。
wandb.sklearn.plot_precision_recall(y_true, y_probas, labels)
- y_true (arr): テストセットのラベル。
- y_probas (arr): テストセットの予測確率。
- labels (list): 目標変数 (y) の名前付きラベル。
特徴の重要度

分類タスクにおける各特徴の重要度を評価しプロットします。ツリーのような feature_importances_
属性を持つ分類器でのみ動作します。
wandb.sklearn.plot_feature_importances(model, ['width', 'height', 'length'])
- model (clf): 学習済みの分類器を受け取ります。
- feature_names (list): 特徴の名前。プロット中の特徴のインデックスを対応する名前で置き換えることで読みやすくします。
キャリブレーション曲線

分類器の予測確率がどれだけキャリブレーションされているか、そしてどのように未キャリブレーションの分類器をキャリブレーションするかをプロットします。ロジスティック回帰ベースラインモデル、引数として渡されたモデル、およびそのアイソトニックキャリブレーションとシグモイドキャリブレーションによって、推定された予測確率を比較します。
キャリブレーション曲線が対角線に近いほど良好です。転写されたシグモイド型の曲線は過適合した分類器を表し、シグモイド型の曲線は学習不足の分類器を表します。モデルのアイソトニックおよびシグモイドキャリブレーションをトレーニングし、その曲線を比較することで、モデルがオーバーフィットかアンダーフィットしているかを判断し、どのキャリブレーション(シグモイドまたはアイソトニック)が問題を修正するのに役立つかを理解できます。
詳細については、sklearnのドキュメントを参照してください。
wandb.sklearn.plot_calibration_curve(clf, X, y, 'RandomForestClassifier')
- model (clf): 学習済みの分類器を受け取ります。
- X (arr): トレーニングセットの特徴。
- y (arr): トレーニングセットのラベル。
- model_name (str): モデル名。デフォルトは’Classifier’です。
混同行列

分類の精度を評価するために混同行列を計算します。モデルの予測の質を評価し、モデルが間違ってしまう予測のパターンを見つけるのに役立ちます。対角線は、実際のラベルと予測ラベルが一致する正しい予測を表します。
wandb.sklearn.plot_confusion_matrix(y_true, y_pred, labels)
- y_true (arr): テストセットのラベル。
- y_pred (arr): テストセットの予測ラベル。
- labels (list): 目標変数 (y) の名前付きラベル。
サマリーメトリクス

mse
、mae
、r2
スコアなどの分類のサマリーメトリクスを計算します。f1
、精度、再現率などの回帰のサマリーメトリクスを計算します。
wandb.sklearn.plot_summary_metrics(model, X_train, y_train, X_test, y_test)
- model (clf or reg): 学習済みの回帰器または分類器を受け取ります。
- X (arr): トレーニングセットの特徴。
- y (arr): トレーニングセットのラベル。
- X_test (arr): テストセットの特徴。
- y_test (arr): テストセットのラベル。
エルボープロット

クラスターの数に対する分散の説明率をトレーニング時間とともに測定しプロットします。クラスター数の最適値を選ぶのに役立ちます。
wandb.sklearn.plot_elbow_curve(model, X_train)
- model (clusterer): 学習済みのクラスタリングアルゴリズムを受け取ります。
- X (arr): トレーニングセットの特徴。
シルエットプロット

1つのクラスター内の各ポイントが、隣接するクラスターポイントにどれだけ近いかを測定しプロットします。クラスターの厚みはクラスターサイズに対応します。垂直線は全ポイントの平均シルエットスコアを示します。
+1に近いシルエット係数は、サンプルが隣接クラスターから遠いことを示します。0の値は、サンプルが隣接クラスター間の意思決定境界にあることを示しています。負の値は、これらのサンプルが誤ってクラスターに割り当てられた可能性があることを示します。
一般的に私たちは、すべてのシルエットクラスター スコアが、平均以上(赤線を超えたところ)そして1にできるだけ近いことを望みます。また、データ中の基礎パターンを反映したクラスターサイズを好みます。
wandb.sklearn.plot_silhouette(model, X_train, ['spam', 'not spam'])
- model (clusterer): 学習済みのクラスタリングアルゴリズムを受け取ります。
- X (arr): トレーニングセットの特徴。
- cluster_labels (list): クラスターラベルの名前。プロット中のクラスターインデックスを対応する名前で置き換え、読みやすくします。
外れ値候補プロット

Cookの距離を使用して、回帰モデルの各データポイントの影響を評価します。大きく偏った影響を持つインスタンスは外れ値である可能性があります。外れ値検出に役立ちます。
wandb.sklearn.plot_outlier_candidates(model, X, y)
- model (regressor): 学習済みの分類器を受け取ります。
- X (arr): トレーニングセットの特徴。
- y (arr): トレーニングセットのラベル。
残差プロット

予測された目標値 (y軸) 対 実際の目標値と予測された目標値の差 (x軸) 、さらに残差誤差の分布を測定しプロットします。
一般的に、適切にフィットされたモデルの残差はランダムに分布しているべきです。というのも、良いモデルは、データセット中のほとんどの現象を説明するからです。ランダムな誤差を除いて。
wandb.sklearn.plot_residuals(model, X, y)
- model (regressor): 学習済みの分類器を受け取ります。
- X (arr): トレーニングセットの特徴。
- y (arr): トレーニングセットのラベル。
ご質問がある場合は、私たちのslackコミュニティでお答えしますので、お気軽にどうぞ。
例
- コラボで実行: 始めるためのシンプルなノートブック
37 - Simple Transformers
このライブラリは、Hugging Face の Transformers ライブラリに基づいています。Simple Transformers を使用すると、Transformer モデルを迅速にトレーニングおよび評価できます。モデルの初期化、モデルのトレーニング、およびモデルの評価には、わずか 3 行のコードで済みます。Sequence Classification、Token Classification (NER)、Question Answering、Language Model Fine-Tuning、Language Model Training、Language Generation、T5 Model、Seq2Seq Tasks、Multi-Modal Classification、Conversational AI をサポートしています。
モデル トレーニング の可視化に Weights & Biases を使用するには、args
辞書の wandb_project
属性に W&B のプロジェクト名を設定します。これにより、すべてのハイパーパラメーター 値、トレーニング ロス、および評価メトリクスが指定されたプロジェクトにログされます。
model = ClassificationModel('roberta', 'roberta-base', args={'wandb_project': 'project-name'})
wandb.init
に渡す追加の引数は、wandb_kwargs
として渡すことができます。
構造
このライブラリは、すべての NLP タスクに対して個別のクラスを持つように設計されています。類似の機能を提供するクラスは、グループ化されています。
simpletransformers.classification
- すべての Classification モデルを含みます。ClassificationModel
MultiLabelClassificationModel
simpletransformers.ner
- すべての Named Entity Recognition モデルを含みます。NERModel
simpletransformers.question_answering
- すべての Question Answering モデルを含みます。QuestionAnsweringModel
以下は、いくつかの最小限の例です。
MultiLabel Classification
model = MultiLabelClassificationModel("distilbert","distilbert-base-uncased",num_labels=6,
args={"reprocess_input_data": True, "overwrite_output_dir": True, "num_train_epochs": epochs, 'learning_rate': learning_rate,
'wandb_project': "simpletransformers"},
)
# モデルをトレーニングする
model.train_model(train_df)
# モデルを評価する
result, model_outputs, wrong_predictions = model.eval_model(eval_df)
Question Answering
train_args = {
'learning_rate': wandb.config.learning_rate,
'num_train_epochs': 2,
'max_seq_length': 128,
'doc_stride': 64,
'overwrite_output_dir': True,
'reprocess_input_data': False,
'train_batch_size': 2,
'fp16': False,
'wandb_project': "simpletransformers"
}
model = QuestionAnsweringModel('distilbert', 'distilbert-base-cased', args=train_args)
model.train_model(train_data)
SimpleTransformers は、すべての一般的な自然言語タスクのためのクラスとトレーニングスクリプトを提供します。ここでは、ライブラリでサポートされているグローバル引数の完全なリストと、そのデフォルト引数を示します。
global_args = {
"adam_epsilon": 1e-8,
"best_model_dir": "outputs/best_model",
"cache_dir": "cache_dir/",
"config": {},
"do_lower_case": False,
"early_stopping_consider_epochs": False,
"early_stopping_delta": 0,
"early_stopping_metric": "eval_loss",
"early_stopping_metric_minimize": True,
"early_stopping_patience": 3,
"encoding": None,
"eval_batch_size": 8,
"evaluate_during_training": False,
"evaluate_during_training_silent": True,
"evaluate_during_training_steps": 2000,
"evaluate_during_training_verbose": False,
"fp16": True,
"fp16_opt_level": "O1",
"gradient_accumulation_steps": 1,
"learning_rate": 4e-5,
"local_rank": -1,
"logging_steps": 50,
"manual_seed": None,
"max_grad_norm": 1.0,
"max_seq_length": 128,
"multiprocessing_chunksize": 500,
"n_gpu": 1,
"no_cache": False,
"no_save": False,
"num_train_epochs": 1,
"output_dir": "outputs/",
"overwrite_output_dir": False,
"process_count": cpu_count() - 2 if cpu_count() > 2 else 1,
"reprocess_input_data": True,
"save_best_model": True,
"save_eval_checkpoints": True,
"save_model_every_epoch": True,
"save_steps": 2000,
"save_optimizer_and_scheduler": True,
"silent": False,
"tensorboard_dir": None,
"train_batch_size": 8,
"use_cached_eval_features": False,
"use_early_stopping": False,
"use_multiprocessing": True,
"wandb_kwargs": {},
"wandb_project": None,
"warmup_ratio": 0.06,
"warmup_steps": 0,
"weight_decay": 0,
}
詳細なドキュメントについては、github の simpletransformers を参照してください。
最も人気のある GLUE ベンチマークデータセットでのトランスフォーマーのトレーニングをカバーしている こちらの Weights & Biases レポート をご覧ください。 ぜひ自分で colab で試してみてください。
38 - Skorch
Weights & Biases を Skorch と一緒に使うことで、各エポックの後に最もパフォーマンスの良いモデルを自動的にログし、すべてのモデルパフォーマンスメトリクス、モデルトポロジー、計算リソースを記録することができます。wandb_run.dir
に保存されたすべてのファイルは、自動的に W&B サーバーにログされます。
example run を参照してください。
Parameters
Parameter | Type | Description |
---|---|---|
wandb_run |
wandb.wandb_run . Run |
データをログするために使用される wandb run。 |
save_model |
bool (default=True) | 最良のモデルのチェックポイントを保存し、W&B サーバー上の Run にアップロードするかどうか。 |
keys_ignored |
str or list of str (default=None) | tensorboard にログされるべきでないキーまたはキーのリスト。ユーザーが提供するキーに加え、event_ で始まるか _best で終わるキーはデフォルトで無視されます。 |
Example Code
インテグレーションがどのように機能するかを見るためのいくつかの例を作成しました:
- Colab: インテグレーションを試すためのシンプルなデモ
- A step by step guide: Skorch モデルのパフォーマンスをトラッキングするためのガイド
# wandb をインストールする
... pip install wandb
import wandb
from skorch.callbacks import WandbLogger
# wandb Run を作成
wandb_run = wandb.init()
# 代わりの方法: W&B アカウントなしで wandb Run を作成
wandb_run = wandb.init(anonymous="allow")
# ハイパーパラメータをログ (オプション)
wandb_run.config.update({"learning rate": 1e-3, "batch size": 32})
net = NeuralNet(..., callbacks=[WandbLogger(wandb_run)])
net.fit(X, y)
Method reference
Method | Description |
---|---|
initialize () |
コールバックの初期状態を(再)設定する。 |
on_batch_begin (net[, X, y, training]) |
各バッチの開始時に呼び出される。 |
on_batch_end (net[, X, y, training]) |
各バッチの終了時に呼び出される。 |
on_epoch_begin (net[, dataset_train, …]) |
各エポックの開始時に呼び出される。 |
on_epoch_end (net, **kwargs) |
最後の履歴ステップの値をログし、最良のモデルを保存する。 |
on_grad_computed (net, named_parameters[, X, …]) |
勾配が計算された後、更新ステップが行われる前に、各バッチごとに一度呼び出される。 |
on_train_begin (net, **kwargs) |
モデルトポロジーをログし、勾配に対するフックを追加する。 |
on_train_end (net[, X, y]) |
トレーニングの終了時に呼び出される。 |
39 - spaCy
spaCy は人気のある「産業強度」のNLPライブラリで、迅速かつ高精度なモデルを手間なく利用できます。spaCy v3からは、Weights & Biasesをspacy train
と共に使用することで、あなたのspaCyモデルのトレーニングメトリクスを追跡し、モデルとデータセットの保存とバージョン管理も可能になりました。そして、それには設定にほんの数行追加するだけです。
サインアップしてAPIキーを作成
APIキーは、あなたのマシンをW&Bに認証します。ユーザープロフィールからAPIキーを生成できます。
- 右上のユーザープロフィールアイコンをクリック。
- ユーザー設定を選択し、APIキーセクションまでスクロール。
- 表示をクリックし、表示されたAPIキーをコピーします。APIキーを非表示にするには、ページを再読み込みしてください。
wandb
ライブラリをインストールしてログイン
wandb
ライブラリをローカルにインストールし、ログインするには:
-
WANDB_API_KEY
環境変数 をあなたのAPIキーに設定します。export WANDB_API_KEY=<your_api_key>
-
wandb
ライブラリをインストールしてログインします。pip install wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
WandbLogger
をspaCyの設定ファイルに追加
spaCyの設定ファイルは、ロギングだけでなく、GPUの割り当て、オプティマイザーの選択、データセットのパスなど、トレーニングのすべての側面を指定するために使用されます。[training.logger]
の下に、キー @loggers
を 値
“spacy.WandbLogger.v3” で、さらに project_name
を指定する必要があります。
[training.logger]
@loggers = "spacy.WandbLogger.v3"
project_name = "my_spacy_project"
remove_config_values = ["paths.train", "paths.dev", "corpora.train.path", "corpora.dev.path"]
log_dataset_dir = "./corpus"
model_log_interval = 1000
名前 | 説明 |
---|---|
project_name |
str 型。W&Bプロジェクトの名前。存在しない場合は、自動的にプロジェクトが作成されます。 |
remove_config_values |
List[str] 型。W&Bにアップロードする前に設定から除外する値のリスト。デフォルトは[] です。 |
model_log_interval |
Optional int 型。デフォルトはNone です。設定すると、モデルのバージョン管理がArtifactsとともに有効になります。モデルチェックポイントをログに記録する間隔のステップ数を渡します。デフォルトはNone です。 |
log_dataset_dir |
Optional str 型。パスを渡すと、トレーニング開始時にデータセットはArtifactsとしてアップロードされます。デフォルトはNone です。 |
entity |
Optional str 型。指定した場合、run は指定したエンティティで作成されます。 |
run_name |
Optional str 型。指定された場合、run は指定された名前で作成されます。 |
トレーニングを開始
WandbLogger
をspaCyのトレーニング設定に追加したら、通常通り spacy train
を実行できます。
python -m spacy train \
config.cfg \
--output ./output \
--paths.train ./train \
--paths.dev ./dev
python -m spacy train \
config.cfg \
--output ./output \
--paths.train ./train \
--paths.dev ./dev
!python -m spacy train \
config.cfg \
--output ./output \
--paths.train ./train \
--paths.dev ./dev
トレーニングが始まると、トレーニングrun のW&Bページへのリンクが出力され、このrun の実験管理ダッシュボードにWeights & BiasesのウェブUIでアクセスできます。
40 - Stable Baselines 3
Stable Baselines 3 (SB3) は、PyTorch による強化学習アルゴリズムの信頼性のある実装セットです。W&B の SB3 インテグレーション:
- 損失やエピソードごとのリターンなどのメトリクスを記録します。
- ゲームをプレイするエージェントのビデオをアップロードします。
- トレーニング済みモデルを保存します。
- モデルのハイパーパラメーターをログします。
- モデルの勾配ヒストグラムをログします。
W&B を用いた SB3 トレーニング run の例をレビューしてください。
SB3 実験をログする
from wandb.integration.sb3 import WandbCallback
model.learn(..., callback=WandbCallback())

WandbCallback 引数
引数 | 使用法 |
---|---|
verbose |
sb3 出力の詳細度 |
model_save_path |
モデルが保存されるフォルダーへのパス。デフォルト値は None で、モデルはログされません。 |
model_save_freq |
モデルを保存する頻度 |
gradient_save_freq |
勾配をログする頻度。デフォルト値は 0 で、勾配はログされません。 |
基本的な例
W&B SB3 インテグレーションは、TensorBoard から出力されたログを使用してメトリクスをログします。
import gym
from stable_baselines3 import PPO
from stable_baselines3.common.monitor import Monitor
from stable_baselines3.common.vec_env import DummyVecEnv, VecVideoRecorder
import wandb
from wandb.integration.sb3 import WandbCallback
config = {
"policy_type": "MlpPolicy",
"total_timesteps": 25000,
"env_name": "CartPole-v1",
}
run = wandb.init(
project="sb3",
config=config,
sync_tensorboard=True, # sb3 の tensorboard メトリクスを自動アップロード
monitor_gym=True, # ゲームをプレイするエージェントのビデオを自動アップロード
save_code=True, # オプション
)
def make_env():
env = gym.make(config["env_name"])
env = Monitor(env) # リターンなどの統計を記録
return env
env = DummyVecEnv([make_env])
env = VecVideoRecorder(
env,
f"videos/{run.id}",
record_video_trigger=lambda x: x % 2000 == 0,
video_length=200,
)
model = PPO(config["policy_type"], env, verbose=1, tensorboard_log=f"runs/{run.id}")
model.learn(
total_timesteps=config["total_timesteps"],
callback=WandbCallback(
gradient_save_freq=100,
model_save_path=f"models/{run.id}",
verbose=2,
),
)
run.finish()
41 - TensorBoard
あなたの TensorBoard ログをクラウドにアップロードし、同僚やクラスメートと迅速に結果を共有し、分析を一元化された場所に保つことができます。

始めましょう
import wandb
# `sync_tensorboard=True` で wandb run を開始
wandb.init(project="my-project", sync_tensorboard=True)
# TensorBoard を使用した トレーニング コード
...
# [オプション]wandb run を終了して tensorboard ログを W&B にアップロード(ノートブックの場合)
wandb.finish()
例を確認してください。
run が終了すると、W&B で TensorBoard イベントファイルに アクセス でき、W&B ネイティブチャートでメトリクスを視覚化できます。システムの CPU や GPU の利用状況、git
の状態、run が使用したターミナルコマンドなどの追加情報と一緒に表示されます。
よくある質問
TensorBoard に ログ されていないメトリクスを W&B に ログ するにはどうすればよいですか?
TensorBoard にログされていないカスタムメトリクスを追加でログする必要がある場合、wandb.log
をコード内で呼び出すことができます。wandb.log({"custom": 0.8})
Tensorboard を同期する際、wandb.log
でステップ引数を設定することはできません。異なるステップ数を設定したい場合は、次のようにステップメトリクスを使ってメトリクスをログできます。
wandb.log({"custom": 0.8, "global_step": global_step})
wandb
で Tensorboard を使用する場合、どのように設定すれば良いですか?
TensorBoard のパッチに対する制御をもっと持ちたい場合、wandb.init
に sync_tensorboard=True
を渡す代わりに wandb.tensorboard.patch
を呼び出すことができます。
import wandb
wandb.tensorboard.patch(root_logdir="<logging_directory>")
wandb.init()
# ノートブックの場合、wandb run を終了して tensorboard ログを W&B にアップロード
wandb.finish()
このメソッドに tensorboard_x=False
を渡すことで、バニラ TensorBoard がパッチされるように確保できます。PyTorch で TensorBoard > 1.14 を使用している場合は、 pytorch=True
を渡して確保することができます。これらのオプションは、インポートされたこれらのライブラリの バージョン に応じて、賢いデフォルトを持っています。
デフォルトでは、tfevents
ファイルと .pbtxt
ファイルを同期します。これによりあなたのために TensorBoard インスタンスをローンンチできるようになります。run ページには TensorBoard タブ が表示されます。この振る舞いは、wandb.tensorboard.patch
に save=False
を渡すことで無効にできます。
import wandb
wandb.init()
wandb.tensorboard.patch(save=False, tensorboard_x=True)
# ノートブックの場合、wandb run を終了して tensorboard ログを W&B にアップロード
wandb.finish()
tf.summary.create_file_writer
または torch.utils.tensorboard
経由で SummaryWriter
を構築する前に、wandb.init
または wandb.tensorboard.patch
のいずれかを呼び出す必要があります。過去の TensorBoard runs を同期するにはどうすればよいですか?
ローカルに保存されている既存の tfevents
ファイルを W&B にインポートしたい場合は、wandb sync log_dir
を実行できます。ここで log_dir
は tfevents
ファイルを含むローカルディレクトリーです。
Google Colab や Jupyter を TensorBoard で使用するにはどうすればよいですか?
Jupyter または Colab ノートブックでコードを実行する場合、トレーニングの終了時に wandb.finish()
を呼び出してください。これにより wandb run は完了し、tensorboard ログを W&B にアップロードして視覚化できるようになります。 .py
スクリプトを実行する場合、スクリプトが終了すると自動的に wandb も終了するため、これは必要ありません。
ノートブック 環境 でシェル コマンド を実行するには、!
を先頭に付ける必要があります。例:!wandb sync directoryname
。
PyTorch を TensorBoard で使用するにはどうすればよいですか?
もし PyTorch の TensorBoard インテグレーションを使用している場合、PyTorch Profiler JSON ファイルを手動でアップロードする必要があります。
wandb.save(glob.glob(f"runs/*.pt.trace.json")[0], base_path=f"runs")
42 - TensorFlow
始めましょう
すでにTensorBoardを使用している場合は、wandbと簡単に統合できます。
import tensorflow as tf
import wandb
wandb.init(config=tf.flags.FLAGS, sync_tensorboard=True)
カスタムメトリクスをログする
TensorBoardにログされていない追加のカスタムメトリクスをログする必要がある場合、コード内で wandb.log
を呼び出せます wandb.log({"custom": 0.8})
Tensorboardとの同期時には、wandb.log
のステップ引数はオフになっています。異なるステップカウントを設定したい場合、次のようにステップメトリクスとしてメトリクスをログできます:
wandb.log({"custom": 0.8, "global_step":global_step}, step=global_step)
TensorFlowエスティメーターフック
ログする内容をより詳細に制御したい場合、wandbはTensorFlowエスティメーター用のフックも提供しています。これにより、グラフ内のすべての tf.summary
値をログします。
import tensorflow as tf
import wandb
wandb.init(config=tf.FLAGS)
estimator.train(hooks=[wandb.tensorflow.WandbHook(steps_per_log=1000)])
手動でログする
TensorFlowでメトリクスをログする最も簡単な方法は、TensorFlowロガーで tf.summary
をログすることです:
import wandb
with tf.Session() as sess:
# ...
wandb.tensorflow.log(tf.summary.merge_all())
TensorFlow 2 においてカスタムループでモデルをトレーニングする推奨方法は、tf.GradientTape
を使用することです。詳しくはこちらで読むことができます。TensorFlowのカスタムトレーニングループに wandb
を組み込んでメトリクスをログしたい場合、次のコードスニペットに従ってください:
with tf.GradientTape() as tape:
# 確率を取得
predictions = model(features)
# 損失を計算
loss = loss_func(labels, predictions)
# メトリクスをログ
wandb.log("loss": loss.numpy())
# 勾配を取得
gradients = tape.gradient(loss, model.trainable_variables)
# 重みを更新
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
完全な例はこちらで入手可能です。
W&BはTensorBoardとどう違うのか?
共同創業者がW&Bの開発を始めたとき、OpenAIのフラストレーションを抱えたTensorBoardユーザーのためのツールを作ることにインスパイアされました。ここに、私たちが改善に注力したいくつかのポイントがあります:
- モデルの再現: Weights & Biasesは実験管理、探査、およびモデルを後で再現するのに優れています。私たちはメトリクスだけでなく、ハイパーパラメーターやコードのバージョンもキャプチャし、プロジェクトが再現可能であるように、バージョン管理の状態やモデルのチェックポイントを保存できます。
- 自動整理: コラボレーターからプロジェクトを引き継いだり、休暇から戻ったり、古いプロジェクトを再開する際に、W&Bは試されたすべてのモデルを見るのを簡単にします。こうして、誰も何時間も無駄にせず、GPUサイクルや二酸化炭素を消費して実験をやり直すことを避けられます。
- 迅速で柔軟なインテグレーション: あなたのプロジェクトに5分でW&Bを追加できます。オープンソースのPythonパッケージを無料でインストールし、コードに数行追加することで、モデルを実行するたびに素晴らしいログメトリクスと記録が得られます。
- 持続可能で中央集権的なダッシュボード: どこでモデルをトレーニングしても、あなたのローカルマシン、共有ラボクラスター、クラウドのスポットインスタンスであっても結果は同じ中央ダッシュボードに共有されます。異なるマシンからTensorBoardファイルをコピーして整理するのに時間を費やす必要はありません。
- 強力なテーブル: 異なるモデルの結果を検索、フィルタ、ソートし、グループ化できます。数千のモデルバージョンを簡単に見渡し、異なるタスクに対して最もパフォーマンスの良いモデルを見つけることができます。TensorBoardは大規模なプロジェクトに対してはうまく機能しません。
- コラボレーションのためのツール: 複雑な機械学習プロジェクトを整理するためにW&Bを利用できます。W&Bへのリンクを簡単に共有でき、プライベートチームを活用して皆が共通のプロジェクトに結果を送信できるようにできます。また、レポートを通じてのコラボレーションもサポートされています— インタラクティブな可視化を追加したり、仕事の内容をmarkdownで説明できます。これにより、作業ログを保持したり、上司と学びを共有したり、研究室やチームに学びを提示したりするのに最適です。
無料アカウントで始めましょう
例
インテグレーションがどのように機能するかを見るためにいくつかの例を作成しました:
- Githubの例: TensorFlow Estimatorsを使用したMNISTの例
- Githubの例: Raw TensorFlowを使用したFashion MNISTの例
- Wandb ダッシュボード: W&Bでの結果を表示
- TensorFlow 2でのトレーニングループのカスタマイズ - 記事 | ダッシュボード
43 - W&B for Julia
機械学習実験をJuliaプログラミング言語で行う場合、コミュニティの貢献者によって作成された非公式なJuliaバインディングセット、wandb.jlを使用できます。
例は、wandb.jlリポジトリのドキュメントで見つけることができます。彼らの「Getting Started」例は以下の通りです。
using Wandb, Dates, Logging
# 新しいrunを開始し、ハイパーパラメーターをconfigでトラッキング
lg = WandbLogger(project = "Wandb.jl",
name = "wandbjl-demo-$(now())",
config = Dict("learning_rate" => 0.01,
"dropout" => 0.2,
"architecture" => "CNN",
"dataset" => "CIFAR-100"))
# LoggingExtras.jlを使用して、複数のロガーに同時にログを記録
global_logger(lg)
# トレーニングまたは評価ループのシミュレーション
for x ∈ 1:50
acc = log(1 + x + rand() * get_config(lg, "learning_rate") + rand() + get_config(lg, "dropout"))
loss = 10 - log(1 + x + rand() + x * get_config(lg, "learning_rate") + rand() + get_config(lg, "dropout"))
# スクリプトからW&Bにメトリクスをログする
@info "metrics" accuracy=acc loss=loss
end
# runを終了
close(lg)
44 - XGBoost
wandb
ライブラリには、XGBoost のトレーニングからメトリクス、設定、保存されたブースターをログするための WandbCallback
コールバックがあります。ここでは、XGBoost WandbCallback
の出力を含む ライブ Weights & Biases ダッシュボード を確認できます。

始めに
XGBoost で収集したメトリクス、設定、ブースターモデルを Weights & Biases にログするのは、XGBoost に WandbCallback
を渡すだけで簡単です。
from wandb.integration.xgboost import WandbCallback
import xgboost as XGBClassifier
...
# wandb run を開始
run = wandb.init()
# モデルに WandbCallback を渡す
bst = XGBClassifier()
bst.fit(X_train, y_train, callbacks=[WandbCallback(log_model=True)])
# wandb run を終了
run.finish()
このノートブック を開いて、XGBoost と Weights & Biases を使用したログの詳細な方法を見ることができます。
WandbCallback
リファレンス
機能
WandbCallback
を XGBoost モデルに渡すと、以下のことが行えます:
- ブースターモデルの設定を Weights & Biases にログする
- XGBoost によって収集された評価メトリクス(例: rmse, accuracy)を Weights & Biases にログする
- XGBoost で収集されたトレーニングメトリクスをログする(eval_set にデータを提供する場合)
- 最良のスコアと最良のイテレーションをログする
- トレーニング済みモデルを Weights & Biases Artifacts に保存およびアップロードする(
log_model = True
の場合) log_feature_importance=True
(デフォルト)の場合、特徴重要度のプロットをログするdefine_metric=True
(デフォルト)の場合、wandb.summary
に最良の評価メトリックをキャプチャする
引数
-
log_model
: (boolean) True の場合、モデルを Weights & Biases Artifacts に保存しアップロードする -
log_feature_importance
: (boolean) True の場合、特徴重要度の棒グラフをログする -
importance_type
: (str){weight, gain, cover, total_gain, total_cover}
のいずれかでツリーモデルに適用。重みは線形モデルに対応。 -
define_metric
: (boolean) True(デフォルト)の場合、トレーニングの最良のステップでモデルのパフォーマンスをwandb.summary
にキャプチャする(最後のステップではなく)。
WandbCallback
のソースコードを確認できます。
追加の例は、GitHub の例のリポジトリをチェックしてください。
Sweep でハイパーパラメーターをチューニングする
モデルの最大パフォーマンスを引き出すには、ツリーの深さや学習率など、ハイパーパラメーターをチューニングする必要があります。Weights & Biases には、大規模なハイパーパラメーターテスト実験を設定、編成、分析するための強力なツールキットである Sweeps が含まれています。
この XGBoost & Sweeps Python スクリプト も試すことができます。

45 - YOLOv5
Ultralytics’ YOLOv5 (“You Only Look Once”) モデルファミリーは、畳み込みニューラルネットワークを使用したリアルタイムのオブジェクト検出を、苦痛なく実現します。
Weights & Biases は YOLOv5 に直接インテグレーションされており、実験のメトリクス追跡、モデルとデータセットのバージョン管理、リッチなモデル予測の可視化などを提供します。YOLO の実験を実行する前に pip install
一行を実行するだけで始められます。
コア実験の追跡
wandb
をインストールするだけで、システムメトリクス、モデルメトリクス、インタラクティブなダッシュボードにログされるメディアといった、ビルトインの W&B ログ機能が有効になります。
pip install wandb
git clone https://github.com/ultralytics/yolov5.git
python yolov5/train.py # 小さなデータセットで小さなネットワークをトレーニングします
wandb によって標準出力に表示されるリンクをただフォローするだけです。

インテグレーションのカスタマイズ
YOLO にいくつかの簡単なコマンドライン引数を渡すことで、さらに多くの W&B 機能を活用できます。
--save_period
に数値を渡すと、W&B は各save_period
エポックの終わりにモデルバージョンを保存します。モデルバージョンにはモデルの重みが含まれ、検証セットで最もパフォーマンスの良いモデルにタグ付けされます。--upload_dataset
フラグをオンにすると、データセットがデータバージョン管理のためにアップロードされます。--bbox_interval
に数値を渡すと、データ可視化が有効になります。各bbox_interval
エポックの終わりに、モデルの出力が検証セットに対して W&B にアップロードされます。
python yolov5/train.py --epochs 20 --save_period 1
python yolov5/train.py --epochs 20 --save_period 1 \
--upload_dataset --bbox_interval 1
これがどのように見えるかを示します。


46 - ウルトラリティクス
Ultralytics は、画像分類、オブジェクト検出、画像セグメンテーション、ポーズ推定などのタスクにおける最先端のコンピュータビジョンモデルのホームです。リアルタイムオブジェクト検出モデルのYOLOシリーズの最新バージョンである YOLOv8 をホストするだけでなく、他にも SAM (Segment Anything Model)、RT-DETR、YOLO-NAS などの強力なコンピュータビジョンモデルも備えています。これらのモデルの実装を提供するだけでなく、Ultralytics は、これらのモデルを使ったトレーニング、ファインチューニング、適用のための使いやすい API を使ったエンドツーエンドのワークフローも提供しています。
始めましょう
-
ultralytics
とwandb
をインストールします。```shell pip install --upgrade ultralytics==8.0.238 wandb # または # conda install ultralytics ```
```bash !pip install --upgrade ultralytics==8.0.238 wandb ```
開発チームは
ultralyticsv8.0.238
以下とのインテグレーションをテストしました。インテグレーションに関する問題を報告するには、タグyolov8
を付けて GitHub issue を作成してください。
実験管理とバリデーション結果の可視化
このセクションでは、Ultralytics モデルを使ったトレーニング、ファインチューニング、バリデーションの典型的なワークフローと、実験管理、モデルのチェックポイント、モデルのパフォーマンスの可視化を W&B を使用して行う方法を示します。
このインテグレーションについては、次のレポートで確認することもできます:Supercharging Ultralytics with W&B
Ultralytics と W&B のインテグレーションを使用するには、wandb.integration.ultralytics.add_wandb_callback
関数をインポートします。
import wandb
from wandb.integration.ultralytics import add_wandb_callback
from ultralytics import YOLO
選択した YOLO
モデルを初期化し、推論を行う前に add_wandb_callback
関数を呼び出します。これにより、トレーニング、ファインチューニング、バリデーション、または推論を行うときに、実験ログと、地上真実とそれぞれの予測結果を重ね合わせた画像が、自動的に コンピュータビジョンタスクの対話型オーバーレイ で保存され、追加の洞察が wandb.Table
に保存されることを保証します。
# YOLO モデルを初期化
model = YOLO("yolov8n.pt")
# Ultralytics 用に W&B コールバックを追加
add_wandb_callback(model, enable_model_checkpointing=True)
# モデルをトレーニング/ファインチューニング
# 各エポックの終わりに、バリデーションバッチでの予測が
# コンピュータビジョンタスク用の洞察に満ちた対話型オーバーレイと共に
# W&B テーブルに記録されます
model.train(project="ultralytics", data="coco128.yaml", epochs=5, imgsz=640)
# W&B run を終了
wandb.finish()
Ultralytics のトレーニングまたはファインチューニングワークフローで W&B により実験管理された様子は次のとおりです。
YOLO Fine-tuning Experiments
エポックごとのバリデーション結果が W&B Table を使用してどのように可視化されるかは次のとおりです。
WandB Validation Visualization Table
予測結果の可視化
このセクションでは、Ultralytics モデルを使った推論と結果の可視化の典型的なワークフローを W&B を使用して示します。
Google Colab でコードを試すことができます: Open in Colab.
このインテグレーションについては、次のレポートで確認することもできます:Supercharging Ultralytics with W&B
Ultralytics と W&B のインテグレーションを使用するには、wandb.integration.ultralytics.add_wandb_callback
関数をインポートする必要があります。
import wandb
from wandb.integration.ultralytics import add_wandb_callback
from ultralytics.engine.model import YOLO
インテグレーションをテストするためにいくつかの画像をダウンロードします。静止画像、ビデオ、またはカメラソースを使用できます。推論ソースの詳細については、Ultralytics のドキュメント を確認してください。
!wget https://raw.githubusercontent.com/wandb/examples/ultralytics/colabs/ultralytics/assets/img1.png
!wget https://raw.githubusercontent.com/wandb/examples/ultralytics/colabs/ultralytics/assets/img2.png
!wget https://raw.githubusercontent.com/wandb/examples/ultralytics/colabs/ultralytics/assets/img4.png
!wget https://raw.githubusercontent.com/wandb/examples/ultralytics/colabs/ultralytics/assets/img5.png
次に、wandb.init
を使って W&B の run を初期化します。
# W&B run を初期化
wandb.init(project="ultralytics", job_type="inference")
次に、希望する YOLO
モデルを初期化し、推論を行う前に add_wandb_callback
関数を呼び出します。これにより、推論を実行すると、コンピュータビジョンタスク用の対話型オーバーレイ で画像が自動的にログに記録され、追加の洞察が wandb.Table
に提供されることを保証します。
# YOLO モデルを初期化
model = YOLO("yolov8n.pt")
# Ultralytics 用に W&B コールバックを追加
add_wandb_callback(model, enable_model_checkpointing=True)
# 予測を実行し、自動的に W&B テーブルにログを記録
# バウンディングボックス、セグメンテーションマスク用の対話型オーバーレイ付き
model(
[
"./assets/img1.jpeg",
"./assets/img3.png",
"./assets/img4.jpeg",
"./assets/img5.jpeg",
]
)
# W&B run を終了
wandb.finish()
トレーニングまたはファインチューニングワークフローの場合、wandb.init()
を使用して明示的に run を初期化する必要はありません。ただし、コードが予測のみを含む場合は、明示的に run を作成する必要があります。
対話型の bbox オーバーレイは次のように表示されます。
WandB Image Overlay
W&B 画像オーバーレイに関する詳細情報は こちら で取得できます。
その他のリソース
47 - YOLOX
YOLOX は、オブジェクト検出において優れたパフォーマンスを持つ、アンカーフリー版のYOLOです。YOLOX W&Bインテグレーションを使用すると、トレーニング、検証、およびシステムに関連するメトリクスのログをオンにすることができ、単一のコマンドライン引数で予測をインタラクティブに検証することができます。
サインアップしてAPIキーを作成する
APIキーは、W&Bに対してマシンを認証します。APIキーはユーザープロファイルから生成できます。
- 右上のユーザープロファイルアイコンをクリックします。
- User Settings を選択し、API Keys セクションまでスクロールします。
- Reveal をクリックします。表示されたAPIキーをコピーします。APIキーを非表示にするには、ページをリロードしてください。
wandb
ライブラリをインストールしてログインする
ローカルに wandb
ライブラリをインストールしてログインする方法:
-
WANDB_API_KEY
environment variable をAPIキーに設定します。export WANDB_API_KEY=<your_api_key>
-
wandb
ライブラリをインストールしてログインします。pip install wandb wandb login
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()
メトリクスをログする
--logger wandb
コマンドライン引数を使用して、wandbでのロギングを有効にします。また、wandb.init
が期待するすべての引数を渡すこともできます。それぞれの引数には wandb-
を前置します。
num_eval_imges
は、モデルの評価のためにW&Bテーブルにログされる検証セット画像と予測の数を制御します。
# wandb にログイン
wandb login
# `wandb` ロガー引数を使って yolox のトレーニングスクリプトを呼び出します
python tools/train.py .... --logger wandb \
wandb-project <project-name> \
wandb-entity <entity>
wandb-name <run-name> \
wandb-id <run-id> \
wandb-save_dir <save-dir> \
wandb-num_eval_imges <num-images> \
wandb-log_checkpoints <bool>
例
YOLOX のトレーニングと検証メトリクスを含むダッシュボードの例 ->

このW&Bインテグレーションに関する質問や問題がありますか? YOLOXリポジトリでissueを開いてください。