メインコンテンツへスキップ
このガイドでは、ハイパーパラメーター探索を最適化するために、W&B を Python のトレーニングスクリプトやノートブックに統合する際の推奨事項を紹介します。

元のトレーニングスクリプト

モデルをトレーニングする Python スクリプトがあるとします (以下を参照) 。ここでの目的は、検証精度 (val_acc) を最大化するハイパーパラメーターを検索することです。 Python スクリプトでは、train_one_epochevaluate_one_epoch の 2 つの関数を定義します。train_one_epoch 関数は 1 エポック分のトレーニングをシミュレートし、トレーニング精度と損失を返します。evaluate_one_epoch 関数は検証データセットでモデルを評価する処理をシミュレートし、検証精度と損失を返します。 また、学習率 (lr) 、バッチサイズ (batch_size) 、エポック数 (epochs) などのハイパーパラメーター値を含む設定辞書 (config) を定義します。この設定辞書の値がトレーニング処理を制御します。 次に、一般的なトレーニングループを模した main という関数を定義します。各エポックで、トレーニングデータセットと検証データセットに対する精度と損失を計算します。
このコードはモックのトレーニングスクリプトです。実際にモデルをトレーニングするのではなく、ランダムな精度と損失の値を生成してトレーニング処理をシミュレートします。このコードの目的は、トレーニングスクリプトに W&B を統合する方法を示すことです。
次のセクションでは、トレーニング中のハイパーパラメーターとメトリクスをトラッキングするために、Python スクリプトに W&B を追加します。W&B を使用して、検証精度 (val_acc) を最大化する最適なハイパーパラメーターを検索します。

トレーニングスクリプトに W&B を追加する

トレーニングスクリプトを更新して、W&B を組み込みます。W&B を Python スクリプトまたはノートブックにどのように統合するかは、sweeps の管理方法によって異なります。 sweeps の開始、停止、管理に W&B Python SDK を使用するには、Python script or notebook タブの手順に従ってください。代わりに W&B CLI を使用する場合は、CLI タブの手順に従ってください。
sweep の設定を記述した YAML 設定ファイルを作成します。この 設定ファイルには、sweep で探索するハイパーパラメーターを記述します。次の 例では、各 sweep の実行で、バッチサイズ (batch_size) 、エポック数 (epochs) 、および 学習率 (lr) のハイパーパラメーターを変化させます。
W&B sweep 設定の作成方法の詳細については、sweep 設定を定義するを参照してください。YAML ファイルでは、program キーに Python スクリプト名を指定する必要があります。次に、コード例に以下を追加します。
  1. W&B Python SDK (wandb) と PyYAML (yaml) を import します。PyYAML は YAML 設定ファイルを読み込むために使用します。
  2. 設定ファイルを読み込みます。
  3. wandb.init() を使用して、データの Sync とログを行うバックグラウンドプロセスを開始し、W&B Run を開始します。config オブジェクトを config パラメーターに渡します。
  4. ハイパーパラメーターの値は、ハードコードされた値を使用する代わりに wandb.Run.config から取得します。
  5. 最適化するメトリクスを wandb.Run.log() でログします。設定で定義したメトリクスを必ずログする必要があります。この例の設定 dict (sweep_configuration) では、val_acc の値を最大化するように sweep を定義しています。
CLIで、sweep agent が試行する run の最大数を設定します。これは省略可能です。この例では、 最大数を 5 に設定しています。
続いて、wandb sweep コマンドで sweep を初期化します。YAML ファイル名を指定します。必要に応じて、プロジェクトフラグ (--project) にプロジェクト名も指定します。
これにより、sweep ID が返されます。sweep の初期化方法について詳しくは、 sweeps を初期化するを参照してください。sweep ID をコピーし、次のコードスニペット内の sweepID を置き換えて、 wandb agent コマンドで sweep ジョブを開始します:
詳細は、sweep ジョブを開始するを参照してください。
sweep で W&B にメトリクスをログするsweep の設定と wandb.Run.log() の両方で、定義した最適化対象のメトリクスをログする必要があります。たとえば、sweep の設定で最適化するメトリクスを val_acc と定義した場合は、val_acc も W&B にログする必要があります。メトリクスをログしないと、W&B は何を最適化すべきか判断できません。
以下は、メトリクスを W&B にログする誤った例です。sweep の設定で最適化対象になっているメトリクスは val_acc ですが、このコードでは validation キー配下のネストされた辞書内に val_acc をログしています。メトリクスはネストされた辞書内ではなく、直接ログする必要があります。