> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/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="code" />

このページでは、W\&B Launch を使用してハイパーパラメーター調整ジョブ ([sweep](/ja/products/wandb/sweeps)) を作成する方法について説明します。これにより、他の Launch job を実行しているのと同じインフラストラクチャー上で、ハイパーパラメーターの探索を自動化できます。Launch で Sweeps を使用すると、探索対象として指定したハイパーパラメーターとともに、sweep スケジューラーが launch キューにプッシュされます。sweep スケジューラーはエージェントに取得されると起動し、選択されたハイパーパラメーターを使用して、同じキューに sweep の run を投入します。この処理は、sweep が完了するか停止されるまで続きます。

デフォルトの W\&B Sweep スケジューリングエンジンを使用することも、独自のカスタムスケジューラーを実装することもできます。

1. 標準の sweep スケジューラー: [W\&B Sweeps](/ja/products/wandb/sweeps) を制御するデフォルトの W\&B Sweep スケジューリングエンジンを使用します。おなじみの `bayes`、`grid`、`random` メソッドを使用できます。
2. カスタム sweep スケジューラー: sweep スケジューラーをジョブとして実行するように設定します。この方法では、自由にカスタマイズできます。次のセクションでは、標準の sweep スケジューラーを拡張して、より多くの情報をログする例を紹介します。

<Note>
  このガイドは、W\&B Launch の設定が完了していることを前提としています。W\&B Launch をまだ設定していない場合は、Launch ドキュメントの [how to get started](/ja/products/wandb/platform/launch#how-to-get-started) セクションを参照してください。
</Note>

<Note>
  Launch で Sweeps を初めて使用する場合は、`basic` メソッドを使用して sweep を作成することをお勧めします。標準の W\&B スケジューリングエンジンでは要件を満たせない場合は、Launch で Sweeps 用のカスタムスケジューラーを使用してください。
</Note>

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

このセクションでは、標準スケジューリングエンジンを使用して Launch で W\&B Sweeps を作成する方法について説明します。sweep は、W\&B アプリでインタラクティブに作成することも、W\&B CLI でプログラムから作成することもできます。スケジューラーのカスタマイズなど、Launch sweep の高度な設定を行う場合は CLI を使用してください。

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

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

    1. W\&B アプリで W\&B プロジェクトにアクセスします。
    2. プロジェクトのサイドバーにある sweep アイコン (ほうきの画像) を選択します。
    3. **Create Sweep** ボタンを選択します。
    4. **Configure Launch** ボタンをクリックします。
    5. **Job** ドロップダウンメニューから、sweep の作成元となるジョブの名前とバージョンを選択します。
    6. **Queue** ドロップダウンメニューから、sweep を実行するキューを選択します。
    7. **Job Priority** ドロップダウンから、Launch job の優先度を指定します。launch キューが優先度付けをサポートしていない場合、Launch job の優先度は「Medium」に設定されます。
    8. オプション: run または sweep スケジューラーのオーバーライド引数を設定します。たとえば、スケジューラーのオーバーライドで `num_workers` を使用すると、スケジューラーが管理する同時実行 run の数を設定できます。
    9. オプション: **Destination Project** ドロップダウンメニューから、sweep の保存先となる project を選択します。
    10. **Save** をクリックします。
    11. **Launch Sweep** を選択します。

    <Frame>
      <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/platform/_media/create_sweep_with_launch.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=e7be8107cf6a8db81411bba5bf750cca" alt="Launch sweep の設定" width="2518" height="1868" data-path="products/wandb/platform/_media/create_sweep_with_launch.png" />
    </Frame>
  </Tab>

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

    1. sweep 設定を作成します。
    2. sweep 設定内で完全なジョブ名を指定します。
    3. sweep エージェントを初期化します。

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

    たとえば、次のコードスニペットでは、job の値に `'wandb/jobs/Hello World 2:latest'` を指定しています。

    ```yaml theme={"system"}
    # 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:
    #   num_workers: 1  # 同時実行する sweep run の数
    #   docker_image: [BASE-IMAGE-FOR-THE-SCHEDULER]
    #   resource: [RESOURCE-TYPE-FOR-EXAMPLE-LOCAL-CONTAINER]
    #   resource_args:  # run に渡されるリソース引数
    #     env: 
    #         - WANDB_API_KEY

    # オプションの Launch パラメーター
    # launch: 
    #    registry: [REGISTRY-FOR-IMAGE-PULLING]
    ```

    sweep 設定の作成方法については、[sweep 設定を定義する](/ja/products/wandb/platform/launch/sweeps-on-launch) ページを参照してください。

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

    ```bash theme={"system"}
    wandb launch-sweep [PATH-TO-YAML-FILE] --queue [QUEUE-NAME] --entity [YOUR-ENTITY] --project [PROJECT-NAME]
    ```

    W\&B Sweeps の詳細については、[ハイパーパラメーターをチューニングする](/ja/products/wandb/sweeps) の章を参照してください。
  </Tab>
</Tabs>

<h2 id="create-a-custom-sweep-scheduler">
  カスタム sweep スケジューラーを作成する
</h2>

このセクションでは、標準のスケジューリングエンジンでは要件を満たせない場合に、カスタム sweep スケジューラーを作成する方法について説明します。カスタム sweep スケジューラーは、W\&B スケジューラーとカスタムスケジューラーのどちらを使用しても作成できます。

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

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

    1. 公開されている wandb/sweep-jobs project で W\&B スケジューラージョブを確認するか、次のジョブ名を使用します:
       `'wandb/sweep-jobs/job-wandb-sweep-scheduler:latest'`
    2. 次の例のように、このジョブ名を指す `job` キーを含む `scheduler` ブロックを追加した設定 YAML を作成します。
    3. 新しい設定を指定して `wandb launch-sweep` コマンドを実行します。

    設定の例:

    ```yaml theme={"system"}
    # 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  # sweep の run を 8 つまで同時に実行できます

    # 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 または前のコマンドの出力で確認します。このジョブは、特に指定しない限りコードアーティファクトのジョブです。
    5. スケジューラーに新しいジョブを指定した sweep 設定を作成します。

    ```yaml theme={"system"}
    ...
    scheduler:
      job: '[ENTITY]/[PROJECT]/job-CustomWandbScheduler:latest'
    ...
    ```
  </Tab>

  <Tab title="Optuna スケジューラー">
    Optuna は、さまざまなアルゴリズムを使用して、特定のモデルに最適なハイパーパラメーターを検索するハイパーパラメーター最適化フレームワークです (W\&B と同様) 。Optuna は [サンプリングアルゴリズム](https://optuna.readthedocs.io/en/stable/reference/samplers/index.html) に加えて、パフォーマンスの低い 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` project 内の `job-optuna-sweep-scheduler` にアクセスするか、ジョブ名 `wandb/sweep-jobs/job-optuna-sweep-scheduler:latest` を使用します。

    2. ジョブを作成したら、sweep を作成できます。次の例のように、Optuna スケジューラージョブを指す `job` キーを含む `scheduler` ブロックを sweep 設定に記述します。

    ```yaml theme={"system"}
      # 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  # run の 75% を停止
              n_warmup_steps: 10  # 最初の x ステップでは枝刈りを無効化

      parameters:
        learning_rate:
          min: 0.0001
          max: 0.1
    ```

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

    ```bash theme={"system"}
    wandb launch-sweep [CONFIG-YAML] -q [QUEUE] -p [PROJECT] -e [ENTITY]
    ```

    Optuna sweep スケジューラージョブの実装の詳細については、[wandb/launch-jobs](https://github.com/wandb/launch-jobs/blob/main/jobs/sweep_schedulers/optuna_scheduler/optuna_scheduler.py) を参照してください。Optuna スケジューラーの活用例については、[wandb/examples](https://github.com/wandb/examples/tree/master/examples/launch/launch-sweeps/optuna-scheduler) も参照してください。
  </Tab>
</Tabs>

カスタム sweep スケジューラージョブのサンプルは、[wandb/launch-jobs](https://github.com/wandb/launch-jobs) リポジトリの `jobs/sweep_schedulers` にあります。このガイドでは、一般公開されている **W\&B Scheduler Job** の使い方と、カスタム sweep スケジューラージョブの作成手順を説明します。

<h2 id="resume-sweeps-on-launch">
  Launch で Sweeps を再開する
</h2>

このセクションでは、以前に起動した sweep から launch-sweep を再開する方法について説明します。スケジューラーの設定を更新して探索を続けたい場合や、別のキューで探索を続けたい場合に便利です。ハイパーパラメーターとトレーニング ジョブは変更できませんが、スケジューラー固有のパラメーターと、sweep のプッシュ先のキューは変更できます。

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

1. 以前に実行した launch sweep の sweep 名/ID を確認します。sweep ID は 8 文字の文字列 (例: `hhd16935`) で、W\&B アプリ の project 内で検索できます。
2. スケジューラーのパラメーターを変更する場合は、更新した設定ファイルを作成します。
3. ターミナルで次のコマンドを実行します。`[` と `]` で囲まれた部分は、ご自身の情報に置き換えてください。

```bash theme={"system"}
wandb launch-sweep [OPTIONAL-CONFIG-YAML] --resume_id [SWEEP-ID] --queue [QUEUE-NAME]
```
