Documentation Index
Fetch the complete documentation index at: https://wb-21fd5541-docs-2661.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
このページでは、W&B Launch を使用してハイパーパラメーター調整ジョブ (sweeps) を作成する方法を説明します。これにより、他の launch jobs を実行しているのと同じインフラストラクチャー上で、ハイパーパラメーター探索を自動化できます。Launch で Sweeps では、sweep 対象として指定したハイパーパラメーターとともに、sweep スケジューラー が Launch キュー に送られます。sweep スケジューラー は agent によって取得されると開始し、選択されたハイパーパラメーターを使って sweep runs を同じキューに起動します。これは、sweep が完了するか停止されるまで続きます。
デフォルトの W&B Sweep スケジューリングエンジン を使用することも、独自の カスタムスケジューラー を実装することもできます。
- 標準 sweep スケジューラー: W&B Sweeps を制御する、デフォルトの W&B Sweep スケジューリングエンジン を使用します。おなじみの
bayes、grid、random の method を利用できます。
- カスタム sweep スケジューラー: sweep スケジューラー をジョブとして実行するように設定します。このオプションでは、完全にカスタマイズできます。次のセクションでは、標準の sweep スケジューラー を拡張して logging を追加する方法の例を示します。
このガイドでは、W&B Launch が事前に設定済みであることを前提としています。W&B Launch が設定されていない場合は、Launch ドキュメントの how to get started セクションを参照してください。
Launch で Sweeps を初めて使用する場合は、basic method で sweep を作成することをおすすめします。標準の W&B スケジューリングエンジン で要件を満たせない場合は、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 ジョブの優先度を指定します。launch キューが優先度設定をサポートしていない場合、launch ジョブの優先度は “Medium” に設定されます。
- 任意: run または sweep スケジューラーの override 引数を設定します。たとえば、scheduler overrides を使用して、スケジューラーが管理する同時実行 run 数を
num_workers で設定できます。
- 任意: Destination Project ドロップダウン メニューから、sweep の保存先 project を選択します。
- Save をクリックします。
- Launch Sweep を選択します。
W&B CLI を使用して、Launch で W&B Sweep をプログラムから作成します。
- Sweep 設定を作成します。
- sweep 設定内で完全なジョブ名を指定します。
- sweep エージェントを初期化します。
手順 1 と 3 は、通常 W&B Sweep を作成するときと同じです。
たとえば、次の code snippet では、ジョブの値として 'wandb/jobs/Hello World 2:latest' を指定しています。# launch-sweep-config.yaml
job: 'wandb/jobs/Hello World 2:latest'
description: launch ジョブを使用した sweep の例
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: [BASE-IMAGE-FOR-THE-SCHEDULER]
# resource: [RESOURCE-TYPE-FOR-EXAMPLE-LOCAL-CONTAINER]
# resource_args: # runs に渡される resource 引数
# env:
# - WANDB_API_KEY
# 任意の Launch パラメーター
# launch:
# registry: [REGISTRY-FOR-IMAGE-PULLING]
sweep 設定の作成方法については、Define sweep configuration ページを参照してください。
- sweep を初期化します。設定ファイルへのパス、ジョブキュー名、W&B entity、project 名を指定します。
wandb launch-sweep [PATH-TO-YAML-FILE] --queue [QUEUE-NAME] --entity [YOUR-ENTITY] --project [PROJECT-NAME]
W&B Sweeps の詳細については、Tune Hyperparameters 章を参照してください。
このセクションでは、標準のスケジューリングエンジンが要件を満たさない場合に、カスタム sweep スケジューラーを作成する方法について説明します。W&B スケジューラーまたはカスタムスケジューラーを使用して、カスタム sweep スケジューラーを作成できます。
scheduler ジョブを使用するには、wandb CLI バージョン >= 0.15.4 が必要です
W&B スケジューラ
カスタム スケジューラ
Optuna スケジューラ
W&B の sweep スケジューリング ロジックをジョブとして使用し、Launch sweep を作成します。
- 公開されている wandb/sweep-jobs project 内の W&B scheduler ジョブを特定するか、次のジョブ名を使用します。
'wandb/sweep-jobs/job-wandb-sweep-scheduler:latest'。
- 次の例のように、この名を指す
job キーを含む scheduler ブロックを追加した設定 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 # 同時に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
スケジューラージョブを作成して、カスタムスケジューラを作成します。このガイドでは、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 では、sampling algorithms に加えて、パフォーマンスの低い runs を早期に終了するために使用できるさまざまな pruning algorithms も提供されています。これは、多数の runs を実行する場合に、時間とリソースの節約に役立ちます。これらのクラスは設定可能です。必要なパラメーターを、config file の scheduler.settings.pruner/sampler.args ブロックに渡してください。ジョブを使用して、Optuna のスケジューリングロジックによる Launch sweep を作成します。
-
まず、独自のジョブを作成するか、事前構築済みの Optuna scheduler image job を使用します。
- 独自のジョブを作成する方法の examples については、
wandb/launch-jobs リポジトリーを参照してください。
- 事前構築済みの Optuna image を使用するには、
wandb/sweep-jobs project の job-optuna-sweep-scheduler にアクセスするか、ジョブ名 wandb/sweep-jobs/job-optuna-sweep-scheduler:latest を使用してください。
-
ジョブを作成したら、sweep を作成できます。次の例のように、Optuna scheduler job を指す
job キーを含む scheduler ブロックを含めた sweep config を作成します。
# 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 # イメージから取得したスケジューラージョブに必須
num_workers: 2
# Optuna 固有の設定
settings:
pruner:
type: PercentilePruner
args:
percentile: 25.0 # runs の 75% を強制終了する
n_warmup_steps: 10 # 最初の x ステップはプルーニングを無効化する
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 スケジューラージョブの例は、wandb/launch-jobs リポジトリの jobs/sweep_schedulers にあります。このガイドでは、公開されている W&B スケジューラー Job の使い方を示すとともに、カスタム sweep スケジューラージョブを作成する手順も説明します。
このセクションでは、以前に実行した 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]