メインコンテンツへスキップ
このガイドでは、ハイパーパラメーター探索を最適化するために、W&B を Python のトレーニングスクリプトやノートブックに統合する際の推奨事項を紹介します。これらの推奨事項に従うことで、W&B Sweeps を使用してハイパーパラメーターの値を探索し、トレーニングおよび検証メトリクスをログして、優れたモデル性能をもたらす設定を特定できます。 このガイドは、すでに Python のトレーニングスクリプトを持っており、ハイパーパラメーター sweep のサポートを追加したい機械学習の実務者を対象としています。以下のセクションでは、トレーニングスクリプトの例を順に説明し、その後 W&B Sweeps で動作するように更新する方法を示します。

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

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

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

このセクションでは、sweep エージェントが各 run にハイパーパラメーター値を渡し、W&B が結果のメトリクスを記録できるように、元のトレーニングスクリプトを変更する方法を説明します。W&B を Python スクリプトまたはノートブックにどのように統合するかは、sweeps の管理方法によって異なります。 sweeps の開始、停止、管理に W&B Python SDK を使用するには、Python script or notebook タブの手順に従ってください。代わりに W&B CLI を使用する場合は、CLI タブの手順に従ってください。
sweep の設定を含む YAML 設定ファイルを作成します。この設定ファイルには、sweep で探索するハイパーパラメーターを記述します。次の例では、各 run で batch_sizeepochslr の各ハイパーパラメーターを変更します。
詳細は、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() を使用して、最適化したいメトリクスをログします。設定で定義したメトリクスを必ずログする必要があります。この例の設定 dictionary (sweep_configuration) では、val_acc の値を最大化するように sweep を定義しています。
トレーニングスクリプトを更新したら、CLI から sweep を初期化して開始します。
  1. wandb sweep コマンドを使用して sweep を初期化します。YAML ファイル名を指定します。必要に応じて、--project フラグにプロジェクト名を設定します。
    これにより sweep ID が返されます。詳細は、Initialize sweeps を参照してください。
  2. sweep ID をコピーし、次のコマンドの [SWEEP-ID] を置き換えて、wandb agent コマンドで sweep ジョブを開始します。[YOUR-ENTITY] は W&B のエンティティ名に置き換えます。必要に応じて、--count を設定して、エージェントが試行する Runs の数を制限します (この例では 5 に設定しています) 。
sweep エージェントはトレーニングスクリプトを繰り返し実行し、そのたびに YAML 設定内の異なるハイパーパラメーター値の組み合わせを使用して、結果を W&B にログします。詳細は、Start sweep jobs を参照してください。
sweep で W&B にメトリクスをログするsweep の設定と wandb.Run.log() の両方で、定義した最適化対象のメトリクスをログする必要があります。たとえば、sweep の設定で最適化するメトリクスを val_acc と定義した場合は、val_acc も W&B にログする必要があります。メトリクスをログしないと、W&B は最適化を実行できません。
以下は、メトリクスを W&B にログする誤った例です。sweep の設定で最適化対象になっているメトリクスは val_acc ですが、このコードでは validation キー配下のネストされた辞書内に val_acc をログしています。メトリクスはネストされた辞書内ではなく、直接ログする必要があります。