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

> Launch에서 하이퍼파라미터 스윕을 자동화하는 방법을 알아보세요.

# W&B Launch로 스윕 만들기

<Card title="Colab에서 사용해 보기" href="https://colab.research.google.com/drive/1WxLKaJlltThgZyhc7dcZhDQ6cjVQDfil#scrollTo=AFEzIxA6foC7" icon="python" />

W\&B Launch로 하이퍼파라미터 튜닝 작업([Sweeps](/ko/models/sweeps/))을 만드세요. Launch에서 스윕을 사용하면, 스윕할 하이퍼파라미터가 지정된 스윕 스케줄러가 Launch Queue에 푸시됩니다. 스윕 스케줄러는 agent가 가져가는 즉시 시작되며, 선택된 하이퍼파라미터로 동일한 큐에 스윕 run을 실행합니다. 이 과정은 스윕이 완료되거나 중지될 때까지 계속됩니다.

기본 W\&B Sweep 스케줄링 엔진을 사용할 수도 있고, 직접 맞춤형 스케줄러를 구현할 수도 있습니다:

1. 표준 스윕 스케줄러: [W\&B Sweeps](/ko/models/sweeps/)를 제어하는 기본 W\&B Sweep 스케줄링 엔진을 사용합니다. 익숙한 `bayes`, `grid`, `random` 방법을 사용할 수 있습니다.
2. 맞춤형 스윕 스케줄러: 스윕 스케줄러를 작업으로 실행되도록 설정합니다. 이 옵션을 사용하면 완전히 맞춤 설정할 수 있습니다. 표준 스윕 스케줄러를 확장해 logging을 더 포함하는 예시는 아래 섹션에서 확인할 수 있습니다.

<Note>
  이 가이드는 W\&B Launch가 이미 설정되어 있다고 가정합니다. W\&B Launch가 설정되어 있지 않다면 Launch 문서의 [시작하기](./#how-to-get-started) 섹션을 참조하세요.
</Note>

<Note>
  Launch에서 스윕을 처음 사용하는 사용자라면 'basic' 방법으로 스윕을 만드는 것을 권장합니다. 표준 W\&B 스케줄링 엔진이 요구 사항을 충족하지 못하는 경우에는 Launch의 맞춤형 스윕 스케줄러를 사용하세요.
</Note>

<div id="create-a-sweep-with-a-wb-standard-scheduler">
  ## W\&B 표준 스케줄러로 스윕 만들기
</div>

Launch를 사용해 W\&B Sweeps를 만드세요. W\&B App에서 대화형으로 스윕을 만들거나, W\&B CLI를 사용해 프로그래밍 방식으로 만들 수 있습니다. 스케줄러를 사용자 지정하는 기능을 포함한 Launch 스윕의 고급 설정이 필요하면 CLI를 사용하세요.

<Note>
  W\&B Launch로 스윕을 만들기 전에 먼저 스윕 대상 작업을 생성해야 합니다. 자세한 내용은 [Create a Job](/ko/platform/launch/create-launch-job/) 페이지를 참조하세요.
</Note>

<Tabs>
  <Tab title="W&B app">
    W\&B App에서 대화형으로 스윕을 만듭니다.

    1. W\&B App에서 W\&B 프로젝트로 이동합니다.
    2. 프로젝트 사이드바에서 sweeps 아이콘(빗자루 모양 아이콘)을 선택합니다.
    3. 그런 다음 **Create Sweep** 버튼을 선택합니다.
    4. **Configure Launch** 버튼을 클릭합니다.
    5. **Job** 드롭다운 메뉴에서 작업 이름과, 해당 작업을 기반으로 스윕을 만들 작업 버전을 선택합니다.
    6. **Queue** 드롭다운 메뉴를 사용해 스윕을 실행할 큐를 선택합니다.
    7. **Job Priority** 드롭다운을 사용해 launch 작업의 우선순위를 지정합니다. launch 큐가 우선순위 지정을 지원하지 않으면 launch 작업의 우선순위는 "Medium"으로 설정됩니다.
    8. (선택 사항) run 또는 스윕 스케줄러의 override args를 설정합니다. 예를 들어 scheduler override를 사용해 `num_workers`로 스케줄러가 관리하는 동시 run 수를 설정할 수 있습니다.
    9. (선택 사항) **Destination Project** 드롭다운 메뉴를 사용해 스윕을 저장할 프로젝트를 선택합니다.
    10. **Save**를 클릭합니다.
    11. **Launch Sweep**을 선택합니다.

    <Frame>
      <img src="https://mintcdn.com/wb-21fd5541-docs-1917/cWe4139CtDilzvW8/images/launch/create_sweep_with_launch.png?fit=max&auto=format&n=cWe4139CtDilzvW8&q=85&s=33d74beeb98d332c5ef9e054d16dbf20" 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. 스윕 설정에 전체 작업 이름을 지정합니다.
    3. 스윕 agent를 초기화합니다.

    <Note>
      1단계와 3단계는 일반적으로 W\&B Sweep을 만들 때 수행하는 단계와 같습니다.
    </Note>

    예를 들어 다음 code snippet에서는 작업 값으로 `'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  # 동시 스윕 run
    #   docker_image: <scheduler용 기본 이미지>
    #   resource: <예: local-container...>
    #   resource_args:  # run에 전달되는 리소스 매개변수
    #     env: 
    #         - WANDB_API_KEY

    # 선택 사항인 Launch 매개변수
    # launch: 
    #    registry: <이미지 pull용 레지스트리>
    ```

    스윕 설정을 만드는 방법은 [Define sweep configuration](/ko/platform/launch/sweeps-on-launch/) 페이지를 참조하세요.

    4. 다음으로 스윕을 초기화합니다. 설정 파일 경로, 작업 큐 이름, 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](/ko/models/sweeps/) 장을 참조하세요.
  </Tab>
</Tabs>

<div id="create-a-custom-sweep-scheduler">
  ## 맞춤형 스윕 스케줄러 만들기
</div>

W\&B 스케줄러나 맞춤형 스케줄러를 사용해 스윕용 맞춤형 스케줄러를 만드세요.

<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  # 동시 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는 scheduler-job을 만들어 생성할 수 있습니다. 이 가이드에서는 로그를 더 많이 남기도록 `WandbScheduler`를 수정합니다.

    1. `wandb/launch-jobs` repo를 클론합니다(구체적으로는 `wandb/launch-jobs/jobs/sweep_schedulers`).
    2. 이제 원하는 만큼 로깅을 늘리기 위해 `wandb_scheduler.py`를 수정할 수 있습니다. 예: `_poll` 함수에 로깅을 추가합니다. 이 함수는 새 sweep run을 시작하기 전에 각 polling 주기마다 한 번씩 호출됩니다(간격은 설정 가능).
    3. 수정한 파일을 실행해 작업을 생성합니다: `python wandb_scheduler.py --project <project> --entity <entity> --name CustomWandbScheduler`
    4. 생성된 작업의 이름을 파악합니다. UI 또는 이전 호출의 출력에서 확인할 수 있으며, 별도로 지정하지 않았다면 code-artifact 작업입니다.
    5. 이제 scheduler가 새 작업을 가리키도록 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  # run의 75%를 중단
              n_warmup_steps: 10  # 처음 x step 동안 pruning 비활성화

      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>

맞춤형 스윕 스케줄러 작업으로 무엇을 할 수 있는지 보여주는 예제는 [wandb/launch-jobs](https://github.com/wandb/launch-jobs) 리포지토리의 `jobs/sweep_schedulers`에서 확인할 수 있습니다. 이 가이드에서는 공개된 **Wandb Scheduler Job**을 사용하는 방법을 보여주고, 맞춤형 스윕 스케줄러 작업을 만드는 과정도 설명합니다.

<div id="how-to-resume-sweeps-on-launch">
  ## Launch에서 sweep 재개하기
</div>

이전에 실행한 sweep에서 launch-sweep을 재개할 수도 있습니다. 하이퍼파라미터와 트레이닝 작업은 변경할 수 없지만, 스케줄러별 파라미터와 해당 작업이 푸시되는 큐는 변경할 수 있습니다.

<Note>
  초기 sweep이 'latest' 같은 alias가 붙은 트레이닝 작업을 사용한 경우, 마지막 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>
```
