コマンドラインから sweep を初期化し、sweep エージェント を起動する場合は、YAML ファイルで sweep 設定を定義してください。Python スクリプトまたはノートブック 内ですべて完結させて sweep を初期化し、開始する場合は、Python の辞書 で sweep を定義してください。
基本構造
sweep 設定は、YAML または Python の辞書のいずれかを使用して、キーと値のペアおよびネストされた構造で定義します。 sweep 設定のトップレベルキーを使用して、sweep 検索の特性を定義します。たとえば、sweep のname、検索対象の parameters、検索 method などです。
たとえば、次のコードスニペットは、YAML ファイル内と Python の辞書内で定義した同じ sweep 設定を示しています。sweep 設定では、program、name、method、metric、parameters の 5 つのトップレベルキーを指定しています。
- CLI
- Python スクリプトまたはノートブック
コマンドラインから Sweeps をインタラクティブに管理するには、YAML ファイルで sweep 設定を定義します。
config.yaml
parameters キーの中には、learning_rate、batch_size、epochs、optimizer の各キーがネストされています。指定した各ネストキーには、1 つ以上の値、分布、確率などを指定できます。詳細は、Sweep configuration options の parameters セクションを参照してください。
二重にネストしたパラメーター
関連するハイパーパラメーターをまとめてグループ化したい場合や、トレーニング コードでネストされた設定構造を想定している場合は、ネストされたパラメーターを使用します。ネストされたパラメーターを定義するには、トップレベルのパラメーター名の下にparameters キーを追加します。
次の例は、ネストされたパラメーター nested_category_1、nested_category_2、nested_category_3 を含む sweep 設定を示しています。各ネストされたパラメーターには、さらに momentum と weight_decay という 2 つのパラメーターが含まれています。次のコード例は、この設定を YAML ファイルと Python の辞書の両方で示しています。
- CLI
- Python script or notebook
Sweep 設定テンプレート
このテンプレートを、新しい sweep 設定の出発点として使用してください。ここでは、最も一般的なパラメーターと早期終了のパターンを示しています。hyperparameter_name は使用するハイパーパラメーターの名に置き換え、角括弧で囲まれた値も必要に応じて置き換えてください。
config.yaml
!!float演算子を追加して、値を浮動小数点数として扱います。たとえば、min: !!float 1e-5です。詳細は、マクロとカスタム コマンド引数の例をご覧ください。
sweep 設定例
以下の sweep 設定は、一般的なシナリオを示したものです。ご自身のトレーニングスクリプトに合わせて sweep を調整する際の参考として使用してください。- CLI
- Python スクリプトまたはノートブック
config.yaml
Bayes hyperbandの例
次の例では、ベイズ探索と Hyperband の早期終了を組み合わせることで、パフォーマンスの低い run を早い段階で停止し、より有望な設定にリソースを割り当てます。early_terminate の反復回数の最小値または最大値を指定する方法を示します。
- 最小反復回数
- 最大反復回数
この例でのブラケットは
[3, 3*eta, 3*eta*eta, 3*eta*eta*eta] で、[3, 9, 27, 81] になります。マクロとカスタムコマンド引数の例
この例では、デフォルトの invocation よりも細かく制御したい場合に、sweep エージェントが各試行で実行するコマンドをどのように構築するかを示します。 より複雑なコマンドライン引数では、マクロを使用して環境変数、Python インタープリター、追加の引数を渡せます。W&B は事前定義済みのマクロと、sweep 設定で指定できるカスタムコマンドライン引数をサポートしています。 たとえば、次の sweep 設定 (sweep.yaml) では、Python スクリプト (run.py) を実行するコマンドを定義しており、sweep の実行時に ${env}、${interpreter}、${program} の各マクロが適切な値に置き換えられます。
--batch_size=${batch_size}、--test=True、--optimizer=${optimizer} の各引数ではカスタムマクロを使用して、sweep 設定で定義された batch_size、test、optimizer の各パラメーターの値を渡します。
sweep.yaml
run.py では、argparse モジュールを使って、これらのコマンドライン引数を解析できます。
run.py
ブール引数
sweep がコマンド引数としてブールフラグを渡す場合、argparse はデフォルトではブール値の文字列を解釈しないため、トレーニングスクリプトで追加の処理が必要です。
argparse モジュールは、デフォルトではブール引数をサポートしていません。ブール引数を定義するには、action パラメーターを使用するか、ブール値の文字列表現をブール型に変換するカスタム関数を使用します。
たとえば、次のコードスニペットを使用してブール引数を定義できます。ArgumentParser の引数として store_true または store_false を渡します:
str2bool関数を定義しています: