コマンドラインから sweep を初期化して sweep エージェントを起動する場合は、YAML ファイルで sweep 設定を定義します。sweep の初期化から開始までをすべて Python スクリプトまたはノートブック内で行う場合は、Python の辞書で sweep を定義します。
基本構造
sweep 設定は、YAML または Python の辞書を使用して、キーと値のペアとネストされた構造で定義します。 sweep 設定のトップレベルキーでは、sweep のname、探索対象の parameters、探索 method など、sweep 探索の特性を定義します。
たとえば、次のコードスニペットは、同じ sweep 設定を YAML ファイルと Python の辞書でそれぞれ定義した例です。この sweep 設定では、program、name、method、metric、parameters の 5 つのトップレベルキーを指定しています。
- CLI
- Python script or notebook
コマンドラインから sweep をインタラクティブに管理するには、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 が含まれています。以下のコード例では、同じ設定を YAML ファイルと Python の辞書の両方の形式で示します。
- CLI
- Python script or notebook
sweep 設定のテンプレート
新しい sweep 設定を作成する際は、このテンプレートを出発点として使用してください。このテンプレートには、よく使われるパラメーターと早期終了のパターンが含まれています。hyperparameter_name を実際のハイパーパラメーター名に置き換え、角かっこで囲まれた値もそれぞれ適切な値に置き換えてください。
config.yaml
!!float オペレーターを付加します。このオペレーターは値を浮動小数点数にキャストします。例: min: !!float 1e-5。詳細については、マクロとカスタムコマンドの引数の例を参照してください。
sweep 設定のサンプル
以下の sweep 設定は、よくあるシナリオの例です。独自のトレーニングスクリプトに合わせて sweep を調整する際の参考にしてください。- CLI
- Python script or notebook
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 関数を定義しています。