Integrations
W&B の インテグレーション により、既存の プロジェクト 内で 実験管理 と データ バージョン管理 を迅速かつ簡単にセットアップできます。PyTorch などの ML フレームワーク、Hugging Face などの ML ライブラリ、または Amazon SageMaker などの クラウド サービス向けの インテグレーション をご確認ください。
VIDEO
関連リソース
1 - Add wandb to any library
任意のライブラリに wandb を追加する
このガイドでは、強力な 実験管理 、GPU とシステム監視、モデルチェックポイントなど、独自のライブラリのための機能を W&B と統合するためのベストプラクティスを提供します。
W&B の使用方法をまだ学習中の場合は、先に進む前に、
実験管理 など、これらのドキュメントにある他の W&B ガイドを確認することをお勧めします。
以下では、作業中のコードベースが単一の Python トレーニングスクリプトまたは Jupyter ノートブックよりも複雑な場合の、ベストなヒントとベストプラクティスについて説明します。取り上げるトピックは次のとおりです。
セットアップ要件
ユーザーログイン
wandb の Run の開始
Run の設定の定義
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(APIキー) ]セクションまでスクロールします。
[Reveal(表示) ]をクリックします。表示された APIキー をコピーします。 APIキー を非表示にするには、ページをリロードします。
wandb
ライブラリをインストールしてログインする
wandb
ライブラリをローカルにインストールしてログインするには:
Command Line
Python
Python notebook
WANDB_API_KEY
環境変数 を APIキー に設定します。
export WANDB_API_KEY= <your_api_key>
wandb
ライブラリをインストールしてログインします。
pip install wandb
wandb login
import wandb
wandb. login()
!pip install wandb
import wandb
wandb.login()
ユーザーが上記の手順に従わずに初めて wandb を使用する場合、スクリプトが wandb.init
を呼び出すと、自動的にログインを求められます。
Run を開始する
W&B Run は、W&B によって記録される計算の単位です。通常、トレーニング実験ごとに単一の W&B Run を関連付けます。
W&B を初期化し、コード内で Run を開始するには:
オプションで、プロジェクトの名前を指定したり、エンティティパラメーターのユーザー名やチーム名(wandb_entity
)とともに、コード内の wandb_project
などのパラメーターを使用して、ユーザー自身に設定させたりできます。
run = wandb. init(project= wandb_project, entity= wandb_entity)
Run を終了するには、run.finish()
を呼び出す必要があります。これがインテグレーションの設計で機能する場合は、Run をコンテキストマネージャーとして使用します。
# When this block exits, it calls run.finish() automatically.
# If it exits due to an exception, it uses run.finish(exit_code=1) which
# marks the run as failed.
with wandb. init() as run:
...
wandb.init
をいつ呼び出すか?
ライブラリは、W&B Run をできるだけ早く作成する必要があります。これは、エラーメッセージを含むコンソール内のすべての出力が W&B Run の一部として記録されるためです。これにより、デバッグが容易になります。
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
をオフラインに設定します。これは、wandb
を実行しますが、インターネット経由で W&B に通信しようとはしません。
Environment Variable
Bash
export WANDB_MODE= offline
または
os. environ['WANDB_MODE' ] = 'offline'
Run の設定を定義する
wandb
の Run の設定を使用すると、W&B Run の作成時にモデル、データセットなどに関するメタデータを提供できます。この情報を使用して、さまざまな実験を比較し、主な違いをすばやく理解できます。
ログに記録できる一般的な設定パラメーターは次のとおりです。
モデル名、バージョン、アーキテクチャー パラメーターなど。
データセット名、バージョン、トレーニング/検証の例の数など。
学習率、 バッチサイズ 、 オプティマイザー などのトレーニングパラメーター。
次のコードスニペットは、設定をログに記録する方法を示しています。
config = {"batch_size" : 32 , ... }
wandb. init(... , config= config)
Run の設定を更新する
設定を更新するには、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)
メトリクス がたくさんある場合は、train/...
や val/...
などの メトリクス 名にプレフィックスを使用することで、UI で自動的にグループ化できます。これにより、トレーニングと検証の メトリクス 、または分離したいその他の メトリクス タイプ用に、W&B Workspace に個別のセクションが作成されます。
metrics = {
"train/loss" : 0.4 ,
"train/learning_rate" : 0.4 ,
"val/loss" : 0.5 ,
"val/accuracy" : 0.7
}
run. log(metrics)
run.log
の詳細を見る 。
X軸のずれを防ぐ
同じトレーニングステップに対して run.log
を複数回呼び出すと、wandb SDK は run.log
を呼び出すたびに内部ステップカウンターをインクリメントします。このカウンターは、トレーニングループのトレーニングステップと一致しない場合があります。
この状況を回避するには、run.define_metric
で X軸ステップを明示的に定義します。wandb.init
を呼び出した直後に1回定義します。
with wandb. init(... ) as run:
run. define_metric("*" , step_metric= "global_step" )
グロブパターン *
は、すべての メトリクス がチャートで global_step
を X軸として使用することを意味します。特定の メトリクス のみを global_step
に対してログに記録する場合は、代わりにそれらを指定できます。
run. define_metric("train/loss" , step_metric= "global_step" )
次に、run.log
を呼び出すたびに、 メトリクス 、step
メトリクス 、および global_step
をログに記録します。
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」が利用できないなど、独立したステップ変数にアクセスできない場合、「global_step」の以前にログに記録された値が wandb によって自動的に使用されます。この場合、メトリクス に必要なときに定義されるように、 メトリクス の初期値をログに記録してください。
画像、テーブル、音声などをログに記録する
メトリクス に加えて、プロット、ヒストグラム、テーブル、テキスト、および画像、ビデオ、オーディオ、3D などのメディアをログに記録できます。
データをログに記録する際の考慮事項は次のとおりです。
メトリクス をログに記録する頻度はどのくらいですか? オプションにする必要がありますか?
視覚化に役立つデータの種類は何ですか?
画像の場合は、サンプル予測、セグメンテーションマスクなどをログに記録して、時間の経過に伴う変化を確認できます。
テキストの場合は、サンプル予測のテーブルをログに記録して、後で調べることができます。
メディア、オブジェクト、プロットなどのログ記録の詳細 をご覧ください。
分散トレーニング
分散環境をサポートするフレームワークの場合は、次のいずれかの ワークフロー を採用できます。
どの プロセス が「メイン」 プロセス であるかを検出し、そこで wandb
のみを使用します。他の プロセス からの必要なデータは、最初にメイン プロセス にルーティングする必要があります(この ワークフロー を推奨します)。
すべての プロセス で wandb
を呼び出し、すべてに同じ一意の group
名を付けて自動的にグループ化します。
詳細については、分散トレーニング実験のログを記録する を参照してください。
モデルチェックポイントなどを記録する
フレームワークがモデルまたはデータセットを使用または生成する場合は、それらをログに記録して完全なトレーサビリティを実現し、W&B Artifacts を介して パイプライン 全体を wandb で自動的に監視できます。
Artifacts を使用する場合、ユーザーに次のことを定義させることは役立つかもしれませんが、必須ではありません。
モデルチェックポイントまたはデータセットをログに記録する機能(オプションにする場合)。
入力として使用される Artifact のパス/参照(ある場合)。たとえば、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" ) # local directory where the model weights are stored
aliases = ["best" , "epoch_10" ]
run. log_artifact(artifact, aliases= aliases)
カスタム エイリアス の作成方法については、カスタム エイリアス を作成する を参照してください。
出力 Artifacts は、任意の頻度(たとえば、エポックごと、500ステップごとなど)でログに記録でき、自動的に バージョン 管理されます。
学習済み モデル または データセット をログに記録および追跡する
学習済み モデル や データセット など、トレーニングへの入力として使用される Artifacts をログに記録できます。次のスニペットは、Artifact をログに記録し、上記のグラフに示すように、実行中の Run に入力として追加する方法を示しています。
artifact_input_data = wandb. Artifact(name= "flowers" , type= "dataset" )
artifact_input_data. add_file("flowers.npy" )
run. use_artifact(artifact_input_data)
Artifact をダウンロードする
Artifact(データセット、モデルなど)を再利用すると、wandb
はローカルにコピーをダウンロード(およびキャッシュ)します。
artifact = run. use_artifact("user/project/artifact:latest" )
local_path = artifact. download("./tmp" )
Artifacts は W&B の Artifacts セクションにあり、自動的に生成される エイリアス (latest
、v2
、v3
)またはログ記録時に手動で生成される エイリアス (best_accuracy
など)で参照できます。
(wandb.init
を介して)wandb
Run を作成せずに Artifact をダウンロードするには(たとえば、分散環境または単純な推論の場合)、代わりにwandb API で Artifact を参照できます。
artifact = wandb. Api(). artifact("user/project/artifact:latest" )
local_path = artifact. download()
詳細については、Artifacts のダウンロードと使用 を参照してください。
ハイパーパラメーター を チューニング する
ライブラリで W&B ハイパーパラメーター チューニング 、W&B Sweeps を活用したい場合は、ライブラリに追加することもできます。
高度な インテグレーション
高度な W&B インテグレーション がどのようなものかについては、次の インテグレーション を参照してください。ほとんどの インテグレーション はこれほど複雑ではありません。
2 - Azure OpenAI Fine-Tuning
W&B を使用して Azure OpenAI モデルを ファインチューン する方法。
イントロダクション
Microsoft Azure 上で GPT-3.5 または GPT-4 モデルをファインチューニングする際、W&B を使用することで、メトリクスの自動的なキャプチャや W&B の 実験管理 および評価 ツールによる体系的な評価が促進され、モデルのパフォーマンスを追跡、分析、改善できます。
前提条件
ワークフローの概要
1. ファインチューニングのセットアップ
Azure OpenAI の要件に従ってトレーニングデータを準備します。
Azure OpenAI でファインチューニングジョブを設定します。
W&B は、ファインチューニングプロセスを自動的に追跡し、メトリクスとハイパーパラメータをログに記録します。
2. 実験管理
ファインチューニング中、W&B は以下をキャプチャします。
トレーニング および 検証メトリクス
モデル ハイパーパラメータ
リソース使用率
トレーニング Artifacts
3. モデルの評価
ファインチューニング後、W&B Weave を使用して以下を行います。
参照データセットに対するモデル出力を評価します
異なるファインチューニング Runs 全体のパフォーマンスを比較します
特定のテストケースにおけるモデルの 振る舞い を分析します
データに基づいたモデル選択の意思決定を行います
実際の例
追加リソース
3 - Catalyst
Pytorch のフレームワークである Catalyst に W&B を統合する方法。
Catalyst は、再現性 、迅速な実験 、およびコードベースの再利用に重点を置いたディープラーニング のR&D用 PyTorch フレームワーク で、新しいものを創造できます。
Catalyst には、 パラメータ 、 メトリクス 、画像、およびその他の Artifacts を ログ 記録するための W&B インテグレーション が含まれています。
Python と Hydra を使用した例を含む、インテグレーション のドキュメント を確認してください。
インタラクティブな例
Catalyst と W&B の インテグレーション の動作を確認するには、example colab を実行してください。
4 - Cohere fine-tuning
W&B を使用して Cohere モデル を ファインチューン する方法。
Weights & Biases を使用すると、Cohere モデルのファイン チューニング メトリクスと設定をログに記録して、モデルのパフォーマンスを分析および理解し、同僚と結果を共有できます。
この Cohere のガイド には、ファイン チューニング run を開始する方法の完全な例が記載されています。また、Cohere API ドキュメントはこちら にあります。
Cohere のファイン チューニング result をログに記録する
Cohere のファイン チューニング ログを W&B Workspace に追加するには:
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 の詳細を含む config を作成する
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 config を渡す
),
),
)
作成した W&B project で、モデルのファイン チューニング トレーニング、検証メトリクス、およびハイパー パラメーターを表示します。
Runs を整理する
W&B の Runs は自動的に整理され、ジョブタイプ、ベース model、学習率、その他のハイパー パラメーターなどの任意の設定 parameter に基づいてフィルタリング/ソートできます。
さらに、Runs の名前を変更したり、メモを追加したり、タグを作成してグループ化したりできます。
リソース
5 - Databricks
W&B と Databricks を統合する方法。
W&B は、Databricks 環境で W&B Jupyter notebook のエクスペリエンスをカスタマイズすることにより、Databricks と統合されます。
Databricks の設定
クラスターに wandb をインストールする
クラスターの設定に移動し、クラスターを選択して、ライブラリ をクリックします。新規インストール をクリックし、PyPI を選択して、パッケージ wandb
を追加します。
認証の設定
W&B アカウントを認証するには、notebook がクエリできる 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
# https://app.wandb.ai/authorize から api_key を追加します
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() を使用しようとする notebook に必要なセットアップ (一時的):
import os
# これらは将来的には不要になります
os. environ["WANDB_ENTITY" ] = "my-entity"
os. environ["WANDB_PROJECT" ] = "my-project-that-exists"
6 - DeepChecks
DeepChecks と W&B の統合方法。
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()
DeepChecks テストスイート 全体 を Weights & Biases に ログ することもできます
import wandb
wandb. login()
# deepchecks から full_suite テスト をインポートします
from deepchecks.suites import full_suite
# DeepChecks テストスイート を作成して実行します
suite_result = full_suite(). run(... )
# thes の 結果 を wandb にプッシュします
# ここでは、必要な wandb.init の config と 引数 を渡すことができます
suite_result. to_wandb(project= "my-suite-project" , config= {"suite-name" : "full-suite" })
例
``この レポート は、DeepChecks と Weights & Biases を使用する威力を示しています
この Weights & Biases の インテグレーション に関する質問や問題がありますか? DeepChecks github repository で issue をオープンしてください。私たちがキャッチして回答します :)
7 - DeepChem
DeepChem ライブラリと W&B を統合する方法。
DeepChem library は、創薬、材料科学、化学、生物学における深層学習の利用を民主化するオープンソースのツールを提供します。この W&B の インテグレーション により、DeepChem を使用してモデルを トレーニング する際に、シンプルで使いやすい 実験管理 とモデルの チェックポイント が追加されます。
3 行のコードで DeepChem のログを記録
logger = WandbLogger(… )
model = TorchModel(… , wandb_logger= logger)
model. fit(… )
Report と Google Colab
W&B with DeepChem: Molecular Graph Convolutional Networks の記事で、W&B DeepChem インテグレーション を使用して生成されたチャートの例をご覧ください。
すぐにコードを試したい場合は、こちらの Google Colab をご覧ください。
Experiments の追跡
KerasModel または TorchModel タイプの DeepChem モデル用に W&B をセットアップします。
サインアップして API キー を作成する
API キー は、W&B へのマシンの認証を行います。API キー は、 ユーザー プロフィールから生成できます。
右上隅にある ユーザー プロフィール アイコンをクリックします。
[User Settings ] を選択し、[API Keys ] セクションまでスクロールします。
[Reveal ] をクリックします。表示された API キー をコピーします。API キー を非表示にするには、ページをリロードします。
wandb
ライブラリ をインストールしてログインする
wandb
ライブラリ をローカルにインストールしてログインするには:
Command Line
Python
Python notebook
WANDB_API_KEY
環境変数 を API キー に設定します。
export WANDB_API_KEY= <your_api_key>
wandb
ライブラリ をインストールしてログインします。
pip install wandb
wandb login
import wandb
wandb. login()
!pip install wandb
import wandb
wandb.login()
トレーニング および 評価 データ を 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
W&B と Docker を統合する方法。
Docker インテグレーション
W&B は、 コード が実行された Docker イメージ へのポインターを保存できます。これにより、以前の 実験 を実行された環境に正確に復元できます。 wandb ライブラリ は、この状態を永続化するために WANDB_DOCKER 環境変数 を探します。この状態を自動的に設定するいくつかのヘルパーを提供します。
ローカル開発
wandb docker
は、 dockerコンテナ を起動し、 wandb 環境変数 を渡し、 コード をマウントし、 wandb がインストールされていることを確認する コマンド です。デフォルトでは、この コマンド は TensorFlow、PyTorch、Keras、Jupyter がインストールされた Docker イメージ を使用します。同じ コマンド を使用して、独自の Docker イメージ を起動できます: wandb docker my/image:latest
。この コマンド は、現在の ディレクトリー を コンテナ の “/app” ディレクトリー にマウントします。これは “–dir” フラグで変更できます。
本番環境
wandb docker-run
コマンド は、 本番環境 の ワークロード 用に提供されています。これは nvidia-docker
のドロップイン代替となることを意図しています。これは docker run
コマンド へのシンプルなラッパーで、 認証情報 と WANDB_DOCKER 環境変数 を呼び出しに追加します。 “–runtime” フラグを渡さず、 nvidia-docker
がマシンで利用可能な場合、これにより ランタイム が nvidia に設定されます。
Kubernetes
Kubernetes で トレーニング の ワークロード を実行し、 k8s API が pod に公開されている場合(デフォルトの場合)。 wandb は、 Docker イメージ のダイジェストについて API にクエリを実行し、 WANDB_DOCKER 環境変数 を自動的に設定します。
復元
run が WANDB_DOCKER 環境変数 で計測されている場合、 wandb restore username/project:run_id
を呼び出すと、 コード を復元する新しいブランチをチェックアウトし、 トレーニング に使用された正確な Docker イメージ を元の コマンド で事前に設定して 起動 します。
9 - Farama Gymnasium
Farama Gymnasium と W&B を統合する方法。
Farama Gymnasium を使用している場合、gymnasium.wrappers.Monitor
で生成された環境の動画が自動的にログに記録されます。monitor_gym
キーワード 引数 を wandb.init
に True
に設定するだけです。
当社の Gymnasium インテグレーション は非常に軽量です。 gymnasium
からログに記録されている 動画ファイルの名前を確認 し、その名前を付けます。一致するものが見つからない場合は、"videos"
にフォールバックします。より詳細な制御が必要な場合は、いつでも手動で 動画をログに記録 できます。
CleanRL ライブラリ で Gymnasium を使用する方法の詳細については、こちらの Reports をご覧ください。
10 - fastai
fastai を使用してモデルをトレーニングする場合、W&B には WandbCallback
を使用した簡単なインテグレーションがあります。インタラクティブなドキュメントと例はこちら →
サインアップして API キーを作成する
API キーは、W&B に対してお客様のマシンを認証します。API キーは、ユーザー プロフィールから生成できます。
右上隅にあるユーザー プロフィール アイコンをクリックします。
ユーザー設定 を選択し、API キー セクションまでスクロールします。
表示 をクリックします。表示された API キーをコピーします。API キーを非表示にするには、ページをリロードします。
wandb
ライブラリをインストールしてログインする
wandb
ライブラリをローカルにインストールしてログインするには:
コマンドライン
Python
Python notebook
WANDB_API_KEY
環境変数 を API キーに設定します。
export WANDB_API_KEY= <your_api_key>
wandb
ライブラリをインストールしてログインします。
pip install wandb
wandb login
import wandb
wandb. login()
!pip install wandb
import wandb
wandb.login()
learner
または fit
メソッドに WandbCallback
を追加する
import wandb
from fastai.callback.wandb import *
# start logging a wandb run
wandb. init(project= "my_project" )
# To log only during one training phase
learn. fit(... , cbs= WandbCallback())
# To log continuously for all training phases
learn = learner(... , cbs= WandbCallback())
WandbCallback 引数
WandbCallback
は、次の引数を受け入れます。
Args
Description
log
モデルのログを記録するかどうか: gradients
、parameters
、all
または None
(デフォルト)。損失とメトリクスは常にログに記録されます。
log_preds
予測サンプルをログに記録するかどうか (デフォルトは True
)。
log_preds_every_epoch
エポックごとに予測をログに記録するか、最後にログに記録するか (デフォルトは False
)
log_model
モデルをログに記録するかどうか (デフォルトは False)。これには SaveModelCallback
も必要です
model_name
保存する file
の名前。SaveModelCallback
をオーバーライドします
log_dataset
False
(デフォルト)True
は、learn.dls.path で参照されるフォルダーをログに記録します。パスを明示的に定義して、ログに記録するフォルダーを参照できます。 注: サブフォルダー “models” は常に無視されます。
dataset_name
ログに記録されたデータセットの名前 (デフォルトは folder name
)。
valid_dl
予測サンプルに使用されるアイテムを含む DataLoaders
(デフォルトは learn.dls.valid
からのランダムなアイテム。
n_preds
ログに記録された予測の数 (デフォルトは 36)。
seed
ランダム サンプルを定義するために使用されます。
カスタム ワークフローでは、データセットとモデルを手動でログに記録できます。
log_dataset(path, name=None, metadata={})
log_model(path, name=None, metadata={})
注: サブフォルダー “models” はすべて無視されます。
分散トレーニング
fastai
は、コンテキスト マネージャー distrib_ctx
を使用して分散トレーニングをサポートします。W&B はこれを自動的にサポートし、すぐに使える Multi-GPU の Experiments を追跡できるようにします。
この最小限の例を確認してください。
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 )
例
10.1 - fastai v1
このドキュメントは fastai v1 用です。
現在のバージョンの fastai を使用している場合は、
fastai のページ を参照してください。
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
オプション
WandbCallback()
クラス は、多数のオプションをサポートしています。
キーワード 引数
デフォルト
説明
learn
N/A
フック する fast.ai の学習器。
save_model
True
各ステップで改善された場合、モデルを保存します。トレーニング の最後に最高のモデルもロードします。
mode
auto
min
、max
、または auto
: monitor
で指定された トレーニング メトリクス をステップ間で比較する方法。
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 キーは、ユーザープロフィールから生成できます。
右上隅にあるユーザープロフィールアイコンをクリックします。
[User Settings ]を選択し、[API Keys ]セクションまでスクロールします。
[Reveal ]をクリックします。表示された API キーをコピーします。API キーを非表示にするには、ページをリロードします。
wandb
ライブラリをインストールしてログインする
wandb
ライブラリをローカルにインストールしてログインするには:
Command Line
Python
Python notebook
WANDB_API_KEY
環境変数 を API キーに設定します。
export WANDB_API_KEY= <your_api_key>
wandb
ライブラリをインストールしてログインします。
pip install wandb
wandb login
import wandb
wandb. login()
!pip install wandb
import wandb
wandb.login()
W&B を初めて使用する場合は、クイックスタート を確認してください。
プロジェクトに名前を付ける
W&B の Project とは、関連する run からログに記録されたすべてのチャート、データ、およびモデルが保存される場所です。プロジェクトに名前を付けると、作業を整理し、単一のプロジェクトに関するすべての情報を 1 か所にまとめて管理できます。
run をプロジェクトに追加するには、WANDB_PROJECT
環境変数をプロジェクト名に設定するだけです。WandbCallback
は、このプロジェクト名の環境変数を取得し、run の設定時に使用します。
Command Line
Python
Python notebook
WANDB_PROJECT= amazon_sentiment_analysis
import os
os. environ["WANDB_PROJECT" ]= "amazon_sentiment_analysis"
%env WANDB_PROJECT=amazon_sentiment_analysis
Trainer
を初期化する 前に 、必ずプロジェクト名を設定してください。
プロジェクト名が指定されていない場合、プロジェクト名はデフォルトで huggingface
になります。
トレーニングの run を W&B に記録する
コード内またはコマンドラインで Trainer
のトレーニング引数を定義する際に 最も重要なステップ は、W&B でのロギングを有効にするために、report_to
を "wandb"
に設定することです。
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(
# その他の args と kwargs
report_to= "wandb" , # W&B へのロギングを有効にする
run_name= "bert-base-high-lr" , # W&B run の名前 (オプション)
logging_steps= 1 , # W&B へのロギング頻度
)
trainer = Trainer(
# その他の args と kwargs
args= args, # トレーニングの引数
)
trainer. train() # トレーニングを開始して W&B にログを記録する
TensorFlow を使用していますか?PyTorch 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
: モデルをアップロードしません。
Command Line
Python
Python notebook
WANDB_LOG_MODEL= "checkpoint"
import os
os. environ["WANDB_LOG_MODEL" ] = "checkpoint"
%env WANDB_LOG_MODEL="checkpoint"
これから初期化する Transformers Trainer
はすべて、モデルを W&B プロジェクトにアップロードします。ログに記録したモデルチェックポイントは、Artifacts UI で表示でき、完全なモデルリネージが含まれています (UI のモデルチェックポイントの例は こちら を参照してください)。
デフォルトでは、
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 を使用すると、タスクごとに最適なモデルを整理したり、モデルのライフサイクルを管理したり、ML ライフサイクル全体を追跡および監査したり、ダウンストリームアクションを 自動化 したりできます。
モデル Artifact をリンクするには、Registry を参照してください。
トレーニング中に評価出力を可視化する
トレーニング中または評価中にモデル出力を可視化することは、モデルのトレーニング方法を実際に理解するために不可欠なことがよくあります。
Transformers Trainer のコールバックシステムを使用すると、モデルのテキスト生成出力やその他の予測などの追加の役立つデータを W&B Tables に W&B に記録できます。
トレーニング中に評価出力を記録して、次のような 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
最適なモデルを保存するにはどうすればよいですか?
load_best_model_at_end=True
で TrainingArguments
を Trainer
に渡すと、W&B は最適なパフォーマンスのモデルチェックポイントを Artifacts に保存します。
モデルチェックポイントを Artifacts として保存する場合は、Registry に昇格させることができます。Registry では、次のことができます。
ML タスクごとに最適なモデルバージョンを整理します。
モデルを一元化してチームと共有します。
本番環境用にモデルをステージングするか、詳細な評価のためにブックマークします。
ダウンストリーム CI/CD プロセスをトリガーします。
保存されたモデルをロードするにはどうすればよいですか?
WANDB_LOG_MODEL
を使用してモデルを W&B Artifacts に保存した場合は、追加のトレーニングまたは推論を実行するためにモデルの重みをダウンロードできます。以前に使用したのと同じ Hugging Face アーキテクチャにロードするだけです。
# 新しい run を作成する
with wandb. init(project= "amazon_sentiment_analysis" ) as run:
# Artifact の名前とバージョンを渡す
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
引数として使用し、resume_from_checkpoint=True
を Trainer
に渡すことで、トレーニングを再開することもできます。
last_run_id = "xxxxxxxx" # wandb ワークスペースから run_id を取得する
# run_id から wandb run を再開する
with wandb. init(
project= os. environ["WANDB_PROJECT" ],
id= last_run_id,
resume= "must" ,
) as run:
# Artifact を 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 に記録する方法について説明します。Trainer コールバックの on_evaluate
メソッドを使用して、すべての eval_steps
を実行します。
ここでは、tokenizer を使用してモデル出力から予測とラベルをデコードする 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):
"""Custom WandbCallback to log model predictions during training.
This callback logs model predictions and labels to a wandb.Table at each
logging step during training. It allows to visualize the
model predictions as the training progresses.
Attributes:
trainer (Trainer): The Hugging Face Trainer instance.
tokenizer (AutoTokenizer): The tokenizer associated with the model.
sample_dataset (Dataset): A subset of the validation dataset
for generating predictions.
num_samples (int, optional): Number of samples to select from
the validation dataset for generating predictions. Defaults to 100.
freq (int, optional): Frequency of logging. Defaults to 2.
"""
def __init__(self, trainer, tokenizer, val_dataset, num_samples= 100 , freq= 2 ):
"""Initializes the WandbPredictionProgressCallback instance.
Args:
trainer (Trainer): The Hugging Face Trainer instance.
tokenizer (AutoTokenizer): The tokenizer associated
with the model.
val_dataset (Dataset): The validation dataset.
num_samples (int, optional): Number of samples to select from
the validation dataset for generating predictions.
Defaults to 100.
freq (int, optional): Frequency of logging. Defaults to 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)
# control the frequency of logging by logging the predictions
# every `freq` epochs
if state. epoch % self. freq == 0 :
# generate predictions
predictions = self. trainer. predict(self. sample_dataset)
# decode predictions and labels
predictions = decode_predictions(self. tokenizer, predictions)
# add predictions to a wandb.Table
predictions_df = pd. DataFrame(predictions)
predictions_df["epoch" ] = state. epoch
records_table = self. _wandb. Table(dataframe= predictions_df)
# log the table to 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 Artifact として記録します (デフォルトでは false
)
false
(デフォルト): モデルチェックポイントなしcheckpoint
: チェックポイントは args.save_steps ごとにアップロードされます (Trainer の TrainingArguments で設定)。end
: 最終的なモデルチェックポイントはトレーニングの最後にアップロードされます。
WANDB_WATCH
モデルの勾配、パラメーター、またはそのどちらもログに記録するかどうかを設定します
false
(デフォルト): 勾配またはパラメーターのロギングなしgradients
: 勾配のヒストグラムをログに記録しますall
: 勾配とパラメーターのヒストグラムをログに記録します
WANDB_DISABLED
ロギングを完全にオフにするには true
に設定します (デフォルトでは false
)
WANDB_SILENT
wandb によって出力される出力を抑制するには true
に設定します (デフォルトでは 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" ,
)
その他のリソース
以下は、Transformer と W&B に関連する 6 つの記事です。
Hugging Face Transformers のハイパーパラメーター最適化
Hugging Face Transformers のハイパーパラメーター最適化のための 3 つの戦略 (グリッド検索、ベイズ最適化、Population Based Training) が比較されます。
Hugging Face transformers から標準的な uncased BERT モデルを使用し、SuperGLUE ベンチマークから RTE データセットでファインチューニングしたいと考えています。
結果は、Population Based Training が Hugging Face transformer モデルのハイパーパラメーター最適化に最も効果的なアプローチであることを示しています。
完全なレポートは こちら をお読みください。
Hugging Tweets: ツイートを生成するモデルをトレーニングする
この記事では、著者は、誰かのツイートで学習済みの GPT2 HuggingFace Transformer モデルを 5 分でファインチューニングする方法を示しています。
このモデルは、ツイートのダウンロード、データセットの最適化、初期実験、ユーザー間の損失の比較、モデルのファインチューニングというパイプラインを使用しています。
完全なレポートは こちら をお読みください。
Hugging Face BERT および WB を使用した文分類
この記事では、自然言語処理における最近の画期的な進歩の力を活用して、文分類子を作成します。ここでは、NLP への転移学習の応用例に焦点を当てます。
単一文分類には、言語的許容度 (CoLA) データセットを使用します。これは、2018 年 5 月に初めて公開された、文法的に正しいか正しくないかというラベルが付けられた文のセットです。
Google の BERT を使用して、さまざまな NLP タスクで最小限の労力で高性能モデルを作成します。
完全なレポートは こちら をお読みください。
Hugging Face モデルのパフォーマンスを追跡するためのステップバイステップガイド
W&B と Hugging Face transformers を使用して、GLUE ベンチマークで DistilBERT (BERT より 40% 小さいが、BERT の精度の 97% を保持する Transformer) をトレーニングします。
GLUE ベンチマークは、NLP モデルをトレーニングするための 9 つのデータセットとタスクのコレクションです。
完全なレポートは こちら をお読みください。
HuggingFace での早期停止の例
早期停止の正規化を使用して Hugging Face Transformer をファインチューニングは、PyTorch または TensorFlow でネイティブに行うことができます。
TensorFlow での EarlyStopping コールバックの使用は、tf.keras.callbacks.EarlyStopping
コールバックを使用すると簡単です。
PyTorch では、既製の早期停止メソッドはありませんが、GitHub Gist で利用できる作業中の早期停止フックがあります。
完全なレポートは こちら をお読みください。
カスタムデータセットで Hugging Face Transformers をファインチューンする方法
カスタム IMDB データセットでセンチメント分析 (バイナリ分類) 用に DistilBERT transformer をファインチューンします。
完全なレポートは こちら をお読みください。
ヘルプの入手または機能のリクエスト
Hugging Face W&B integration に関する問題、質問、または機能のリクエストについては、Hugging Face フォーラムのこのスレッド に投稿するか、Hugging Face Transformers GitHub repo で issue をオープンしてください。
12 - Hugging Face Diffusers
Hugging Face Diffusers は、画像、音声、さらには分子の3D構造を生成するための、最先端の学習済み拡散モデルのための頼りになるライブラリです。Weights & Biases のインテグレーションは、その使いやすさを損なうことなく、インタラクティブな集中 ダッシュボードに、豊富で柔軟な 実験管理、メディアの 可視化、パイプライン アーキテクチャ、および 設定管理を追加します。
たった2行で次世代のログ記録
わずか2行のコードを含めるだけで、プロンプト、ネガティブプロンプト、生成されたメディア、および 実験 に関連付けられた config をすべて記録します。以下は、ログ記録を開始するための2行のコードです。
# import the autolog function
from wandb.integration.diffusers import autolog
# call the autolog before calling the pipeline
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 を初期化し、サポートされているすべての パイプライン 呼び出し からの入力と出力を自動的に追跡します。
wandb.init()
に必要な パラメータ の 辞書 を受け入れる init
パラメータ を使用して、autolog()
関数を呼び出すことができます。
autolog()
を呼び出すと、Weights & Biases の run が初期化され、サポートされているすべての パイプライン 呼び出し からの入力と出力が自動的に追跡されます。
各 パイプライン 呼び出しは、ワークスペース 内の独自の テーブル に追跡され、パイプライン 呼び出しに関連付けられた config は、その run の config 内の ワークフロー のリストに追加されます。
プロンプト、ネガティブプロンプト、および生成されたメディアは、wandb.Table
に記録されます。
シードや パイプライン アーキテクチャ を含む、実験 に関連付けられたその他すべての config は、run の config セクションに保存されます。
各 パイプライン 呼び出しで生成されたメディアは、run の メディア パネル にも記録されます。
サポートされている パイプライン 呼び出しのリストは、[こちら](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) で issue をオープンしてください。
例
Autologging
以下は、動作中の autolog の簡単な エンドツーエンド の例です。
import torch
from diffusers import DiffusionPipeline
# import the autolog function
from wandb.integration.diffusers import autolog
# call the autolog before calling the pipeline
autolog(init= dict(project= "diffusers_logging" ))
# Initialize the diffusion pipeline
pipeline = DiffusionPipeline. from_pretrained(
"stabilityai/stable-diffusion-2-1" , torch_dtype= torch. float16
). to("cuda" )
# Define the prompts, negative prompts, and seed.
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 )
# call the pipeline to generate the images
images = pipeline(
prompt,
negative_prompt= negative_prompt,
num_images_per_prompt= 2 ,
generator= generator,
)
import torch
from diffusers import DiffusionPipeline
import wandb
# import the autolog function
from wandb.integration.diffusers import autolog
# call the autolog before calling the pipeline
autolog(init= dict(project= "diffusers_logging" ))
# Initialize the diffusion pipeline
pipeline = DiffusionPipeline. from_pretrained(
"stabilityai/stable-diffusion-2-1" , torch_dtype= torch. float16
). to("cuda" )
# Define the prompts, negative prompts, and seed.
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 )
# call the pipeline to generate the images
images = pipeline(
prompt,
negative_prompt= negative_prompt,
num_images_per_prompt= 2 ,
generator= generator,
)
# Finish the experiment
wandb. finish()
単一の 実験 の結果:
複数の 実験 の結果:
実験 の config:
パイプライン を呼び出した後、IPython ノートブック 環境でコードを実行する場合は、
wandb.finish()
を明示的に呼び出す必要があります。これは、Python スクリプトを実行する場合は必要ありません。
複数 パイプライン ワークフロー の追跡
このセクションでは、StableDiffusionXLPipeline
によって生成された潜在空間が対応するリファイナーによって改良される、典型的な Stable Diffusion XL + Refiner ワークフロー での autolog を示します。
import torch
from diffusers import StableDiffusionXLImg2ImgPipeline, StableDiffusionXLPipeline
from wandb.integration.diffusers import autolog
# initialize the SDXL base pipeline
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()
# initialize the SDXL refiner pipeline
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"
# Make the experiment reproducible by controlling randomness.
# The seed would be automatically logged to WandB.
seed = 42
generator_base = torch. Generator(device= "cuda" ). manual_seed(seed)
generator_refiner = torch. Generator(device= "cuda" ). manual_seed(seed)
# Call WandB Autolog for Diffusers. This would automatically log
# the prompts, generated images, pipeline architecture and all
# associated experiment configs to Weights & Biases, thus making your
# image generation experiments easy to reproduce, share and analyze.
autolog(init= dict(project= "sdxl" ))
# Call the base pipeline to generate the latents
image = base_pipeline(
prompt= prompt,
negative_prompt= negative_prompt,
output_type= "latent" ,
generator= generator_base,
). images[0 ]
# Call the refiner pipeline to generate the refined image
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
# initialize the SDXL base pipeline
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()
# initialize the SDXL refiner pipeline
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"
# Make the experiment reproducible by controlling randomness.
# The seed would be automatically logged to WandB.
seed = 42
generator_base = torch. Generator(device= "cuda" ). manual_seed(seed)
generator_refiner = torch. Generator(device= "cuda" ). manual_seed(seed)
# Call WandB Autolog for Diffusers. This would automatically log
# the prompts, generated images, pipeline architecture and all
# associated experiment configs to Weights & Biases, thus making your
# image generation experiments easy to reproduce, share and analyze.
autolog(init= dict(project= "sdxl" ))
# Call the base pipeline to generate the latents
image = base_pipeline(
prompt= prompt,
negative_prompt= negative_prompt,
output_type= "latent" ,
generator= generator_base,
). images[0 ]
# Call the refiner pipeline to generate the refined image
image = refiner_pipeline(
prompt= prompt,
negative_prompt= negative_prompt,
image= image[None , :],
generator= generator_refiner,
). images[0 ]
# Finish the experiment
wandb. finish()
Stable Diffisuion 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
これらの変更を示すために、このページでは、GSM8k Benchmarks で pass@1
の SoTA 結果を達成するために、数学 データセット で LLM を微調整します。
データセット を準備する
Hugging Face AutoTrain は、適切に機能するために、CSV カスタム データセット が特定の形式になっていることを想定しています。
トレーニング ファイルには、トレーニングで使用する text
列が含まれている必要があります。最良の結果を得るには、text
列のデータが ### Human: Question?### Assistant: Answer.
形式に準拠している必要があります。timdettmers/openassistant-guanaco
で素晴らしい例を確認してください。
ただし、MetaMathQA dataset には、query
、response
、および type
列が含まれています。最初に、この データセット を前処理します。type
列を削除し、query
列と response
列の内容を ### Human: Query?### Assistant: Response.
形式の新しい text
列に結合します。トレーニングでは、結果の データセット rishiraj/guanaco-style-metamath
を使用します。
autotrain
を使用してトレーニングする
コマンドラインまたは ノートブック から autotrain
advanced を使用してトレーニングを開始できます。--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 の詳細については、[こちら (https://huggingface.co/docs/accelerate/main/en/usage_guides/tracking) のドキュメント] を参照してください。
Accelerate でログ記録を開始する
Accelerate と Weights & Biases を使い始めるには、以下の疑似コードに従ってください。
from accelerate import Accelerator
# Tell the Accelerator object to log with wandb
accelerator = Accelerator(log_with= "wandb" )
# Initialise your wandb run, passing wandb parameters and any config information
accelerator. init_trackers(
project_name= "my_project" ,
config= {"dropout" : 0.1 , "learning_rate" : 1e-2 }
init_kwargs= {"wandb" : {"entity" : "my-wandb-team" }}
)
...
# Log to wandb by calling `accelerator.log`, `step` is optional
accelerator. log({"train_loss" : 1.12 , "valid_loss" : 0.8 }, step= global_step)
# Make sure that the wandb tracker finishes correctly
accelerator. end_training()
さらに詳しく説明すると、次のことが必要です。
Accelerator クラスを初期化するときに log_with="wandb"
を渡します。
init_trackers
メソッドを呼び出して、以下を渡します。
project_name
を介したプロジェクト名
ネストされた dict を介して wandb.init
に渡すパラメータ init_kwargs
config
を介して、wandb の run に記録するその他の実験設定情報
.log
メソッドを使用して Weigths & Biases にログを記録します。step
引数はオプションです。
トレーニングが終了したら、.end_training
を呼び出します。
W&B tracker へのアクセス
W&B tracker にアクセスするには、Accelerator.get_tracker()
メソッドを使用します。tracker の .name
属性に対応する文字列を渡すと、main
プロセスの tracker が返されます。
wandb_tracker = accelerator. get_tracker("wandb" )
そこから、通常どおり wandb の run オブジェクトを操作できます。
wandb_tracker. log_artifact(some_artifact_to_log)
Accelerate に組み込まれた Trackers は、正しいプロセスで自動的に実行されるため、Tracker がメインプロセスでのみ実行されるように設計されている場合、自動的に実行されます。
Accelerate のラッピングを完全に削除したい場合は、次の方法で同じ結果を得ることができます。
wandb_tracker = accelerator. get_tracker("wandb" , unwrap= True )
with accelerator. on_main_process:
wandb_tracker. log_artifact(some_artifact_to_log)
Accelerate の記事
以下は、楽しめるかもしれない Accelerate の記事です。
Weights & Biases でスーパーチャージされた HuggingFace Accelerate
この記事では、HuggingFace Accelerate が提供するものと、結果を Weights & Biases に記録しながら、分散トレーニングと評価をどれだけ簡単に行えるかを見ていきます。
完全なレポートは こちら をお読みください。
15 - Hydra
W&B と 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
に追加の settings パラメータ を追加して、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}
sweep を呼び出します。
wandb sweep sweep.yaml` \
W&B は プロジェクト 内に sweep を自動的に作成し、sweep を実行する各マシンで実行する wandb agent
コマンド を返します。
Hydra の デフォルト に存在しない パラメータ を渡す
Hydra は、 コマンド の前に +
を使用して、デフォルト の構成ファイルに存在しない追加の パラメータ を コマンドライン から渡すことをサポートしています。たとえば、次のように呼び出すだけで、いくつかの 値 を持つ追加の パラメータ を渡すことができます。
$ python program.py +experiment= some_experiment
Hydra Experiments を構成するときと同様に、このような +
構成を スイープ することはできません。これを回避するには、デフォルト の空のファイルで experiment パラメータ を初期化し、W&B Sweep を使用して、呼び出しごとにこれらの空の構成をオーバーライドします。詳細については、この W&B Report をお読みください。**
16 - Keras
Keras コールバック
W&B には Keras 用の 3 つのコールバックがあり、wandb
v0.13.4 から利用できます。従来の WandbCallback
については、下にスクロールしてください。
WandbMetricsLogger
: 実験管理 には、このコールバックを使用します。トレーニングと検証のメトリクスをシステムメトリクスとともに Weights & Biases に記録します。
WandbModelCheckpoint
: モデルのチェックポイントを Weight 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): 学習率スケジューラを使用している場合に、いくつかの initial_epoch からトレーニングを再開するときに学習率を正しく記録するには、この引数を使用します。これは step_size * initial_step として計算できます。デフォルトは 0 です。
WandbModelCheckpoint
を使用してモデルをチェックポイントする
WandbModelCheckpoint
コールバックを使用して、Keras モデル (SavedModel
形式) またはモデルの重みを定期的に保存し、モデルの バージョン管理 用の wandb.Artifact
として 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
、または max
): val_acc
の場合は max
に、val_loss
の場合は min
に設定します。
save_freq
(“epoch” または int): 「epoch」を使用する場合、コールバックは各エポックの後にモデルを保存します。整数を使用する場合、コールバックはこの数のバッチの終わりにモデルを保存します。val_acc
や val_loss
などの検証メトリクスを監視する場合、これらのメトリクスはエポックの最後にのみ使用できるため、save_freq
を “epoch” に設定する必要があることに注意してください。
options
(str): save_weights_only
が true の場合はオプションの tf.train.CheckpointOptions
オブジェクト、save_weights_only
が false の場合はオプションの 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
インスタンスを作成します。
データと予測の Tables を 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
の列名のリスト
メモリフットプリントの詳細
on_train_begin
メソッドが呼び出されると、data_table
を W&B に記録します。W&B Artifact としてアップロードされると、data_table_ref
クラス変数を使用してアクセスできるこのテーブルへの参照を取得します。data_table_ref
は、self.data_table_ref[idx][n]
のようにインデックスを付けることができる 2D リストです。ここで、idx
は行番号で、n
は列番号です。以下の例で使用法を見てみましょう。
コールバックをカスタマイズする
on_train_begin
メソッドまたは on_epoch_end
メソッドをオーバーライドして、よりきめ細かい制御を行うことができます。N
バッチ後にサンプルを記録する場合は、on_train_batch_end
メソッドを実装できます。
💡
WandbEvalCallback
を継承してモデル予測の可視化のためのコールバックを実装していて、明確にする必要がある場合や修正する必要がある場合は、
issue を開いてお知らせください。
WandbCallback
[レガシー]
W&B ライブラリの 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()]
)
短いビデオ 1 分以内に Keras と Weights & Biases を使い始める をご覧ください。
より詳細なビデオについては、Weights & Biases と Keras を統合する をご覧ください。Colab Jupyter Notebook を確認できます。
WandbCallback
クラスは、監視するメトリックの指定、重みと勾配の追跡、training_data と validation_data での予測の記録など、さまざまなログ構成オプションをサポートしています。
詳細については、keras.WandbCallback
のリファレンスドキュメント を確認してください。
WandbCallback
Keras によって収集されたメトリクスから履歴データを自動的に記録します: 損失と keras_model.compile()
に渡されたもの。
monitor
および mode
属性で定義されているように、「最良」のトレーニングステップに関連付けられた run の概要メトリクスを設定します。これはデフォルトで、最小の val_loss
を持つエポックになります。WandbCallback
はデフォルトで、最良の epoch
に関連付けられたモデルを保存します。
オプションで勾配とパラメーターのヒストグラムを記録します。
オプションで、wandb が可視化するためにトレーニングデータと検証データを保存します。
WandbCallback
リファレンス
引数
monitor
(str) 監視するメトリックの名前。デフォルトは val_loss
。
mode
(str) {auto
、min
、max
} のいずれか。min
- モニターが最小化されたときにモデルを保存します max
- モニターが最大化されたときにモデルを保存します auto
- モデルを保存するタイミングを推測しようとします (デフォルト)。
save_model
True - モニターが以前のエポックをすべて上回ったときにモデルを保存します 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)
を返す必要があります。wandb が特定のデータ例を可視化するには、validate_data
またはジェネレーターのいずれかを設定する必要があります。
validation_steps
(validation_data
がジェネレーターの場合、完全な検証セットに対してジェネレーターを実行するステップ数 (int)。
labels
(list) wandb でデータを可視化している場合、このラベルのリストは、複数のクラスを持つ分類子を構築している場合に、数値出力を理解可能な文字列に変換します。バイナリ分類子の場合、2 つのラベルのリスト [false のラベル
、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 の場合、各エポックで検証データとモデルの予測を含む Table を保存します。詳細については、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
を提供する場合、検証データの Table は作成されません。代わりに、各予測を TableLinkMixin
で表される行に関連付けます。行キーのリストを取得するには、Table.get_index()
を使用します。
validation_row_processor
(Callable) 検証データに適用する関数。通常はデータを可視化するために使用されます。この関数は、ndx
(int) と row
(dict) を受け取ります。モデルに単一の入力がある場合、row["input"]
には行の入力データが含まれます。それ以外の場合は、入力スロットの名前が含まれます。適合関数が単一のターゲットを受け取る場合、row["target"]
には行のターゲットデータが含まれます。それ以外の場合は、出力スロットの名前が含まれます。たとえば、入力データが単一の配列である場合、データを画像として可視化するには、プロセッサとして 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 Pipelines (kfp)
W&B と Kubeflow Pipelines を統合する方法。
Kubeflow Pipelines (kfp) は、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
ライブラリをローカルにインストールしてログインするには:
コマンドライン
Python
Python notebook
API キーに WANDB_API_KEY
環境変数 を設定します。
export WANDB_API_KEY= <your_api_key>
wandb
ライブラリをインストールしてログインします。
pip install wandb
wandb login
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 でログに記録された Kubeflow Pipelines UI の Run をクリックします。
[ Input/Output
] タブと [ ML Metadata
] タブで、入力と出力に関する詳細を確認します。
[ Visualizations
] タブから W&B Web アプリを表示します。
Web アプリ UI 経由
Web アプリ UI には、Kubeflow Pipelines の [ Visualizations
] タブと同じコンテンツがありますが、より広いスペースがあります。Web アプリ UI の詳細はこちら をご覧ください。
パブリック API 経由 (プログラムによるアクセス)
Kubeflow Pipelines から W&B へのコンセプトマッピング
Kubeflow Pipelines のコンセプトから W&B へのマッピングを次に示します。
きめ細かいロギング
ロギングをより細かく制御したい場合は、コンポーネントに 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())
... # do training
18 - LightGBM
W&B で ツリー を追跡しましょう。
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 と W&B を統合する方法。
概要
Metaflow は、ML ワークフローを作成および実行するために Netflix によって作成されたフレームワークです。
このインテグレーションを使用すると、Metaflow の ステップとフロー にデコレータを適用して、パラメータと Artifacts を自動的に W&B にログ記録できます。
ステップをデコレートすると、そのステップ内の特定の種類に対するログ記録をオフまたはオンにします。
フローをデコレートすると、フロー内のすべてのステップに対するログ記録をオフまたはオンにします。
クイックスタート
サインアップして APIキー を作成する
APIキー は、お使いのマシンを W&B に対して認証します。APIキー は、ユーザープロファイルから生成できます。
右上隅にあるユーザープロファイルアイコンをクリックします。
[User Settings ] を選択し、[API Keys ] セクションまでスクロールします。
[Reveal ] をクリックします。表示された APIキー をコピーします。APIキー を非表示にするには、ページをリロードします。
wandb
ライブラリをインストールしてログインする
wandb
ライブラリをローカルにインストールしてログインするには:
コマンドライン
Python
Python notebook
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
内のすべての Datasets と Models がログ記録されます。
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 -> upload as dataset
self. model_file = torch. load(... ) # nn.Module -> upload as model
self. next(self. transform)
フローをデコレートすることは、すべての構成ステップをデフォルトでデコレートすることと同じです。
この場合、WandbExampleFlow
のすべてのステップは、Datasets と Models をデフォルトでログ記録します。これは、各ステップを @wandb_log(datasets=True, models=True)
でデコレートするのと同じです。
from wandb.integration.metaflow import wandb_log
@wandb_log (datasets= True , models= True ) # decorate all @step
class WandbExampleFlow (FlowSpec):
@step
def start (self):
self. raw_df = pd. read_csv(... ). # pd.DataFrame -> upload as dataset
self. model_file = torch. load(... ) # nn.Module -> upload as model
self. next(self. transform)
フローをデコレートすることは、すべてのステップをデフォルトでデコレートすることと同じです。つまり、後で別の @wandb_log
でステップをデコレートすると、フローレベルのデコレーションがオーバーライドされます。
この例では:
start
と mid
は Datasets と Models の両方をログ記録します。
end
は Datasets も Models もログ記録しません。
from wandb.integration.metaflow import wandb_log
@wandb_log (datasets= True , models= True ) # same as decorating start and mid
class WandbExampleFlow (FlowSpec):
# this step will log datasets and models
@step
def start (self):
self. raw_df = pd. read_csv(... ). # pd.DataFrame -> upload as dataset
self. model_file = torch. load(... ) # nn.Module -> upload as model
self. next(self. mid)
# this step will also log datasets and models
@step
def mid (self):
self. raw_df = pd. read_csv(... ). # pd.DataFrame -> upload as dataset
self. model_file = torch. load(... ) # nn.Module -> upload as model
self. next(self. end)
# this step is overwritten and will NOT log datasets OR models
@wandb_log (datasets= False , models= False )
@step
def end (self):
self. raw_df = pd. read_csv(... ).
self. model_file = torch. load(... )
プログラムでデータにアクセスする
キャプチャした情報には、次の 3 つの方法でアクセスできます。wandb
クライアントライブラリ を使用してログ記録されている元の Python プロセス内、web アプリ UI を使用、または Public API を使用してプログラムでアクセスできます。Parameter
は W&B の config
に保存され、Overview タブ にあります。datasets
、models
、および others
は W&B Artifacts に保存され、Artifacts タブ にあります。Base python タイプは W&B の summary
辞書に保存され、Overview タブにあります。API を使用してこの情報を外部からプログラムで取得する方法の詳細については、Public API のガイド を参照してください。
クイックリファレンス
データ
クライアントライブラリ
UI
Parameter(...)
wandb.config
Overview タブ, Config
datasets
、models
、others
wandb.use_artifact("{var_name}:latest")
Artifacts タブ
Base Python タイプ (dict
、list
、str
など)
wandb.summary
Overview タブ, Summary
wandb_log
kwargs
kwarg
オプション
datasets
True
: データセットであるインスタンス変数をログに記録しますFalse
models
True
: モデルであるインスタンス変数をログに記録しますFalse
others
True
: シリアル化可能なものをピクルとしてログに記録しますFalse
settings
wandb.Settings(…)
: このステップまたはフローに独自の wandb
設定を指定しますNone
: wandb.Settings()
を渡すのと同じですデフォルトでは、以下の場合:
settings.run_group
が None
の場合、{flow_name}/{run_id}
に設定されますsettings.run_job_type
が None
の場合、{run_job_type}/{step_name}
に設定されます
よくある質問
実際に何をログに記録しますか?すべてのインスタンス変数とローカル変数をログに記録しますか?
wandb_log
はインスタンス変数のみをログに記録します。ローカル変数は決してログに記録されません。これは、不要なデータのログ記録を回避するのに役立ちます。
どのデータ型がログに記録されますか?
現在、これらのタイプをサポートしています。
ログ設定
タイプ
デフォルト (常にオン)
dict, list, set, str, int, float, bool
datasets
models
nn.Module
sklearn.base.BaseEstimator
others
ログ記録の振る舞いを構成するにはどうすればよいですか?
変数の種類
振る舞い
例
データ型
インスタンス
自動ログ記録
self.accuracy
float
インスタンス
datasets=True
の場合にログ記録
self.df
pd.DataFrame
インスタンス
datasets=False
の場合はログ記録されません
self.df
pd.DataFrame
ローカル
決してログ記録されない
accuracy
float
ローカル
決してログ記録されない
df
pd.DataFrame
Artifacts のリネージは追跡されますか?
はい。Artifact がステップ A の出力であり、ステップ B の入力である場合、リネージ DAG が自動的に構築されます。
この振る舞いの例については、この notebook と対応する W&B Artifacts ページ を参照してください。
20 - MMEngine
MMEngine は OpenMMLab によって開発された、PyTorch をベースとした ディープラーニング モデルのトレーニングを行うための基盤 ライブラリです。MMEngine は OpenMMLab アルゴリズム ライブラリの次世代トレーニング アーキテクチャーを実装し、OpenMMLab 内の 30 以上のアルゴリズム ライブラリに統一された実行基盤を提供します。そのコア コンポーネントには、トレーニング エンジン、評価エンジン、およびモジュール管理が含まれます。
Weights and Biases は、専用の WandbVisBackend
を介して MMEngine に直接統合されており、以下のことが可能です。
トレーニング および 評価 メトリクスを ログに記録する。
実験 の config を ログに記録および管理する。
グラフ、画像、スカラーなどの追加レコードを ログに記録する。
はじめに
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
を使用する典型的な ワークフロー を示します。
可視化 config から visualizer
を定義します。
from mmengine.visualization import Visualizer
# 可視化 config を定義します
visualization_cfg = dict(
name= "wandb_visualizer" ,
vis_backends= [
dict(
type= 'WandbVisBackend' ,
init_kwargs= dict(project= "mmengine" ),
)
],
save_dir= "runs/wandb"
)
# 可視化 config から 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()
OpenMMLab コンピュータビジョン ライブラリで WandbVisBackend
を使用する
WandbVisBackend
は、MMDetection などの OpenMMLab コンピュータビジョン ライブラリ で 実験 を追跡するためにも簡単に使用できます。
# デフォルトの ランタイム config からベース config を継承します
_base_ = ["../_base_/default_runtime.py" ]
# `WandbVisBackend` config 辞書を、
# ベース config からの `visualizer` の `vis_backends` に割り当てます
_base_. visualizer. vis_backends = [
dict(
type= 'WandbVisBackend' ,
init_kwargs= {
'project' : 'mmdet' ,
'entity' : 'geekyrakshit'
},
),
]
21 - MMF
Meta AI の MMF と W&B を統合する方法。
Meta AI の MMF ライブラリの WandbLogger
クラスを使用すると、Weights & Biases でトレーニング/検証 メトリクス、システム (GPU および CPU) メトリクス、モデル チェックポイント、および設定 パラメータをログに記録できます。
現在の機能
MMF の WandbLogger
では、現在、次の機能がサポートされています。
トレーニングと検証の メトリクス
経時的な学習率
W&B Artifacts へのモデル チェックポイントの保存
GPU および CPU システム メトリクス
トレーニング設定 パラメータ
設定 パラメータ
wandb ロギングを有効化およびカスタマイズするために、MMF 設定で次のオプションを使用できます。
training:
wandb:
enabled: true
# エンティティは、run の送信先となる ユーザー名または Teams 名です。
# デフォルトでは、run は ユーザー アカウントにログ記録されます。
entity: null
# wandb で 実験 をログ記録する際に使用する Project 名
project: mmf
# wandb で プロジェクト の下に 実験 をログ記録する際に使用する 実験/run 名。
# デフォルトの 実験 名は次のとおりです: ${training.experiment_name}
name: ${training.experiment_name}
# モデル の チェックポイント を有効にして、チェックポイント を W&B Artifacts に保存します
log_model_checkpoint: true
# wandb.init() に渡す追加の 引数 値。
# 使用可能な 引数 (例:
# job_type: 'train'
# tags: ['tag1', 'tag2']
# については、/ref/python/init のドキュメントを参照してください。
env:
# wandb の メタデータ が保存される ディレクトリー への パス を変更するには
# (デフォルト: env.log_dir):
wandb_logdir: ${env:MMF_WANDB_LOGDIR,}
22 - MosaicML Composer
最先端のアルゴリズムでニューラルネットワークをトレーニング
Composer は、ニューラルネットワークのトレーニングをより良く、より速く、より安価にするためのライブラリです。ニューラルネットワークのトレーニングを加速させ、汎化性能を向上させるための多くの最先端の メソッド が含まれています。また、オプションの Trainer APIを使用すると、さまざまな拡張機能を簡単に 構成 できます。
Weights & Biases は、ML 実験 の ログ を記録するための軽量なラッパーを提供します。ただし、2つを自分で組み合わせる必要はありません。Weights & Biases は、WandBLogger を介して Composer ライブラリに直接組み込まれています。
Weights & Biases への ログ の記録を開始する
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
Weights & Biases の プロジェクト 名 (str, optional)
group
Weights & Biases の グループ 名 (str, optional)
name
Weights & Biases の run 名。指定されていない場合、State.run_name が使用されます (str, optional)
entity
Weights & Biases の エンティティ 名 ( ユーザー 名または Weights & Biases の Teams 名など) (str, optional)
tags
Weights & Biases の タグ (List[str], optional)
log_artifacts
チェックポイント を wandb に ログ するかどうか、デフォルト: false
(bool, optional)
rank_zero_only
ランク 0 の プロセス でのみ ログ を記録するかどうか。Artifacts を ログ に記録する場合は、すべてのランクで ログ に記録することを強くお勧めします。ランク ≥1 からの Artifacts は保存されず、関連情報が破棄される可能性があります。たとえば、Deepspeed ZeRO を使用する場合、すべてのランクからの Artifacts がないと チェックポイント から復元することは不可能です。デフォルト: True
(bool, optional)
init_kwargs
wandb config
などの wandb.init
に渡す パラメータ 完全なリストについては、こちら wandb.init
が受け入れます
一般的な使用法は次のとおりです。
init_kwargs = {"notes":"この 実験 でより高い学習率をテストする",
"config":{"arch":"Llama",
"use_mixed_precision":True
}
}
wandb_logger = WandBLogger(log_artifacts=True, init_kwargs=init_kwargs)
予測 サンプル の ログ
Composer の Callbacks システムを使用して、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: #最後の val エポック で
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
OpenAI API で W&B を使用する方法。
W&B OpenAI API インテグレーションを使用すると、ファインチューンされたモデルを含むすべての OpenAI モデルのリクエスト、レスポンス、トークン数、モデルの メタデータ を ログ に記録できます。
API の入力と出力を ログ に記録すると、さまざまなプロンプトのパフォーマンスを迅速に評価し、さまざまなモデル 設定 (温度など) を比較し、トークンの使用量などの他の使用状況 メトリクス を追跡できます。
OpenAI Python API ライブラリ をインストール
W&B autolog インテグレーションは、OpenAI バージョン 0.28.1 以前で動作します。
OpenAI Python API バージョン 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 アプリ の プロジェクト ワークスペース にリダイレクトされます。
作成した run を選択して、トレース テーブル、トレース タイムライン、および使用された OpenAI LLM のモデル アーキテクチャ を表示します。
autolog をオフにする
OpenAI API の使用が終了したら、すべての W&B プロセス を閉じるために disable()
を呼び出すことをお勧めします。
これで、入力と補完が W&B に ログ 記録され、 分析 の準備が整い、同僚と共有できます。
24 - OpenAI Fine-Tuning
W&B を使用して OpenAI モデルを ファインチューン する方法。
OpenAI GPT-3.5 または GPT-4 モデルのファインチューニングのメトリクスと設定を W&B に記録します。W&B の エコシステム を利用して、ファインチューニング の 実験 、 モデル 、 データセット を追跡し、同僚と 結果 を共有します。
W&B と OpenAI を ファインチューニング 用に 統合 する方法に関する補足情報については、OpenAI のドキュメントのWeights and Biases Integration セクションを参照してください。
OpenAI Python API のインストールまたはアップデート
W&B OpenAI ファインチューニング インテグレーション は、OpenAI バージョン 1.0 以降で動作します。OpenAI Python API ライブラリの最新バージョンについては、PyPI のドキュメントを参照してください。
OpenAI Python API をインストールするには、以下を実行します。
OpenAI Python API がすでにインストールされている場合は、以下を実行してアップデートできます。
OpenAI ファインチューニング の 結果 を 同期 する
W&B を OpenAI の ファインチューニング API と 統合 して、ファインチューニング の メトリクス と 設定 を W&B に 記録 します。これを行うには、wandb.integration.openai.fine_tuning
モジュールの WandbLogger
クラスを使用します。
from wandb.integration.openai.fine_tuning import WandbLogger
# Finetuning logic
WandbLogger. sync(fine_tune_job_id= FINETUNE_JOB_ID)
ファインチューン を 同期 する
スクリプト から 結果 を 同期 します。
from wandb.integration.openai.fine_tuning import WandbLogger
# one line command
WandbLogger. sync()
# passing optional parameters
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 Fine-Tune ID です。この 引数 が None (デフォルト) の場合、まだ W&B に 同期 されていないすべての OpenAI ファインチューン ジョブ が W&B に 同期 されます。
openai_client
初期化された OpenAI クライアント を sync
に渡します。クライアント が 提供 されない場合、ロガー自体によって初期化されます。デフォルトでは None です。
num_fine_tunes
ID が 提供 されない場合、同期 されていないすべての ファインチューン が W&B に 記録 されます。この 引数 を使用すると、 同期 する 最新 の ファインチューン の 数 を 選択 できます。num_fine_tunes が 5 の場合、最新 の 5 つの ファインチューン が 選択 されます。
project
ファインチューン の メトリクス 、 モデル 、 データ などが 記録 される Weights and Biases プロジェクト 名。デフォルトでは、 プロジェクト 名は “OpenAI-Fine-Tune” です。
entity
run の送信先の W&B ユーザー 名または チーム 名。デフォルトでは、デフォルト の エンティティ が使用されます。通常は ユーザー 名です。
overwrite
同じ ファインチューン ジョブ の 既存 の wandb run を 強制的に ログ に 記録 して 上書き します。デフォルトでは False です。
wait_for_job_success
OpenAI の ファインチューニング ジョブ が 開始 されると、通常、少し時間がかかります。メトリクス が ファインチューン ジョブ の 完了後すぐに W&B に 記録 されるようにするために、この 設定 では、60 秒ごとに ファインチューン ジョブ の ステータス が succeeded
に 変わるかどうかを チェック します。ファインチューン ジョブ が 成功 したと 検出 されると、メトリクス は 自動的に W&B に 同期 されます。デフォルトでは True に 設定 されています。
model_artifact_name
ログ に 記録 される モデル Artifacts の 名前。デフォルトは "model-metadata"
です。
model_artifact_type
ログ に 記録 される モデル Artifacts の タイプ。デフォルトは "model"
です。
**kwargs_wandb_init
wandb.init()
に 直接 渡される 追加 の 引数 。
データセット の バージョン管理 と 可視化
バージョン管理
ファインチューニング 用に OpenAI に アップロード する トレーニング データ と 検証 データ は、より簡単な バージョン 管理のために W&B Artifacts として 自動的に ログ に 記録 されます。以下は、Artifacts の トレーニング ファイル の ビュー です。ここでは、この ファイル を ログ に 記録 した W&B run、ログ に 記録 された日時、これが データセット のどの バージョン であるか、メタデータ 、および トレーニングデータ から トレーニング された モデル への DAG リネージ を確認できます。
可視化
データセット は W&B テーブル として 可視化 され、データセット の 探索 、 検索 、および 操作 を行うことができます。以下の W&B テーブル を使用して 可視化 された トレーニング サンプル を チェック してください。
ファインチューニング された モデル と モデル の バージョン管理
OpenAI は、ファインチューニング された モデル の ID を 提供 します。モデル の 重み に アクセス できないため、WandbLogger
は、 モデル の すべての 詳細 ( ハイパーパラメーター 、 データ ファイル ID など) と fine_tuned_model
ID を含む model_metadata.json
ファイル を 作成 し、W&B Artifacts として ログ に 記録 します。
この モデル ( メタデータ ) Artifacts は、W&B Registry の モデル にさらに リンク できます。
よくある質問
チーム で ファインチューン の 結果 を W&B で共有するにはどうすればよいですか?
以下を使用して、ファインチューン ジョブ を チーム アカウント に ログ に 記録 します。
WandbLogger. sync(entity= "YOUR_TEAM_NAME" )
run を 整理 するにはどうすればよいですか?
W&B run は 自動的に 整理 され、 ジョブタイプ 、 ベース モデル 、 学習率 、 トレーニング ファイル名 、その他の ハイパーパラメーター など、任意の設定 パラメータ に 基づいて フィルタリング/ソート できます。
さらに、run の 名前 を 変更 したり、メモ を 追加 したり、 タグ を 作成 して グループ化 したりできます。
満足したら、 ワークスペース を 保存 し、それを使用して レポート を 作成 し、run と 保存 された Artifacts ( トレーニング / 検証 ファイル ) から データ を インポート できます。
ファインチューニング された モデル に アクセス するにはどうすればよいですか?
ファインチューニング された モデル ID は、Artifacts (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 で データセット と モデル を 追跡 できますか?
トレーニング および 検証 データ は、Artifacts として W&B に 自動的に ログ に 記録 されます。ファインチューニング された モデル の ID を含む メタデータ も、Artifacts として ログ に 記録 されます。
wandb.Artifact
、wandb.log
などの 低レベル の wandb API を使用して パイプライン を 常に 制御 できます。これにより、 データ と モデル の 完全 な トレーサビリティ が 可能 になります。
リソース
25 - OpenAI Gym
W&B を OpenAI Gym と統合する方法。
2021年以降 Gym をメンテナンスしてきたチームは、今後の開発をすべて Gymnasium に移行しました。Gymnasium は Gym のドロップイン代替品 (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"
にフォールバックします。より詳細な制御が必要な場合は、いつでも手動で 動画を ログ できます。
CleanRL による OpenRL Benchmark では、OpenAI Gym の例でこの インテグレーション を使用しています。gym での使用方法を示すソース コード (特定の Runs に使用される特定のコード を含む) を見つけることができます。
26 - PaddleDetection
PaddleDetection と W&B の統合方法。
PaddleDetection は、PaddlePaddle に基づくエンドツーエンドの オブジェクト検出開発キットです。ネットワークコンポーネント、データ拡張、損失などの構成可能なモジュールを使用して、さまざまな主流のオブジェクトを検出し、インスタンスをセグメント化し、キーポイントを追跡および検出します。
PaddleDetection には、すべての トレーニング および 検証 メトリクスに加えて、モデル チェックポイント とそれに対応する メタデータ をログに記録する、組み込みの W&B インテグレーションが含まれています。
PaddleDetection WandbLogger
は、トレーニング 中にトレーニング および 評価 メトリクス を Weights & Biases に ログ 記録するだけでなく、モデル チェックポイント も ログ 記録します。
W&B の ブログ 記事を読む 。この記事では、COCO2017
データセット の サブセット で、YOLOX モデル を PaddleDetection と 統合 する方法について説明します。
サインアップ して APIキー を作成する
APIキー は、W&B に対して マシン を 認証 します。APIキー は、 ユーザー プロフィールから生成できます。
右上隅にある ユーザー プロフィール アイコンをクリックします。
ユーザー 設定 を選択し、APIキー セクションまでスクロールします。
表示 をクリックします。表示された APIキー をコピーします。APIキー を非表示にするには、ページをリロードしてください。
wandb
ライブラリ を インストール して ログイン する
wandb
ライブラリ をローカルに インストール して ログイン するには:
コマンドライン
Python
Python ノートブック
WANDB_API_KEY
環境変数 を APIキー に設定します。
export WANDB_API_KEY= <your_api_key>
wandb
ライブラリ を インストール して ログイン します。
pip install wandb
wandb login
import wandb
wandb. login()
!pip install wandb
import wandb
wandb.login()
トレーニング スクリプト で 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
wandb
キー の下の config.yml ファイル に wandb 引数 を追加します。
wandb:
project: MyProject
entity: MyTeam
save_dir: ./logs
train.py
ファイル を実行すると、W&B ダッシュボード への リンク が生成されます。
フィードバック または 問題点
Weights & Biases インテグレーション に関する フィードバック や 問題 がある場合は、PaddleDetection GitHub で 問題 を提起するか、support@wandb.com にメールを送信してください。
27 - PaddleOCR
PaddleOCR と W&B を統合する方法。
PaddleOCR は、多言語に対応した、素晴らしい、最先端の、そして実用的なOCRツールを開発し、PaddlePaddle で実装されたモデルのトレーニングをより良く行い、実際に活用できるようにすることを目的としています。PaddleOCR は、OCRに関連する様々な最先端のアルゴリズムをサポートし、産業ソリューションを開発しました。PaddleOCR には、トレーニング と評価メトリクスを、対応するメタデータ と共にモデル のチェックポイント をログ記録するための Weights & Biases のインテグレーションが付属しています。
ブログ と Colab の例
ICDAR2015 データセット で PaddleOCR を使用してモデル をトレーニングする方法については、こちら を参照してください。また、Google Colab もあり、対応するライブの W&B ダッシュボードは こちら から入手できます。このブログ の中国語版もあります: W&B对您的OCR模型进行训练和调试
サインアップ して APIキー を作成する
APIキー は、W&B に対してお客様のマシン を認証します。APIキー は、ユーザー プロファイル から生成できます。
右上隅にあるユーザー プロファイル アイコン をクリックします。
[User Settings ] を選択し、[API Keys ] セクション までスクロールします。
[Reveal ] をクリックします。表示された APIキー をコピーします。APIキー を非表示にするには、ページ をリロードします。
wandb
ライブラリ をインストール してログイン する
wandb
ライブラリ をローカル にインストール してログイン するには:
コマンドライン
Python
Python notebook
WANDB_API_KEY
環境変数 を APIキー に設定します。
export WANDB_API_KEY= <your_api_key>
wandb
ライブラリ をインストール してログイン します。
pip install wandb
wandb login
import wandb
wandb. login()
!pip install wandb
import wandb
wandb.login()
config.yml
ファイル に wandb を追加する
PaddleOCR では、yaml ファイル を使用して構成変数 を指定する必要があります。構成 yaml ファイル の末尾に次のスニペット を追加すると、すべてのトレーニング と検証メトリクス が、モデル チェックポイント と共に W&B ダッシュボード に自動的に記録されます。
wandb.init
に渡したい追加のオプション の 引数 は、yaml ファイル の wandb
ヘッダー の下に追加することもできます。
wandb:
project: CoolOCR # (オプション) これは wandb プロジェクト名 です
entity: my_team # (オプション) wandb team を使用している場合は、ここに team 名を渡すことができます
name: MyOCRModel # (オプション) これは 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 で issue をオープン するか、support@wandb.com にメール でご連絡ください。
28 - Prodigy
W&B と Prodigy を統合する方法。
Prodigy は、機械学習モデルのトレーニング および 評価 データ、エラー分析、データ の検査 および クリーニングを作成するためのアノテーション ツールです。W&B テーブル を使用すると、W&B 内でデータセット (など) をログ記録、可視化、分析、および共有できます。
Prodigy との W&B インテグレーション は、Prodigy でアノテーションを付けたデータセットを W&B に直接アップロードして テーブル で使用するための、シンプルで使いやすい機能を追加します。
次のようなコードを数行実行します。
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 の テーブル 形式で直接アップロードします。インストール および セットアップを含む Prodigy の詳細については、Prodigy ドキュメント を参照してください。
W&B は、画像 および 固有表現フィールドを wandb.Image
および wandb.Html
にそれぞれ自動的に変換しようとします。これらの可視化を含めるために、追加の列が結果のテーブルに追加される場合があります。
詳細な例を読む
W&B Prodigy インテグレーションで生成された可視化の例については、W&B テーブル を使用した Prodigy データセットの可視化 を参照してください。
spaCy も使用しますか?
W&B には spaCy との インテグレーション もあります。ドキュメントはこちら をご覧ください。
29 - PyTorch
PyTorch は、Python の ディープラーニング において最も人気のある フレームワーク の 1 つで、特に 研究 者の間で人気があります。W&B は、 勾配 の ログ 記録から CPU および GPU での コード のプロファイリングまで、PyTorch を第一級でサポートします。
ぜひ、 Colabノートブック で インテグレーション をお試しください。
サンプルリポジトリ で スクリプト を確認することもできます。これには、Fashion MNIST で Hyperband を使用した ハイパーパラメーター 最適化に関するものや、それが生成する W&B Dashboard などがあります。
wandb.watch
で 勾配 を ログ 記録する
勾配 を自動的に ログ 記録するには、wandb.watch
を呼び出して、PyTorch の モデル を渡します。
import wandb
wandb. init(config= args)
model = ... # モデル をセットアップ
# Magic
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 の Tensor として画像を生成またはロード
wandb. log({"examples" : [wandb. Image(im) for im in images_t]})
PyTorch およびその他の フレームワーク で リッチメディア を W&B に ログ 記録する方法の詳細については、メディア ログ 記録 ガイド を確認してください。
モデル の 予測 や派生した メトリクス など、メディアと一緒に 情報 を含める場合は、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)
# W&B に テーブル を ログ 記録
wandb. log({"mnist_predictions" : my_table})
データセット と モデル の ログ 記録と視覚化の詳細については、W&B Tables の ガイド を確認してください。
PyTorch コード のプロファイル
W&B は、PyTorch Kineto の Tensorboard plugin と直接 統合 されており、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 Artifact を作成
profile_art = wandb. Artifact("trace" , type= "profile" )
# pt.trace.json ファイルを Artifact に追加
profile_art. add_file(glob. glob(profile_dir + ".pt.trace.json" ))
# artifact をログに記録
profile_art. save()
動作する サンプル コード を この Colab で確認して実行してください。
インタラクティブな トレース 表示 ツール は Chrome Trace Viewer に基づいており、Chrome ブラウザー で最適に動作します。
30 - PyTorch Geometric
PyTorch Geometric 、または PyG は、幾何学的ディープラーニングで最も人気のあるライブラリの 1 つであり、W&B はグラフの可視化と Experiments の追跡において非常にうまく機能します。
Pytorch Geometric をインストールしたら、以下の手順に従って開始してください。
サインアップして API キーを作成する
API キー は、お使いのマシンを W&B に対して認証します。API キーは、 ユーザー プロフィールから生成できます。
右上隅にある ユーザー プロフィール アイコンをクリックします。
ユーザー 設定 を選択し、API キー セクションまでスクロールします。
表示 をクリックします。表示された API キーをコピーします。API キーを非表示にするには、ページをリロードしてください。
wandb
ライブラリをインストールしてログインする
ローカルに wandb
ライブラリをインストールしてログインするには:
コマンドライン
Python
Python notebook
WANDB_API_KEY
環境 変数 を API キー に設定します。
export WANDB_API_KEY= <your_api_key>
wandb
ライブラリをインストールしてログインします。
pip install wandb
wandb login
import wandb
wandb. login()
!pip install wandb
import wandb
wandb.login()
グラフを可視化する
エッジ数、ノード数など、入力グラフに関する詳細を保存できます。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" )
# Add the edges from the PyG graph to the PyVis network
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 )
# Save the PyVis visualisation to a HTML file
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 を使用して、Experiments や、損失関数、精度などの関連 メトリクス を追跡できます。次の行を トレーニング ループに追加します。
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
を渡すこともできます。たとえば、チームで作業している場合は、entity
引数を WandBLogger
クラスに渡して、チーム名を指定できます。
# 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 は、概要 タブで解決された構成をキャプチャします。W&B は、ファイル タブ に YAML 形式で構成も保存します。
記録されたメトリクス
各レシピには、独自のトレーニング ループがあります。各レシピを確認して、ログに記録されたメトリクスを確認してください。これらはデフォルトで含まれています。
メトリクス
説明
loss
モデルの損失
lr
学習率
tokens_per_second
モデルの 1 秒あたりの トークン 数
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
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 オブジェクト を作成します。次に、メトリクス を自動的に ログ 記録するために、それを trainer または evaluator にアタッチします。この例:
トレーナー オブジェクト にアタッチされたトレーニング損失を ログ 記録します。
evaluator にアタッチされた検証損失を ログ 記録します。
学習率などのオプションの パラメータ を ログ 記録します。
モデル を監視します。
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 Object Creation
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' # optional
)
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= 'input batch size for training (default: 64)' )
parser. add_argument('--val_batch_size' , type= int, default= 1000 ,
help= 'input batch size for validation (default: 1000)' )
parser. add_argument('--epochs' , type= int, default= 10 ,
help= 'number of epochs to train (default: 10)' )
parser. add_argument('--lr' , type= float, default= 0.01 ,
help= 'learning rate (default: 0.01)' )
parser. add_argument('--momentum' , type= float, default= 0.5 ,
help= 'SGD momentum (default: 0.5)' )
parser. add_argument('--log_interval' , type= int, default= 10 ,
help= 'how many batches to wait before logging training status' )
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 ライブラリに直接組み込まれているため、この 2 つを自分で組み合わせる必要はありません。
Lightning との統合
PyTorch Logger
Fabric Logger
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キー は、ユーザープロフィールから生成できます。
右上隅にあるユーザープロフィールアイコンをクリックします。
ユーザー設定 を選択し、APIキー セクションまでスクロールします。
表示 をクリックします。表示された APIキー をコピーします。APIキー を非表示にするには、ページをリロードします。
wandb
ライブラリをインストールしてログインする
ローカルに wandb
ライブラリをインストールしてログインするには:
コマンドライン
Python
Python notebook
WANDB_API_KEY
環境変数 を APIキー に設定します。
export WANDB_API_KEY= <your_api_key>
wandb
ライブラリをインストールしてログインします。
pip install wandb
wandb login
import wandb
wandb. login()
!pip install wandb
import wandb
wandb.login()
PyTorch Lightning の WandbLogger
を使用する
PyTorch Lightning には、メトリクスやモデルの重み、メディアなどをログに記録するための複数の WandbLogger
クラスがあります。
Lightning と統合するには、WandbLogger をインスタンス化し、Lightning の Trainer
または Fabric
に渡します。
PyTorch Logger
Fabric Logger
trainer = Trainer(logger= wandb_logger)
fabric = L. Fabric(loggers= [wandb_logger])
fabric. launch()
fabric. log_dict({
"important_metric" : important_metric
})
一般的なロガーの引数
以下は、WandbLogger で最もよく使用されるパラメーターの一部です。すべてのロガー引数の詳細については、PyTorch Lightning のドキュメントを確認してください。
パラメータ
説明
project
ログを記録する wandb Project を定義します。
name
wandb run に名前を付けます。
log_model
log_model="all"
の場合はすべてのモデルをログに記録し、log_model=True
の場合はトレーニングの最後にログに記録します。
save_dir
データが保存されるパス
ハイパーパラメーター をログに記録する
PyTorch Logger
Fabric Logger
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
ドキュメントを参照してください。
メトリクス をログに記録する
PyTorch Logger
Fabric Logger
WandbLogger
を使用すると、LightningModule
内 (例: training_step
メソッドまたは validation_step
メソッド) で self.log('my_metric_name', metric_vale)
を呼び出すことで、メトリクス を W&B にログ記録できます。
以下のコードスニペットは、メトリクス と LightningModule
の ハイパーパラメーター をログ記録するように 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 images are (1, 28, 28) (channels, width, height)
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):
"""推論 input -> output に使用されるメソッド"""
# (b, 1, 28, 28) -> (b, 1*28*28)
batch_size, channels, width, height = x. size()
x = x. view(batch_size, - 1 )
# 3 x (linear + 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):
"""単一のバッチから損失を返す必要があります"""
_, 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 サマリーメトリックの最大検証精度を追跡するように指示するには、トレーニングの開始時に 1 回だけ wandb.define_metric
を呼び出します。
PyTorch Logger
Fabric Logger
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
引数を設定します。
PyTorch Logger
Fabric Logger
trainer = Trainer(logger= wandb_logger, callbacks= [checkpoint_callback])
fabric = L. Fabric(loggers= [wandb_logger], callbacks= [checkpoint_callback])
latest および best エイリアスは、W&B Artifact からモデル のチェックポイントを簡単に取得できるように自動的に設定されます。
# 参照は Artifacts パネルで取得できます
# "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()
PyTorch Logger
Fabric Logger
# チェックポイントを読み込む
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 のサンプル モデル のチェックポイントをこちら で参照してください)。
最適なモデル のチェックポイントをブックマークし、チーム全体で一元化するには、W&B モデルレジストリ にリンクできます。
ここでは、タスクごとに最適なモデル を整理したり、モデル のライフサイクルを管理したり、ML ライフサイクル全体で簡単な追跡と監査を容易にしたり、Webhook またはジョブでダウンストリームアクションを自動化 したりできます。
画像、テキストなどをログに記録する
WandbLogger
には、メディアをログ記録するための log_image
、log_text
、および log_table
メソッドがあります。
また、wandb.log
または trainer.logger.experiment.log
を直接呼び出して、オーディオ、分子、点群、3D オブジェクトなどの他のメディアタイプをログに記録することもできます。
画像のログ記録
テキストのログ記録
テーブル のログ記録
# テンソル、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" ])
# trainer で .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 DataFrame を使用
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
# or
# 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()])
Lightning と W&B で複数の GPU を使用する
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 のビデオチュートリアルをこちら でフォローできます。
よくある質問
W&B は Lightning とどのように統合されますか?
コア統合は、Lightning loggers
API に基づいており、フレームワークに依存しない方法で多くのログ記録コードを記述できます。Logger
は、Lightning Trainer
に渡され、その API の豊富なフックアンドコールバックシステム に基づいてトリガーされます。これにより、研究コードがエンジニアリングコードおよびログ記録コードから適切に分離されます。
追加のコードなしで統合は何をログに記録しますか?
モデル のチェックポイントを W&B に保存します。そこで表示したり、ダウンロードして将来の run で使用したりできます。システムメトリクス (GPU 使用率やネットワーク I/O など)、ハードウェアや OS 情報などの環境情報、コード の状態 (git コミットと差分パッチ、ノートブック の内容、セッション履歴を含む)、および標準出力に出力されるものをキャプチャします。
トレーニングのセットアップで 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 Tune
W&B と Ray Tune を統合する方法。
W&B は、2 つの軽量な インテグレーション を提供することで、Ray と統合します。
WandbLoggerCallback
関数は、 Tune に報告された メトリクス を Wandb API に自動的に ログ します。
関数 API で使用できる setup_wandb()
関数は、 Tune の トレーニング 情報で Wandb API を自動的に初期化します。通常どおり Wandb API を使用できます。たとえば、wandb.log()
を使用して、 トレーニング プロセスを ログ します。
インテグレーション の 設定
from ray.air.integrations.wandb import WandbLoggerCallback
Wandb の 設定 は、tune.run()
の config パラメータに wandb の キー を渡すことによって行われます (以下の例を参照)。
wandb config エントリ の内容は、 キーワード 引数として 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)
: results ディクショナリ の config パラメータ を ログ するかどうか。デフォルトは False。
upload_checkpoints (bool)
: True の場合、 モデル の チェックポイント は Artifacts としてアップロードされます。デフォルトは 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):
# Initialize 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= {
# define search space here
"a" : tune. choice([1 , 2 , 3 ]),
"b" : tune. choice([4 , 5 , 6 ]),
# wandb configuration
"wandb" : {"project" : "Optimization_Project" , "api_key_file" : "/path/to/file" },
},
)
results = tuner. fit()
コード例
インテグレーション の動作を確認するための例をいくつか作成しました。
35 - SageMaker
W&B と Amazon SageMaker の統合方法について。
W&B は Amazon SageMaker と連携し、ハイパーパラメータの自動読み取り、分散 run のグループ化、チェックポイントからの run の再開を自動で行います。
認証
W&B は、トレーニングスクリプトを基準とした secrets.env
という名前のファイルを探し、wandb.init()
が呼び出されると、それらを環境にロードします。secrets.env
ファイルは、実験の launch に使用するスクリプトで wandb.sagemaker_auth(path="source_dir")
を呼び出すことによって生成できます。このファイルを必ず .gitignore
に追加してください!
既存のエスティメーター
SageMaker の事前構成済みエスティメーターのいずれかを使用している場合は、wandb を含む requirements.txt
をソースディレクトリーに追加する必要があります。
Python 2 を実行しているエスティメーターを使用している場合は、wandb をインストールする前に、この wheel から直接 psutil
をインストールする必要があります。
https://wheels.galaxyproject.org/packages/psutil-5.4.8-cp27-cp27mu-manylinux1_x86_64.whl
wandb
完全な例は GitHub で確認し、詳細については blog を参照してください。
SageMaker と W&B を使用したセンチメント分析アナライザーのデプロイに関する チュートリアル もお読みいただけます。
W&B の sweep agent は、SageMaker インテグレーションが無効になっている場合にのみ、SageMaker ジョブで期待どおりに動作します。wandb.init
の呼び出しを変更して、SageMaker インテグレーションをオフにします。
wandb. init(... , settings= wandb. Settings(sagemaker_disable= True ))
36 - Scikit-Learn
数行のコードで、scikit-learn モデルのパフォーマンスを可視化して比較するために wandb を使用できます。サンプルを試す →
はじめに
サインアップして APIキー を作成する
APIキー は、W&B に対してお客様のマシンを認証します。APIキー は、ユーザー プロファイルから生成できます。
右上隅にあるユーザー プロファイル アイコンをクリックします。
User Settings を選択し、API Keys セクションまでスクロールします。
Reveal をクリックします。表示された APIキー をコピーします。APIキー を非表示にするには、ページをリロードします。
wandb
ライブラリをインストールしてログインする
ローカルに wandb
ライブラリをインストールしてログインするには:
コマンドライン
Python
Python notebook
APIキー に WANDB_API_KEY
環境変数 を設定します。
export WANDB_API_KEY= <your_api_key>
wandb
ライブラリをインストールしてログインします。
pip install wandb
wandb login
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)
# If logging metrics over time, then use wandb.log
# 時間経過とともにメトリクスをログする場合は、wandb.log を使用します
wandb. log({"accuracy" : accuracy})
# OR to log a final metric at the end of training you can also use wandb.summary
# または、トレーニングの最後に最終メトリクスをログするには、wandb.summary を使用することもできます
wandb. summary["accuracy" ] = accuracy
プロットを作成する
ステップ 1: wandb をインポートし、新しい run を初期化します
import wandb
wandb. init(project= "visualize-sklearn" )
ステップ 2: プロットを可視化します
個々のプロット
モデル をトレーニングして 予測 を行った後、wandb でプロットを生成して 予測 を分析できます。サポートされているチャートの完全なリストについては、以下の サポートされているプロット セクションを参照してください。
# Visualize single plot
# 単一のプロットを可視化します
wandb. sklearn. plot_confusion_matrix(y_true, y_pred, labels)
すべてのプロット
W&B には、いくつかの関連するプロットをプロットする plot_classifier
などの関数があります。
# Visualize all classifier plots
# すべての分類器プロットを可視化します
wandb. sklearn. plot_classifier(
clf,
X_train,
X_test,
y_train,
y_test,
y_pred,
y_probas,
labels,
model_name= "SVC" ,
feature_names= None ,
)
# All regression plots
# すべての回帰プロット
wandb. sklearn. plot_regressor(reg, X_train, X_test, y_train, y_test, model_name= "Ridge" )
# All clustering plots
# すべてのクラスタリングプロット
wandb. sklearn. plot_clusterer(
kmeans, X_train, cluster_labels, labels= None , model_name= "KMeans"
)
既存の Matplotlib プロット
Matplotlib で作成されたプロットも W&B ダッシュボードにログできます。そのためには、最初に plotly
をインストールする必要があります。
最後に、プロットは次のように W&B のダッシュボードにログできます。
import matplotlib.pyplot as plt
import wandb
wandb. init(project= "visualize-sklearn" )
# do all the plt.plot(), plt.scatter(), etc. here.
# ここに plt.plot(), plt.scatter() などをすべて記述します。
# ...
# instead of doing plt.show() do:
# plt.show() を実行する代わりに、次を実行します。
wandb. log({"plot" : plt})
サポートされているプロット
学習曲線
さまざまな長さの データセット でモデル をトレーニングし、トレーニング セットと テストセット の両方について、クロス検証されたスコアと データセット サイズのプロットを生成します。
wandb.sklearn.plot_learning_curve(model, X, y)
model (clf または 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 または 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 の値は、サンプルが 2 つの隣接する クラスター 間の決定境界上または非常に近いことを示し、負の値は、それらのサンプルが間違った クラスター に割り当てられた可能性があることを示します。
一般に、すべてのシルエット クラスター スコアが平均以上 (赤い線を超えている) であり、できるだけ 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)
例
37 - Simple Transformers
Hugging Face の Transformers ライブラリ と W&B を統合する方法。
このライブラリは、Hugging Face の Transformers ライブラリをベースにしています。Simple Transformers を使用すると、Transformer モデルを迅速にトレーニングおよび評価できます。モデルの初期化、モデルのトレーニング、モデルの評価に必要なコードはわずか 3 行です。Sequence Classification(シーケンス分類)、Token Classification(トークン分類、固有表現認識)、Question Answering(質問応答)、Language Model Fine-Tuning(言語モデルのファインチューニング)、Language Model Training(言語モデルのトレーニング)、Language Generation(言語生成)、T5 モデル、Seq2Seq Tasks(Seq2Seq タスク)、Multi-Modal Classification(マルチモーダル分類)、Conversational AI(会話型 AI)をサポートしています。
モデルトレーニングを可視化するために Weights and 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(固有表現認識)モデルが含まれます。
simpletransformers.question_answering
- すべての Question Answering(質問応答)モデルが含まれます。
以下に最小限の例をいくつか示します。
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 ベンチマーク データセットで transformers のトレーニングをカバーするこちらの Weights and Biases report を確認してください。colab で自分で試してみてください 。
38 - Skorch
Skorch と W&B を統合する方法。
Skorch で Weights & Biases を使用すると、各エポック後に、すべてのモデルパフォーマンスメトリクス、モデルトポロジ、およびコンピューティングリソースとともに、最高のパフォーマンスを持つモデルを自動的にログ記録できます。 wandb_run.dir
に保存されたすべてのファイルは、W&B サーバーに自動的にログ記録されます。
run の例 を参照してください。
パラメータ
パラメータ
タイプ
説明
wandb_run
wandb.wandb_run
. Run
データのログ記録に使用される wandb run。
save_model
bool (default=True)
最適なモデルのチェックポイントを保存し、W&B サーバー上の Run にアップロードするかどうか。
keys_ignored
str または str のリスト (default=None)
tensorboard にログ記録しないキーまたはキーのリスト。 ユーザーが提供するキーに加えて、event_
で始まるキーや _best
で終わるキーはデフォルトで無視されることに注意してください。
コード例
このインテグレーションの動作を確認するための例をいくつか作成しました。
# 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)
メソッドリファレンス
メソッド
説明
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, …])
勾配が計算された後、更新ステップが実行される前に、バッチごとに 1 回呼び出されます。
on_train_begin
(net, **kwargs)
モデルトポロジをログ記録し、勾配の hook を追加します。
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
ライブラリをインストールしてログインするには:
コマンドライン
Python
Python notebook
WANDB_API_KEY
環境変数 を APIキー に設定します。
export WANDB_API_KEY= <your_api_key>
wandb
ライブラリをインストールしてログインします。
pip install wandb
wandb login
import wandb
wandb. login()
!pip install wandb
import wandb
wandb.login()
WandbLogger
を spaCy 設定ファイルに追加する
spaCy の設定ファイルは、ロギングだけでなく、トレーニングのあらゆる側面(GPU 割り当て、オプティマイザー の選択、データセット のパスなど)を指定するために使用されます。最小限の構成として、[training.logger]
の下に、キー @loggers
に値 "spacy.WandbLogger.v3"
と project_name
を指定する必要があります。
spaCy のトレーニング設定ファイルの仕組みと、トレーニングをカスタマイズするために渡すことができるその他のオプションの詳細については、
spaCy のドキュメント を参照してください。
[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
Name
Description
project_name
str
。W&B の Project の名前。まだ存在しない場合、Project は自動的に作成されます。
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 は指定された entity に作成されます
run_name
Optional str
。指定された場合、run は指定された名前で作成されます。
トレーニングを開始する
WandbLogger
を spaCy トレーニング設定に追加したら、通常どおり spacy train
を実行できます。
コマンドライン
Python
Python notebook
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 ページ へのリンクが出力されます。このリンクをクリックすると、Weights & Biases Web UI で、この run の 実験管理 ダッシュボード に移動します。
40 - Stable Baselines 3
Stable Baseline 3 と W&B を統合する方法。
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
W&B は、W&B マルチテナント SaaS 用の埋め込み TensorBoard をサポートしています。
TensorBoard の ログ を クラウド にアップロードし、同僚やクラスメートとすばやく 結果 を共有して、 分析 を一元的な場所に保管できます。
はじめに
import wandb
# `sync_tensorboard=True` で wandb の run を開始します。
wandb. init(project= "my-project" , sync_tensorboard= True )
# TensorBoard を使用したトレーニングコード
...
# [オプション] W&B に TensorBoard の ログ をアップロードするために、wandb の run を終了します ( Colabノートブック で実行している場合)。
wandb. finish()
例 を確認してください。
run が完了すると、W&B で TensorBoard イベントファイルに アクセス し、ネイティブの W&B チャートで メトリクス を視覚化できます。さらに、システムの CPU や GPU の使用率、git
の状態、run が使用した ターミナル コマンドなど、役立つ追加情報も表示できます。
W&B は、すべての TensorFlow バージョンで TensorBoard をサポートしています。W&B は、PyTorch および TensorBoardX を使用した TensorBoard 1.14 以降もサポートしています。
よくある質問
TensorBoard に ログ 記録されない メトリクス を W&B に ログ 記録するにはどうすればよいですか?
TensorBoard に ログ 記録されていない追加のカスタム メトリクス を ログ 記録する必要がある場合は、コードで wandb.log
を呼び出すことができます。wandb.log({"custom": 0.8})
Tensorboard を同期すると、wandb.log
の step 引数 の設定はオフになります。別の step カウントを設定する場合は、step メトリクス とともに メトリクス を ログ 記録できます。
wandb.log({"custom": 0.8, "global_step": global_step})
wandb
で TensorBoard を使用している場合、TensorBoard をどのように構成しますか?
TensorBoard の パッチ 適用方法をより詳細に制御する場合は、wandb.init
に sync_tensorboard=True
を渡す代わりに、wandb.tensorboard.patch
を呼び出すことができます。
import wandb
wandb. tensorboard. patch(root_logdir= "<logging_directory>" )
wandb. init()
# W&B に TensorBoard の ログ をアップロードするために、wandb の run を終了します ( Colabノートブック で実行している場合)。
wandb. finish()
TensorBoard > 1.14 を PyTorch で使用している場合は、バニラ TensorBoard に パッチ が適用されていることを確認するために tensorboard_x=False
をこの メソッド に渡し、 パッチ が適用されていることを確認するために pytorch=True
を渡すことができます。これらのオプションには両方とも、これらのライブラリのどの バージョン がインポートされたかに応じて、スマートなデフォルトがあります。
デフォルトでは、tfevents
ファイルと .pbtxt
ファイルも同期します。これにより、お客様に代わって TensorBoard インスタンスを ローンンチ することができます。run ページに TensorBoard タブ が表示されます。この 振る舞い は、save=False
を wandb.tensorboard.patch
に渡すことでオフにできます。
import wandb
wandb. init()
wandb. tensorboard. patch(save= False , tensorboard_x= True )
# Colabノートブック で実行している場合は、wandb の run を終了して、TensorBoard の ログ を W&B にアップロードします。
wandb. finish()
tf.summary.create_file_writer
を呼び出すか、torch.utils.tensorboard
を介して SummaryWriter
を構築する 前に 、wandb.init
または wandb.tensorboard.patch
のいずれかを呼び出す必要があります。
履歴 TensorBoard の run を同期するにはどうすればよいですか?
既存の tfevents
ファイルがローカルに保存されていて、それらを W&B にインポートする場合は、wandb sync log_dir
を実行します。ここで、log_dir
は tfevents
ファイルを含むローカル ディレクトリー です。
Google Colab または Jupyter を TensorBoard で使用するにはどうすればよいですか?
Jupyter または Colabノートブック でコードを実行している場合は、トレーニングの最後に wandb.finish()
を呼び出すようにしてください。これにより、wandb の run が終了し、TensorBoard の ログ が W&B にアップロードされて視覚化できるようになります。wandb は スクリプト の完了時に自動的に完了するため、.py
スクリプト を実行する場合はこれは必要ありません。
ノートブック 環境で シェル コマンド を実行するには、!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
の step 引数の設定はオフになります。別のステップ数を設定する場合は、次のようにステップ メトリクスを使用してメトリクスを記録できます。
wandb. log({"custom" : 0.8 , "global_step" :global_step}, step= global_step)
TensorFlow estimators hook
ログに記録する内容をより詳細に制御したい場合は、wandb は TensorFlow estimators 用の hook も提供します。グラフ内のすべての 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
を使用することです。詳細については、こちら をご覧ください。wandb
を組み込んでカスタム TensorFlow トレーニング ループでメトリクスをログに記録する場合は、次のスニペットに従ってください。
with tf. GradientTape() as tape:
# Get the probabilities
predictions = model(features)
# Calculate the loss
loss = loss_func(labels, predictions)
# Log your metrics
wandb. log("loss" : loss. numpy())
# Get the gradients
gradients = tape. gradient(loss, model. trainable_variables)
# Update the weights
optimizer. apply_gradients(zip(gradients, model. trainable_variables))
完全な例はこちら にあります。
W&B と TensorBoard の違いは何ですか?
共同創設者が W&B の開発を開始したとき、OpenAI の不満を抱えた TensorBoard ユーザーのためにツールを構築することに触発されました。改善に重点を置いている点をいくつかご紹介します。
モデルの再現 : Weights & Biases は、実験 、探索、および後でモデルを再現するのに適しています。メトリクスだけでなく、ハイパーパラメーターとコードのバージョンもキャプチャし、プロジェクトを再現できるように、バージョン管理ステータスとモデルのチェックポイントを保存できます。
自動編成 : コラボレーターからプロジェクトを引き継ぐ場合でも、休暇から戻ってきた場合でも、古いプロジェクトを整理する場合でも、W&B を使用すると、試行されたすべてのモデルを簡単に確認できるため、誰も時間、 GPU サイクル、またはカーボンを無駄に実験を再実行することはありません。
高速で柔軟なインテグレーション : W&B を 5 分でプロジェクトに追加します。無料のオープンソース Python パッケージをインストールし、コードに数行追加するだけで、モデルを実行するたびに、適切なログに記録されたメトリクスとレコードが得られます。
永続的で集中化されたダッシュボード : ローカル マシン、共有ラボ クラスター、クラウドのスポット インスタンスなど、モデルをどこでトレーニングする場合でも、結果は同じ集中化されたダッシュボードに共有されます。さまざまなマシンから TensorBoard ファイルをコピーして整理する時間を費やす必要はありません。
強力な テーブル : さまざまなモデルの結果を検索、フィルタリング、ソート、およびグループ化します。数千のモデル バージョンを確認し、さまざまなタスクに最適なモデルを簡単に見つけることができます。TensorBoard は、大規模なプロジェクトでうまく機能するように構築されていません。
コラボレーション ツール : W&B を使用して、複雑な 機械学習 プロジェクトを整理します。W&B へのリンクを簡単に共有でき、プライベート Teams を使用して、全員が結果を共有プロジェクトに送信できます。Reports を介したコラボレーションもサポートしています。インタラクティブな 可視化を追加し、markdown で作業内容を記述します。これは、作業ログを保持し、上司と学びを共有したり、ラボや Teams に学びを提示したりするのに最適な方法です。
無料アカウント を始めましょう
例
インテグレーションの仕組みを示すために、いくつかの例を作成しました。
43 - W&B for Julia
W&B を Julia と統合する方法。
Julia プログラミング言語で機械学習 の 実験 を実行している方のために、コミュニティの貢献者の方が、wandb.jl と呼ばれる Julia バインディングの非公式セットを作成しました。
wandb.jl リポジトリのドキュメント に例があります。以下は「はじめに」の例です。
using Wandb, Dates, Logging
# Start a new run, tracking hyperparameters in config
lg = WandbLogger(project = "Wandb.jl" ,
name = "wandbjl-demo- $ (now())" ,
config = Dict ("learning_rate" => 0.01 ,
"dropout" => 0.2 ,
"architecture" => "CNN" , # アーキテクチャー
"dataset" => "CIFAR-100" )) # データセット
# Use LoggingExtras.jl to log to multiple loggers together
global_logger(lg)
# Simulating the training or evaluation loop
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" ))
# Log metrics from your script to W&B
@info "metrics" accuracy= acc loss= loss
end
# Finish the run
close(lg)
44 - XGBoost
W&B で ツリー を追跡します。
wandb
ライブラリには、XGBoost でのトレーニングからメトリクス、config、および保存されたブースターを記録するための WandbCallback
コールバックがあります。ここでは、XGBoost WandbCallback
からの出力を含む、ライブの Weights & Biases ダッシュボード を確認できます。
始め方
XGBoost のメトリクス、config、およびブースターモデルを Weights & Biases に記録するには、WandbCallback
を XGBoost に渡すだけです。
from wandb.integration.xgboost import WandbCallback
import xgboost as XGBClassifier
...
# Start a wandb run
run = wandb. init()
# Pass WandbCallback to the model
bst = XGBClassifier()
bst. fit(X_train, y_train, callbacks= [WandbCallback(log_model= True )])
# Close your wandb run
run. finish()
XGBoost と Weights & Biases でのロギングの詳細については、この notebook を開いてください。
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}
のいずれか。線形モデルの場合は weight。
define_metric
: (boolean) True (デフォルト) の場合、wandb.summary
でトレーニングの最後のステップではなく、最適なステップでのモデルのパフォーマンスをキャプチャします。
WandbCallback のソース コード を確認できます。
その他の例については、GitHub の examples リポジトリ を確認してください。
Sweeps でハイパーパラメータを チューニングする
モデルのパフォーマンスを最大限に引き出すには、ツリーの深さや学習率などのハイパーパラメータを チューニングする必要があります。Weights & Biases には、大規模なハイパーパラメータ テスト実験を構成、調整、および分析するための強力な ツールキットである Sweeps が含まれています。
この XGBoost & Sweeps Python スクリプト を試すこともできます。
45 - YOLOv5
Ultralytics’ YOLOv5 (「You Only Look Once」) モデルファミリーは、苦痛を伴うことなく、畳み込みニューラルネットワークによるリアルタイムの オブジェクト検出を可能にします。
Weights & Biases は YOLOv5 に直接統合されており、実験の メトリクス 追跡、モデルと データセット の バージョン管理 、豊富なモデル 予測 の 可視化 などを提供します。YOLO の 実験 を実行する前に、pip install
を 1 回実行するだけで簡単に利用できます。
W&B のすべての ログ 機能は、
PyTorch DDP などの データ並列マルチ GPU トレーニングと互換性があります。
コアな 実験 を追跡する
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
すべての W&B アカウントには、 データセット と モデル 用に 100 GB の無料ストレージが付属しています。
このようになります。
データ と モデル の バージョン管理 により、セットアップなしで、一時停止またはクラッシュした 実験 を任意のデバイスから再開できます。詳細については、
Colab をご覧ください。
46 - Ultralytics
Ultralytics は、画像分類、オブジェクト検出、画像セグメンテーション、姿勢推定などのタスクのための、最先端のコンピュータビジョン モデルの本拠地です。リアルタイムオブジェクト検出モデルの YOLO シリーズの最新版である YOLOv8 をホストするだけでなく、SAM (Segment Anything Model) 、RT-DETR 、YOLO-NAS などの他の強力なコンピュータビジョン モデルもホストしています。これらのモデルの実装を提供するだけでなく、Ultralytics は、使いやすい API を使用してこれらのモデルをトレーニング、ファインチューン、および適用するための、すぐに使える ワークフローも提供します。
始めましょう
ultralytics
と wandb
をインストールします。
```shell
pip install --upgrade ultralytics==8.0.238 wandb
# or
# conda install ultralytics
```
```bash
!pip install --upgrade ultralytics==8.0.238 wandb
```
開発チームは、ultralyticsv8.0.238
以下のバージョンとの インテグレーションをテストしました。インテグレーションに関する問題点を報告するには、yolov8
タグを付けて GitHub issue を作成してください。
実験管理の追跡と検証結果の可視化
このセクションでは、トレーニング、ファインチューン、および検証に Ultralytics モデルを使用し、W&B を使用して実験管理の追跡、モデルのチェックポイント、およびモデルのパフォーマンスの可視化を実行する典型的なワークフローを示します。
この レポートで インテグレーションについて確認することもできます。W&B で Ultralytics を強化する
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
関数を呼び出します。これにより、トレーニング、ファインチューン、検証、または推論を実行すると、実験 ログと画像が自動的に保存され、W&B 上の コンピュータビジョン タスクのインタラクティブなオーバーレイ を使用して、グラウンドトゥルースとそれぞれの予測結果が重ねられ、追加の洞察が wandb.Table
にまとめられます。
# Initialize YOLO Model
model = YOLO("yolov8n.pt" )
# Add W&B callback for Ultralytics
add_wandb_callback(model, enable_model_checkpointing= True )
# Train/fine-tune your model
# At the end of each epoch, predictions on validation batches are logged
# to a W&B table with insightful and interactive overlays for
# computer vision tasks
model. train(project= "ultralytics" , data= "coco128.yaml" , epochs= 5 , imgsz= 640 )
# Finish the 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 。
この レポートで インテグレーションについて確認することもできます。W&B で Ultralytics を強化する
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 を初期化します。
# Initialize W&B run
wandb. init(project= "ultralytics" , job_type= "inference" )
次に、目的の YOLO
モデルを初期化し、モデルで推論を実行する前に、そのモデルで add_wandb_callback
関数を呼び出します。これにより、推論を実行すると、コンピュータビジョン タスクのインタラクティブなオーバーレイ でオーバーレイされた画像が自動的にログに記録され、追加の洞察が wandb.Table
にまとめられます。
# Initialize YOLO Model
model = YOLO("yolov8n.pt" )
# Add W&B callback for Ultralytics
add_wandb_callback(model, enable_model_checkpointing= True )
# Perform prediction which automatically logs to a W&B Table
# with interactive overlays for bounding boxes, segmentation masks
model(
[
"./assets/img1.jpeg" ,
"./assets/img3.png" ,
"./assets/img4.jpeg" ,
"./assets/img5.jpeg" ,
]
)
# Finish the W&B run
wandb. finish()
トレーニングまたはファインチューン ワークフローの場合、wandb.init()
を使用して run を明示的に初期化する必要はありません。ただし、コードに予測のみが含まれる場合は、run を明示的に作成する必要があります。
インタラクティブな bbox オーバーレイは次のようになります。
WandB Image Overlay
W&B 画像オーバーレイの詳細については、こちら を参照してください。
その他のリソース
47 - YOLOX
W&B と YOLOX を統合する方法。
YOLOX は、 オブジェクト検出において強力なパフォーマンスを発揮する、アンカーフリー版の YOLO です。 YOLOX W&B インテグレーションを使用すると、トレーニング、検証、およびシステムに関連する メトリクス の ログ 記録をオンにすることができ、単一の コマンドライン 引数で 予測 をインタラクティブに検証できます。
サインアップして APIキー を作成する
APIキー は、W&B へのあなたの マシン を認証します。APIキー は、 ユーザー プロフィールから生成できます。
右上隅にある ユーザー プロフィール アイコンをクリックします。
[User Settings ](ユーザー 設定 )を選択し、[API Keys ](APIキー )セクションまでスクロールします。
[Reveal ](表示)をクリックします。表示された APIキー をコピーします。APIキー を非表示にするには、ページをリロードします。
wandb
ライブラリをインストールしてログインする
wandb
ライブラリをローカルにインストールしてログインするには:
コマンドライン
Python
Python notebook
WANDB_API_KEY
環境変数 をあなたの APIキー に設定します。
export WANDB_API_KEY= <your_api_key>
wandb
ライブラリをインストールしてログインします。
pip install wandb
wandb login
import wandb
wandb. login()
!pip install wandb
import wandb
wandb.login()
メトリクス を ログ 記録する
--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 repository で issue をオープンしてください。