インテグレーションを設計する
ライブラリに W&B を追加する前に、次の点を決めてください。- wandb を必須の依存関係にするか、オプションの依存関係にするか。
- ユーザーが W&B のデータを保存またはアップロードせずにライブラリを実行できるようにするか。
- ライブラリでどの設定値、メトリクス、アーティファクトをログするか。
- W&B Sweeps によるハイパーパラメーター調整をサポートするか。
- モデルやデータセットなどのアーティファクトを、組織の Registry を通じて共有するか。
- ライブラリで分散トレーニングと複数のプロセスをどのように扱うか。
W&B のインストール方法を決める
ライブラリとともに W&B を自動的にインストールするか、オプションの機能として提供するかを選択します。W&B を必須の依存関係にする
W&B がライブラリの中核を担う場合は、依存関係にwandb を追加します。
requirements.txt ファイルの場合:
requirements.txt
pyproject.toml ファイルの場合:
pyproject.toml
W&B をオプションの依存関係にする
W&B がオプションの機能である場合は、wandb なしでライブラリをインストールできるようにします。
pyproject.toml で W&B をオプションの依存関係として宣言します。
pyproject.toml
ユーザーを認証する
W&B は APIキーを使用してユーザーとマシンを認証します。ライブラリから run をログするには、まず APIキーを発行し、wandb クライアントで使用できるようにする必要があります。
W&B は CLI、環境変数、wandb.login() による認証をサポートしています。
APIキーを作成する
より簡単な方法として、User Settings に移動して APIキーを作成することもできます。作成した APIキーはすぐにコピーし、パスワードマネージャーなどの安全な場所に保存してください。
Command Line から認証する
ターミナルで次のコマンドを実行します。WANDB_API_KEY 環境変数を設定します。
Python から認証する
インタラクティブな Python 環境またはノートブックで、次のコードを実行します。wandb.login() を自動的に呼び出さないでください。非対話型のワークフローが中断される可能性があります。
W&B ロギングを任意にする
W&B が run データを保存またはアップロードするかどうかを選択します。
run データを保存しない場合は
disabled を使用します。データをローカルに保存して後でアップロードする場合は offline を使用します。
disabled モードを使用する
wandb.init() に mode="disabled" を渡します。
WANDB_MODE を設定します:
offline モードを使用する
wandb.init() に mode="offline" を渡します。
WANDB_MODE を設定します。
wandb.init() を呼び出す前に環境変数を設定します:
run の初期化
認証後、run を初期化して、ライブラリからメトリクス、設定値、アーティファクトをログします。wandb.init() を呼び出し、project とチーム entity を指定します。project を省略すると、W&B はデフォルトの "uncategorized" project に run を保存します。
トレーニングループを囲むコンテキストマネージャーとして wandb.init() を使用します。ブロックを抜けると、W&B は run を終了し、プロセスが終了する前に保留中のデータを処理します。
たとえば、ライブラリに次のトレーニングループが含まれているとします。
Python
wandb.init() に渡して、wandb.Run.log() でメトリクスをログします。
Python
設定とメトリクスをログする
設定値とメトリクスを W&B にログすることで、自分やチームのメンバーが実験を比較、フィルター、グループ化、再現できます。設定値をログする
ハイパーパラメーターやその他のメタデータを記録するには、設定の辞書をwandb.init() に渡します。
わかりやすいキーと JSON にシリアライズ可能な値を使用します:
wandb.init() に渡します:
wandb.Run.config.update() で追加できます:
メトリクスをログする
トレーニング中に損失や精度などのメトリクスをログします。各キーがメトリクス名、各値がメトリクスの値となる辞書を作成します。この辞書をwandb.Run.log() に渡します。
次のコードスニペットは、トレーニングと検証のメトリクスを W&B にログします:
Python
train/ や val/ などの接頭辞を使用して、関連するメトリクスをグループ化します。
サポートされるデータタイプをログする方法、自動的に追跡されるデータ、ベストプラクティスについては、メトリクスとデータをログするを参照してください。
モデルとデータセットをトラッキングするには、アーティファクトでモデルとデータセットをトラッキングするセクションを参照してください。
カスタムのログ軸を定義する
デフォルトでは、W&B はログされたメトリクスを、自動的に増加する step に対してプロットします。wandb.Run.log() を呼び出すたびに step が進みます。
wandb.Run.define_metric() を使用すると、エポックやグローバルステップなど、別の値に対してメトリクスをプロットできます。
次の例では、x_axis_squared を validation_loss の X 軸として定義します。ループの各反復処理で、x_axis_squared はインデックス i の二乗となり、validation_loss はランダムに生成された値となります。
Python
アーティファクトでモデルとデータセットをトラッキングする
メトリクスに加えて、ライブラリが生成または使用するモデルとデータセットを永続化することで、自分やチームのメンバーが run を再現して比較できます。 W&B Artifacts を使用して、ライブラリが生成または使用するモデル、データセット、その他のファイルをバージョン管理します。 アーティファクトのサポートを追加する前に、次の点を決めてください。- ログするファイル。
- アーティファクトをログするかどうかを任意にするかどうか。
- チェックポイントをログする頻度。
- アーティファクト名とエイリアスの付け方。
- run の入力と出力を表すアーティファクト。
モデル チェックポイントをログする
モデル チェックポイントをアーティファクトとしてログすることで、トレーニング済みの重みを復元、バージョン管理、共有できます。アーティファクト名に run ID を含めて、各チェックポイントをソースの run に関連付けます。 次の例では、10 エポックごとにチェックポイントをログします。名に run ID を含むアーティファクトを作成し、ローカル ディレクトリからモデルの重みを追加して、カスタム エイリアスを付けてアーティファクトをログします。Python
run の入力をトラッキングする
run がデータセットやモデル チェックポイントなどのアーティファクトを使用する場合は、wandb.Run.use_artifact() を使用します。W&B は、そのアーティファクトを run の入力として記録します。
アーティファクトの特定のバージョンを参照するには、アーティファクト名と、必要に応じてエイリアスを指定します。アーティファクト名の形式は artifact_name:version または artifact_name:alias です。
Python
run の出力をトラッキングする
wandb.Run.log_artifact() を使用すると、アーティファクトを run の出力としてログできます。
wandb.Artifact()でアーティファクトを作成します。- アーティファクトに 1 つ以上のファイルを追加します。
wandb.Run.log_artifact()でアーティファクトをログします。
アーティファクトのダウンロード
W&B Public API を使用すると、run を作成したり、run の入力関係を記録したりせずに、アーティファクトをダウンロードできます。アーティファクトを Registry にリンクする
Registry を使用して、チーム間でアーティファクトのバージョンを共有、管理します。 アーティファクトのバージョンをリンクする前に、次の事項を決めてください。送信先の Registry は、あらかじめ作成されている必要があります。
ハイパーパラメーターを調整する
ライブラリがハイパーパラメーター調整をサポートしている場合は、W&B Sweeps を統合して、グリッド探索、ランダム探索、ベイズ探索を実行します。 詳細については、Sweeps を参照してください。分散トレーニングをサポートする
ライブラリが複数のプロセスまたはマシンをサポートする場合は、どのプロセスが run を作成してデータをログするかを定義します。 一般的なアプローチは次のとおりです。- メインプロセスからのみログします。この方法により、メトリクスやアーティファクトの重複を避けられます。
- 各プロセスごとに1つの run を作成し、共有の
group値で run をグループ化します。