Sweeps on Launch
W&B Launchでハイパーパラメータチューニングジョブ (sweeps) を作成します。Launchでsweepsを使用すると、指定されたハイパーパラメータを使用してsweepスケジューラがLaunch Queueにプッシュされます。エージェントがこれをピックアップすると、選択されたハイパーパラメータでsweep runsを同じキューに起動します。これがsweepが終了するか停止するまで続きます。
デフォルトのW&B Sweepスケジューリングエンジンを使用するか、独自のカスタムスケジューラを実装することができます:
- 標準のsweepスケジューラ:W&B Sweepsを制御するデフォルトのW&B Sweepスケジューリングエンジンを使用します。
bayes
、grid
、random
メソッドが利用可能です。 - カスタムsweepスケジューラ:ジョブとして稼働するようにsweepスケジューラを設定します。このオプションにより、完全なカスタマイズが可能になります。標準のsweepスケジューラを拡張してログを追加する方法の例は、以下のセクションにあります。
このガイドは、W&B Launchが事前に設定されていることを前提としています。もしW&B Launchが設定されていない場合は、Launchドキュメントの開始方法セクションを参照してください。
初めてLaunchのsweepsを使用する場合は、「basic」メソッドを使用してsweepを作成することをおすすめします。標準のW&Bスケジューリングエンジンがニーズを満たさない場合は、カスタムのLaunch sweepsスケジューラを使用してください。
W&B標準スケジューラを使用してsweepを作成する
Launchを使用してW&B Sweepsを作成します。W&B Appを使用してインタラクティブにsweepを作成するか、W&B CLIを使用してプログラム的に作成します。Launch sweepsの高度な設定(スケジューラのカスタマイズを含む)には、CLIを使用してください。
W&B Launchを使用してsweepを作成する前に、まずsweepを実行するジョブを作成してください。詳細については、ジョブの作成ページを参照してください。
- W&B App
- CLI
- W&B Appで自分のW&Bプロジェクトに移動します。
- 左パネルのsweepsアイコン(ほうきの画像)を選択します。
- 次に、Create Sweepボタンを選択します。
- Configure Launch 🚀ボタンをクリックします。
- Jobドロップダウンメニューから、sweepを作成するジョブの名前とジョブバージョンを選択します。
- Queueドロップダウンメニューを使用して、スウィープを実行するキューを選択します。
- Job Priorityドロップダウンを使用して、Launchジョブの優先順位を指定します。Launchキューが優先順位をサポートしていない場合、Launchジョブの優先順位は「Medium」に設定されます。
- (オプション)runまたはsweepスケジューラのオーバーライドの引数を構成します。例えば、スケジューラのオーバーライドを使用して、
num_workers
を使用してスケジューラが管理する同時実行数を設定します。 - (オプション)Destination Projectドロップダウンメニューを使用してsweepを保存するプロジェクトを選択します。
- Saveをクリックします。
- Launch Sweepを選択します。
W&B CLIを使用してプログラム的にW&B SweepをLaunchで作成する。
- Sweep設定を作成する
- sweep設定内で完全なジョブ名を指定する
- sweep agentを初期化する
ステップ1と3は、通常、W&B Sweepを作成する際に行うのと同じ手順です。
例えば、以下のコードスニペットでは、ジョブ値として'wandb/jobs/Hello World 2:latest'
を指定しています:
# launch-sweep-config.yaml
job: 'wandb/jobs/Hello World 2:latest'
description: sweep examples using launch jobs
method: bayes
metric:
goal: minimize
name: loss_metric
parameters:
learning_rate:
max: 0.02
min: 0
distribution: uniform
epochs:
max: 20
min: 0
distribution: int_uniform
# Optional scheduler parameters:
# scheduler:
# num_workers: 1 # concurrent sweep runs
# docker_image: <base image for the scheduler>
# resource: <ie. local-container...>
# resource_args: # resource arguments passed to runs
# env:
# - WANDB_API_KEY
# Optional Launch Params
# launch:
# registry: <registry for image pulling>
sweep設定方法については、Define sweep configurationページを参照してください。
- 次に、sweepを初期化します。設定ファイルのパス、ジョブキューの名前、自分のW&B entity、およびプロジェクトの名前を指定します。
wandb launch-sweep <path/to/yaml/file> --queue <queue_name> --entity <your_entity> --project <project_name>
W&B Sweepsの詳細については、Tune Hyperparametersチャプターを参照してください。
カスタムsweepスケジューラを作成する
W&Bスケジューラまたはカスタムスケジューラを使用してカスタムスイープスケジューラを作成します。
スケジューラジョブを使用するには、wandb CLI バージョン >= 0.15.4
が必要です。
- Wandb scheduler
- Optuna scheduler
- Custom scheduler
W&B sweepスケジューリングロジックをジョブとして使用してLaunch sweepを作成します。
- 公開されているwandb/sweep-jobsプロジェクトのWandb schedulerジョブを特定するか、ジョブ名を使用します:
'wandb/sweep-jobs/job-wandb-sweep-scheduler:latest'
scheduler
ブロックとこの名前を指すjob
キーを含む設定yamlを作成します(下の例を参照)。- 新しい設定を使って
wandb launch-sweep
コマンドを使用します。
設定例:
# launch-sweep-config.yaml
description: Launch sweep config using a scheduler job
scheduler:
job: wandb/sweep-jobs/job-wandb-sweep-scheduler:latest
num_workers: 8 # allows 8 concurrent sweep runs
# training/tuning job that the sweep runs will execute
job: wandb/sweep-jobs/job-fashion-MNIST-train:latest
method: grid
parameters:
learning_rate:
min: 0.0001
max: 0.1
カスタムスケジューラは、スケジューラジョブを作成することで作成できます。このガイドの目的のために、WandbScheduler
を変更してログを増やします。
wandb/launch-jobs
リポジトリ(具体的には:wandb/launch-jobs/jobs/sweep_schedulers
)をクローンする- より多くのログを提供するために
wandb_scheduler.py
を変更します。例:_poll
関数にロギングを追加します。これは、新しいsweep runsを開始する前のポーリングサイクルごとに(設定可能なタイミングで)呼び出されます。 - 変更されたファイルを使用してジョブを作成します:
python wandb_scheduler.py --project <project> --entity <entity> --name CustomWandbScheduler
- UIまたは前の呼び出しの出力で作成されたジョブの名前を特定します。特に指定がない限り、これはコードアーティファクトジョブになります。
- スケジューラーが新しいジョブを指すようにsweep設定を作成します!
...
scheduler:
job: '<entity>/<project>/job-CustomWandbScheduler:latest'
...
Optunaは、特定のモデルに対して最適なハイパーパラメータを見つけるためにさまざまなアルゴリズムを使用するハイパーパラメータ最適化フレームワークです(W&Bと類似しています)。サンプリングアルゴリズムに加えて、Optunaはプルーニングアルゴリズムも提供しており、パフォーマンスの悪いrunを早期に終了させることができます。これは、多くのrunを実行する際に時間とリソースを節約するのに特に有用です。クラスは非常に設定可能で、期待されるパラメータをscheduler.settings.pruner/sampler.args
ブロックに渡すだけです。
Optunaのスケジューリングロジックをジョブとして使用してLaunch sweepを作成します。
- まず、自分のジョブを作成するか、事前に作成されたOptunaスケジューラ画像のジョブを使用します。
- 自分のジョブを作成する方法の例については、
wandb/launch-jobs
リポジトリを参照してください。 - 事前に作成されたOptuna画像を使用する場合、
wandb/sweep-jobs
プロジェクト内のjob-optuna-sweep-scheduler
に移動するか、ジョブ名を使用することができます:wandb/sweep-jobs/job-optuna-sweep-scheduler:latest
。
- 自分のジョブを作成する方法の例については、
- ジョブを作成した後、sweepを作成できます。Optunaスケジューラジョブを指す
job
キーを含むscheduler
ブロックを含むsweep設定を構築します(以下の例を参照)。
# optuna_config_basic.yaml
description: A basic Optuna scheduler
job: wandb/sweep-jobs/job-fashion-MNIST-train:latest
run_cap: 5
metric:
name: epoch/val_loss
goal: minimize
scheduler:
job: wandb/sweep-jobs/job-optuna-sweep-scheduler:latest
resource: local-container # required for scheduler jobs sourced from images
num_workers: 2
# optuna specific settings
settings:
pruner:
type: PercentilePruner
args:
percentile: 25.0 # kill 75% of runs
n_warmup_steps: 10 # pruning disabled for first x steps
parameters:
learning_rate:
min: 0.0001
max: 0.1
- 最後に、launch-sweepコマンドを使用してアクティブなキューにsweepをローンチします:
wandb launch-sweep <config.yaml> -q <queue> -p <project> -e <entity>
Optunaスイープスケジューラジョブの具体的な実装については、wandb/launch-jobsを参照してください。Optunaスケジューラで可能なことの例については、wandb/examplesをチェックしてください。
カスタムsweepスケジューラジョブで可能な例は、jobs/sweep_schedulers
ディレクトリにあるwandb/launch-jobsリポジトリにあります。このガイドでは、一般に公開されているWandb Scheduler Jobの使用方法と、カスタムsweepスケジューラジョブを作成するプロセスをご紹介します。
Launchでsweepsを再開する方法
以前に起動されたsweepからLaunch-sweepを再開することも可能です。ハイパーパラメータやトレーニングジョブは変更できませんが、スケジューラスペシフィックなパラメータや送信先のキューは変更できます。
初期のsweepが "latest"のようなエイリアスを持つトレーニングジョブを使用していた場合、再開すると結果が異なる可能性があります。これは、最後のrun以降に最新のジョブバージョンが変更された場合です。
- 以前に実行されたlaunch sweepのsweep名/IDを特定します。sweep IDは8文字の文字列(例えば、
hhd16935
)であり、W&B Appのプロジェクトで確認できます。 - スケジューラのパラメータを変更する場合は、更新された設定ファイルを構築します。
- ターミナルで、以下のコマンドを実行します。
<
と>
で囲まれた内容を自分の情報で置き換えてください:
wandb launch-sweep <optional config.yaml> --resume_id <sweep id> --queue <queue_name>