元のトレーニングスクリプト
モデルをトレーニングする Python スクリプトがあるとします (以下のコードを参照) 。目標は、検証精度 (val_acc) を最大化するハイパーパラメーターを見つけることです。
この Python スクリプトでは、train_one_epoch と evaluate_one_epoch の 2 つの関数を定義します。train_one_epoch 関数は 1 エポック分のトレーニングをシミュレートし、トレーニングの精度と損失を返します。evaluate_one_epoch 関数は検証データセットでのモデルの評価をシミュレートし、検証精度と損失を返します。
学習率、バッチサイズ、エポック数などのハイパーパラメーター値を含む、config という名前の設定辞書を定義します。この設定辞書の値によってトレーニングプロセスを制御します。
次に、一般的なトレーニングループを模した main という関数を定義します。スクリプトはエポックごとに、トレーニングデータセットと検証データセットでの精度と損失を計算します。
このコードはモックのトレーニングスクリプトです。実際にはモデルをトレーニングせず、精度と損失の値をランダムに生成してトレーニングプロセスをシミュレートします。このコードの目的は、トレーニングスクリプトに W&B を統合する方法を示すことです。
val_acc) を最大化する最適なハイパーパラメーターを検索することを目指します。
トレーニングスクリプトに W&B を追加する
このセクションでは、元のトレーニングスクリプトを変更して、sweep エージェントが各 run にハイパーパラメーターの値を渡し、得られたメトリクスを W&B で記録できるようにする方法を説明します。Python スクリプトまたはノートブックに W&B を統合する方法は、sweep の管理方法によって異なります。 W&B Python SDK を使用して sweep の開始、停止、管理を行う場合は、Python script or notebook タブの手順に従ってください。W&B CLI を使用する場合は、CLI タブの手順に従ってください。- CLI
- Python script or notebook
sweep 設定を記述した YAML 設定ファイルを作成します。設定ファイルには、sweep で探索するハイパーパラメーターを定義します。次の例では、sweep は run ごとに 詳細については、sweep 設定を定義するを参照してください。YAML ファイルの トレーニングスクリプトを更新したら、CLI から sweep を初期化して開始します。
batch_size、epochs、lr の各ハイパーパラメーターの値を変化させます。program キーには、Python スクリプトの名前を指定する必要があります。次に、コード例に以下を追加します。- W&B Python SDK (
wandb) と PyYAML (yaml) をインポートします。PyYAML は YAML 設定ファイルの読み込みに使用します。 - 設定ファイルを読み込みます。
wandb.init()を使用して、データを同期し W&B Run としてログするバックグラウンドプロセスを開始します。設定オブジェクトを config パラメーターに渡します。- ハイパーパラメーターの値はハードコードせず、
wandb.Run.configから取得して定義します。 - 最適化したいメトリクスを
wandb.Run.log()でログします。設定で定義したメトリクスは必ずログしてください。この例では、設定辞書 (sweep_configuration) で、val_accの値を最大化するように sweep を定義しています。
-
wandb sweepコマンドで sweep を初期化します。引数には YAML ファイル名を指定します。必要に応じて、--projectフラグでプロジェクト名を指定します。このコマンドを実行すると sweep ID が返されます。詳細については、sweep を初期化するを参照してください。 -
sweep ID をコピーし、次のコマンドの
[SWEEP-ID]を置き換えてから、wandb agentコマンドで sweep ジョブを開始します。[YOUR-ENTITY]は W&B の entity 名に置き換えてください。必要に応じて、--countを指定すると、エージェントが試行する run の数を制限できます (この例では 5 に設定しています) 。
sweep で W&B にメトリクスをログする最適化の対象として定義するメトリクスは、sweep 設定で定義するだけでなく、次の例は、W&B へのメトリクスのログ方法が誤っています。sweep 設定では
wandb.Run.log() でもログする必要があります。たとえば、sweep 設定で最適化するメトリクスを val_acc と定義した場合は、val_acc も W&B にログする必要があります。メトリクスをログしないと、W&B は最適化を実行できません。val_acc を最適化の対象としていますが、コードでは val_acc をキー validation 配下のネストされた辞書内にログしています。メトリクスはネストされた辞書内ではなく、直接ログする必要があります。