W&B Launch を使用して、ハイパーパラメーター調整ジョブ (sweeps) を作成します。Launch 上の sweeps では、sweep 対象として指定したハイパーパラメーターとともに、sweep scheduler が Launch キュー に送られます。sweep scheduler は agent によって取得されると開始し、選択されたハイパーパラメーターを使って sweep runs を同じキューに起動します。これは、sweep が完了するか停止されるまで続きます。
デフォルトの W&B Sweep scheduling engine を使用することも、独自の custom scheduler を実装することもできます。
- 標準 sweep scheduler: W&B Sweeps を制御する、デフォルトの W&B Sweep scheduling engine を使用します。おなじみの
bayes、grid、random の method を利用できます。
- custom sweep scheduler: sweep scheduler をジョブとして実行するように設定します。このオプションでは、完全にカスタマイズできます。標準の sweep scheduler を拡張して logging を追加する例は、以下のセクションにあります。
このガイドでは、W&B Launch が事前に設定済みであることを前提としています。W&B Launch が設定されていない場合は、Launch ドキュメントの how to get started セクションを参照してください。
Launch 上の sweeps を初めて使用する場合は、‘basic’ method で sweep を作成することをおすすめします。標準の W&B scheduling engine で要件を満たせない場合は、Launch 上の custom sweeps scheduler を使用してください。
W&B 標準スケジューラーで sweep を作成する
Launch を使用して W&B Sweeps を作成します。W&B App を使ってインタラクティブに sweep を作成することも、W&B CLI を使ってプログラムで作成することもできます。スケジューラーをカスタマイズする機能を含む Launch sweeps の高度な設定を行う場合は、CLI を使用してください。
W&B Launch で sweep を作成する前に、まず sweep 対象のジョブを作成しておいてください。詳細は Create a Job ページを参照してください。
W&B App を使ってインタラクティブに sweep を作成します。
- W&B App で自分の W&B プロジェクトにアクセスします。
- プロジェクトのサイドバーで sweeps アイコン (ほうきのアイコン) を選択します。
- 次に、Create Sweep ボタンを選択します。
- Configure Launch ボタンをクリックします。
- Job ドロップダウンメニューから、ジョブ名と、sweep の作成元にするジョブのバージョンを選択します。
- Queue ドロップダウンメニューを使用して、sweep を実行するキューを選択します。
- Job Priority ドロップダウンを使用して、launch job の優先度を指定します。launch queue が優先度設定をサポートしていない場合、launch job の優先度は “Medium” に設定されます。
- (省略可) run または sweep scheduler の override args を設定します。たとえば、scheduler overrides を使用して、scheduler が管理する同時実行 runs 数を
num_workers で設定できます。
- (省略可) Destination Project ドロップダウンメニューを使用して、sweep の保存先プロジェクトを選択します。
- Save をクリックします
- Launch Sweep を選択します。
W&B CLI を使って、Launch で W&B Sweep をプログラムから作成します。
- Sweep 設定を作成します
- sweep 設定内で完全なジョブ名を指定します
- sweep agent を初期化します。
手順 1 と 3 は、通常 W&B Sweep を作成するときと同じです。
たとえば、次の code snippet では、job の値に '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
# 省略可能な scheduler パラメーター:
# scheduler:
# num_workers: 1 # 同時実行する sweep runs
# docker_image: <scheduler のベースイメージ>
# resource: <例: local-container...>
# resource_args: # runs に渡される resource 引数
# env:
# - WANDB_API_KEY
# 省略可能な Launch パラメーター
# launch:
# registry: <イメージプル用の registry>
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 scheduler を作成する
W&B スケジューラまたは独自のスケジューラを使用して、カスタム sweep scheduler を作成できます。
スケジューラ ジョブを使用するには、wandb CLI バージョン >= 0.15.4 が必要です
W&B スケジューラー
カスタムスケジューラ
Optuna スケジューラー
ジョブとして W&B の sweep スケジューリングロジックを使用し、launch sweep を作成します。
- 公開されている wandb/sweep-jobs プロジェクトで wandb scheduler ジョブを特定するか、次のジョブ名を使用します。
'wandb/sweep-jobs/job-wandb-sweep-scheduler:latest'
- この名前を指す
job キーを含む scheduler ブロックを追加した設定 YAML を作成します。例を以下に示します。
- 新しい設定で
wandb launch-sweep コマンドを使用します。
設定例:# launch-sweep-config.yaml
description: スケジューラージョブを使用したLaunch sweepの設定
scheduler:
job: wandb/sweep-jobs/job-wandb-sweep-scheduler:latest
num_workers: 8 # 8つの同時sweep runを許可
# sweep runが実行するトレーニング/チューニングジョブ
job: wandb/sweep-jobs/job-fashion-MNIST-train:latest
method: grid
parameters:
learning_rate:
min: 0.0001
max: 0.1
カスタムスケジューラは、scheduler-job を作成することで作成できます。このガイドでは、WandbScheduler を変更して、ログ出力を増やします。
wandb/launch-jobs リポジトリ (具体的には wandb/launch-jobs/jobs/sweep_schedulers) をクローンします
- 次に、必要なログ出力の増加を実現するために
wandb_scheduler.py を変更します。例: 関数 _poll にログ出力を追加します。この関数は、新しい sweep run を起動する前に、ポーリングサイクルごとに 1 回 (間隔は設定可能) 呼び出されます。
- 変更したファイルを実行して、
python wandb_scheduler.py --project <project> --entity <entity> --name CustomWandbScheduler でジョブを作成します
- 作成されたジョブの名前を、UI または直前のコマンドの出力で確認します。特に指定がない限り、これは code-artifact ジョブです。
- 次に、スケジューラが新しいジョブを参照するように 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: 基本的なOptunaスケジューラー
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 # イメージを使用するスケジューラージョブに必須
num_workers: 2
# Optuna固有の設定
settings:
pruner:
type: PercentilePruner
args:
percentile: 25.0 # Runsの75%を強制終了
n_warmup_steps: 10 # 最初のx stepはプルーニングを無効化
parameters:
learning_rate:
min: 0.0001
max: 0.1
- 最後に、
launch-sweep コマンドを使用して、アクティブなキューに sweep を起動します:
wandb launch-sweep <config.yaml> -q <queue> -p <project> -e <entity>
Optuna sweep schedulerジョブの具体的な実装については、wandb/launch-jobsを参照してください。Optuna schedulerで実現できることのその他の例については、wandb/examplesを確認してください。
カスタム sweep scheduler ジョブで実現できることの例は、wandb/launch-jobs リポジトリ内の jobs/sweep_schedulers にあります。このガイドでは、一般公開されている Wandb Scheduler Job の使い方を紹介するとともに、カスタム sweep scheduler ジョブを作成する手順も説明します。
以前に実行した 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>