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