> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-wbdocs-1882.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Launch でハイパーパラメーター sweep を自動化する方法を紹介します。

# W&B Launch で sweep を作成する

<Card title="Colab で試す" href="https://colab.research.google.com/drive/1WxLKaJlltThgZyhc7dcZhDQ6cjVQDfil#scrollTo=AFEzIxA6foC7" icon="python" />

W\&B Launch を使用して、ハイパーパラメーター調整ジョブ ([sweeps](/ja/models/sweeps/)) を作成します。Launch 上の sweeps では、sweep 対象として指定したハイパーパラメーターとともに、sweep scheduler が Launch キュー に送られます。sweep scheduler は agent によって取得されると開始し、選択されたハイパーパラメーターを使って sweep runs を同じキューに起動します。これは、sweep が完了するか停止されるまで続きます。

デフォルトの W\&B Sweep scheduling engine を使用することも、独自の custom scheduler を実装することもできます。

1. 標準 sweep scheduler: [W\&B Sweeps](/ja/models/sweeps/) を制御する、デフォルトの W\&B Sweep scheduling engine を使用します。おなじみの `bayes`、`grid`、`random` の method を利用できます。
2. custom sweep scheduler: sweep scheduler をジョブとして実行するように設定します。このオプションでは、完全にカスタマイズできます。標準の sweep scheduler を拡張して logging を追加する例は、以下のセクションにあります。

<Note>
  このガイドでは、W\&B Launch が事前に設定済みであることを前提としています。W\&B Launch が設定されていない場合は、Launch ドキュメントの [how to get started](./#how-to-get-started) セクションを参照してください。
</Note>

<Note>
  Launch 上の sweeps を初めて使用する場合は、'basic' method で sweep を作成することをおすすめします。標準の W\&B scheduling engine で要件を満たせない場合は、Launch 上の custom sweeps scheduler を使用してください。
</Note>

<div id="create-a-sweep-with-a-wb-standard-scheduler">
  ## W\&B 標準スケジューラーで sweep を作成する
</div>

Launch を使用して W\&B Sweeps を作成します。W\&B App を使ってインタラクティブに sweep を作成することも、W\&B CLI を使ってプログラムで作成することもできます。スケジューラーをカスタマイズする機能を含む Launch sweeps の高度な設定を行う場合は、CLI を使用してください。

<Note>
  W\&B Launch で sweep を作成する前に、まず sweep 対象のジョブを作成しておいてください。詳細は [Create a Job](/ja/platform/launch/create-launch-job/) ページを参照してください。
</Note>

<Tabs>
  <Tab title="W&B App">
    W\&B App を使ってインタラクティブに sweep を作成します。

    1. W\&B App で自分の W\&B プロジェクトにアクセスします。
    2. プロジェクトのサイドバーで sweeps アイコン (ほうきのアイコン) を選択します。
    3. 次に、**Create Sweep** ボタンを選択します。
    4. **Configure Launch** ボタンをクリックします。
    5. **Job** ドロップダウンメニューから、ジョブ名と、sweep の作成元にするジョブのバージョンを選択します。
    6. **Queue** ドロップダウンメニューを使用して、sweep を実行するキューを選択します。
    7. **Job Priority** ドロップダウンを使用して、launch job の優先度を指定します。launch queue が優先度設定をサポートしていない場合、launch job の優先度は "Medium" に設定されます。
    8. (省略可) run または sweep scheduler の override args を設定します。たとえば、scheduler overrides を使用して、scheduler が管理する同時実行 runs 数を `num_workers` で設定できます。
    9. (省略可) **Destination Project** ドロップダウンメニューを使用して、sweep の保存先プロジェクトを選択します。
    10. **Save** をクリックします
    11. **Launch Sweep** を選択します。

    <Frame>
      <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/wPEtZnTqyM95ckpT/images/launch/create_sweep_with_launch.png?fit=max&auto=format&n=wPEtZnTqyM95ckpT&q=85&s=91eff3bdfbd55c9222f37923a2511ba9" alt="Launch sweep の設定" width="2518" height="1868" data-path="images/launch/create_sweep_with_launch.png" />
    </Frame>
  </Tab>

  <Tab title="CLI">
    W\&B CLI を使って、Launch で W\&B Sweep をプログラムから作成します。

    1. Sweep 設定を作成します
    2. sweep 設定内で完全なジョブ名を指定します
    3. sweep agent を初期化します。

    <Note>
      手順 1 と 3 は、通常 W\&B Sweep を作成するときと同じです。
    </Note>

    たとえば、次の code snippet では、job の値に `'wandb/jobs/Hello World 2:latest'` を指定しています。

    ```yaml theme={null}
    # 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](/ja/platform/launch/sweeps-on-launch/) ページを参照してください。

    4. 次に、sweep を初期化します。設定ファイルへのパス、ジョブキュー名、W\&B entity、プロジェクト名を指定します。

    ```bash theme={null}
    wandb launch-sweep <path/to/yaml/file> --queue <queue_name> --entity <your_entity>  --project <project_name>
    ```

    W\&B Sweeps の詳細については、[Tune Hyperparameters](/ja/models/sweeps/) 章を参照してください。
  </Tab>
</Tabs>

<div id="create-a-custom-sweep-scheduler">
  ## カスタム sweep scheduler を作成する
</div>

W\&B スケジューラまたは独自のスケジューラを使用して、カスタム sweep scheduler を作成できます。

<Note>
  スケジューラ ジョブを使用するには、wandb CLI バージョン >= `0.15.4` が必要です
</Note>

<Tabs>
  <Tab title="W&B スケジューラー">
    ジョブとして W\&B の sweep スケジューリングロジックを使用し、launch sweep を作成します。

    1. 公開されている wandb/sweep-jobs プロジェクトで wandb scheduler ジョブを特定するか、次のジョブ名を使用します。
       `'wandb/sweep-jobs/job-wandb-sweep-scheduler:latest'`
    2. この名前を指す `job` キーを含む `scheduler` ブロックを追加した設定 YAML を作成します。例を以下に示します。
    3. 新しい設定で `wandb launch-sweep` コマンドを使用します。

    設定例:

    ```yaml theme={null}
    # 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
    ```
  </Tab>

  <Tab title="カスタムスケジューラ">
    カスタムスケジューラは、scheduler-job を作成することで作成できます。このガイドでは、`WandbScheduler` を変更して、ログ出力を増やします。

    1. `wandb/launch-jobs` リポジトリ (具体的には `wandb/launch-jobs/jobs/sweep_schedulers`) をクローンします
    2. 次に、必要なログ出力の増加を実現するために `wandb_scheduler.py` を変更します。例: 関数 `_poll` にログ出力を追加します。この関数は、新しい sweep run を起動する前に、ポーリングサイクルごとに 1 回 (間隔は設定可能) 呼び出されます。
    3. 変更したファイルを実行して、`python wandb_scheduler.py --project <project> --entity <entity> --name CustomWandbScheduler` でジョブを作成します
    4. 作成されたジョブの名前を、UI または直前のコマンドの出力で確認します。特に指定がない限り、これは code-artifact ジョブです。
    5. 次に、スケジューラが新しいジョブを参照するように sweep 設定を作成します。

    ```yaml theme={null}
    ...
    scheduler:
      job: '<entity>/<project>/job-CustomWandbScheduler:latest'
    ...
    ```
  </Tab>

  <Tab title="Optuna スケジューラー">
    Optuna は、さまざまなアルゴリズムを使用して、指定したモデルに最適なハイパーパラメーターを検索するハイパーパラメーター最適化フレームワークです (W\&B と同様) 。[サンプリングアルゴリズム](https://optuna.readthedocs.io/en/stable/reference/samplers/index.html)に加えて、Optuna には、パフォーマンスの低い run を早期に終了するために使用できるさまざまな[プルーニングアルゴリズム](https://optuna.readthedocs.io/en/stable/reference/pruners.html)も用意されています。これは特に多数の run を実行する場合に便利で、時間とリソースを節約できます。これらのクラスは柔軟に設定でき、設定ファイルの `scheduler.settings.pruner/sampler.args` ブロックに必要なパラメーターを渡すだけで使用できます。

    ジョブを使用して、Optuna のスケジューリングロジックに基づく Launch sweep を作成します。

    1. まず、独自のジョブを作成するか、事前構築済みの Optuna スケジューラーイメージジョブを使用します。
       * 独自のジョブを作成する方法の例については、[`wandb/launch-jobs`](https://github.com/wandb/launch-jobs/blob/main/jobs/sweep_schedulers) リポジトリを参照してください。
       * 事前構築済みの Optuna イメージを使用するには、`wandb/sweep-jobs` プロジェクト内の `job-optuna-sweep-scheduler` にアクセスするか、ジョブ名 `wandb/sweep-jobs/job-optuna-sweep-scheduler:latest` を使用します。

    2. ジョブを作成したら、sweep を作成できます。Optuna スケジューラージョブを指す `job` キーを含む `scheduler` ブロックを含む sweep 設定を作成します (以下の例を参照) 。

    ```yaml theme={null}
      # 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
    ```

    3. 最後に、`launch-sweep` コマンドを使用して、アクティブなキューに sweep を起動します:

    ```bash theme={null}
    wandb launch-sweep <config.yaml> -q <queue> -p <project> -e <entity>
    ```

    Optuna sweep schedulerジョブの具体的な実装については、[wandb/launch-jobs](https://github.com/wandb/launch-jobs/blob/main/jobs/sweep_schedulers/optuna_scheduler/optuna_scheduler.py)を参照してください。Optuna schedulerで実現できることのその他の例については、[wandb/examples](https://github.com/wandb/examples/tree/master/examples/launch/launch-sweeps/optuna-scheduler)を確認してください。
  </Tab>
</Tabs>

カスタム sweep scheduler ジョブで実現できることの例は、[wandb/launch-jobs](https://github.com/wandb/launch-jobs) リポジトリ内の `jobs/sweep_schedulers` にあります。このガイドでは、一般公開されている **Wandb Scheduler Job** の使い方を紹介するとともに、カスタム sweep scheduler ジョブを作成する手順も説明します。

<div id="how-to-resume-sweeps-on-launch">
  ## Launch で Sweeps を再開する方法
</div>

以前に実行した sweep から Launch sweep を再開することもできます。ハイパーパラメーターとトレーニングジョブは変更できませんが、スケジューラー固有のパラメーターと、送信先のキューは変更できます。

<Note>
  最初の sweep で 'latest' のようなエイリアスを持つトレーニングジョブを使用していた場合、前回の run 以降に最新のジョブバージョンが変更されていると、再開時に異なる結果になる可能性があります。
</Note>

1. 以前に実行した Launch sweep の sweep 名または ID を特定します。sweep ID は 8 文字の文字列 (例: `hhd16935`) で、W\&B App のプロジェクト内で確認できます。
2. スケジューラーのパラメーターを変更する場合は、更新した設定ファイルを作成します。
3. ターミナルで次のコマンドを実行します。`<` と `>` で囲まれた内容は、自分の情報に置き換えてください。

```bash theme={null}
wandb launch-sweep <optional config.yaml> --resume_id <sweep id> --queue <queue_name>
```
