> ## 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에서 하이퍼파라미터 스윕을 자동화하는 방법을 알아보세요.

# W&B Launch로 스윕 생성하기

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

이 페이지에서는 W\&B Launch로 하이퍼파라미터 튜닝 작업([스윕](/ko/products/wandb/sweeps))을 생성하는 방법을 설명합니다. 이를 통해 다른 Launch 작업을 실행하는 인프라에서 하이퍼파라미터 탐색도 자동화할 수 있습니다. Launch의 스윕에서는 스윕 스케줄러가 탐색할 하이퍼파라미터와 함께 Launch Queue로 푸시됩니다. 에이전트가 스윕 스케줄러를 가져가면 스케줄러가 시작되고, 선택한 하이퍼파라미터로 같은 큐에 스윕 run을 실행합니다. 이 과정은 스윕이 종료되거나 중단될 때까지 계속됩니다.

기본 W\&B Sweep 스케줄링 엔진을 사용하거나 맞춤형 스케줄러를 직접 구현할 수 있습니다.

1. 표준 스윕 스케줄러: [W\&B Sweeps](/ko/products/wandb/sweeps)를 제어하는 기본 W\&B Sweep 스케줄링 엔진을 사용합니다. 익숙한 `bayes`, `grid`, `random` 방법을 사용할 수 있습니다.
2. 맞춤형 스윕 스케줄러: 스윕 스케줄러가 작업으로 실행되도록 설정합니다. 이 옵션을 사용하면 모든 부분을 원하는 대로 맞춤 설정할 수 있습니다. 다음 섹션에서는 표준 스윕 스케줄러를 확장하여 로깅을 추가하는 예시를 보여줍니다.

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

<Note>
  Launch의 스윕을 처음 사용한다면 `basic` 방법으로 스윕을 생성하는 것을 권장합니다. 표준 W\&B 스케줄링 엔진으로 요구 사항을 충족할 수 없을 때 맞춤형 Launch 스윕 스케줄러를 사용하세요.
</Note>

<h2 id="create-a-sweep-with-a-wb-standard-scheduler">
  W\&B 표준 스케줄러로 스윕 생성하기
</h2>

이 섹션에서는 표준 스케줄링 엔진을 사용하여 Launch로 W\&B Sweeps를 생성하는 방법을 설명합니다. 스윕은 W\&B App에서 대화형으로 생성하거나 W\&B CLI를 사용하여 프로그래밍 방식으로 생성할 수 있습니다. 스케줄러 사용자 지정 등 Launch 스윕의 고급 설정이 필요하다면 CLI를 사용하세요.

<Note>
  W\&B Launch로 스윕을 생성하기 전에 먼저 스윕 대상이 될 작업을 생성하세요. 자세한 내용은 [작업 생성](/ko/products/wandb/platform/launch/create-launch-job) 페이지를 참조하세요.
</Note>

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

    1. W\&B App에서 W\&B 프로젝트로 이동합니다.
    2. 프로젝트 사이드바에서 스윕 아이콘(빗자루 모양)을 선택합니다.
    3. **Create Sweep** 버튼을 선택합니다.
    4. **Configure Launch** 버튼을 클릭합니다.
    5. **Job** 드롭다운 메뉴에서 스윕을 생성할 작업의 이름과 버전을 선택합니다.
    6. **Queue** 드롭다운 메뉴에서 스윕을 실행할 큐를 선택합니다.
    7. **Job Priority** 드롭다운에서 Launch 작업의 우선순위를 지정합니다. Launch 큐가 우선순위 지정을 지원하지 않으면 Launch 작업의 우선순위는 "Medium"으로 설정됩니다.
    8. 선택 사항: run 또는 스윕 스케줄러의 재정의 인수를 설정합니다. 예를 들어 스케줄러 재정의에서 `num_workers`를 사용하여 스케줄러가 관리하는 동시 run 수를 설정할 수 있습니다.
    9. 선택 사항: **Destination 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 스윕 설정" 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. 스윕 설정을 생성합니다.
    2. 스윕 설정에 전체 작업 이름을 지정합니다.
    3. 스윕 에이전트를 초기화합니다.

    <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  # 동시 스윕 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]
    ```

    스윕 설정 생성 방법에 대한 자세한 내용은 [스윕 설정 정의](/ko/products/wandb/platform/launch/sweeps-on-launch) 페이지를 참조하세요.

    4. 스윕을 초기화합니다. 설정 파일 경로, 작업 큐 이름, W\&B entity, 프로젝트 이름을 지정합니다.

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

    W\&B Sweeps에 대한 자세한 내용은 [하이퍼파라미터 튜닝](/ko/products/wandb/sweeps) 챕터를 참조하세요.
  </Tab>
</Tabs>

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

이 섹션에서는 표준 스케줄링 엔진으로 요구 사항을 충족할 수 없을 때 맞춤형 스윕 스케줄러를 만드는 방법을 설명합니다. 맞춤형 스윕 스케줄러는 W\&B 스케줄러나 맞춤형 스케줄러로 만들 수 있습니다.

<Note>
  스케줄러 작업을 사용하려면 `wandb` CLI 버전 >= `0.15.4`가 필요합니다.
</Note>

<Tabs>
  <Tab title="W&B 스케줄러">
    W\&B 스윕 스케줄링 로직을 작업으로 사용하여 Launch 스윕을 생성하세요.

    1. 공개 wandb/sweep-jobs 프로젝트에서 W\&B 스케줄러 작업을 파악하거나, 다음 작업 이름을 사용하세요:
       `'wandb/sweep-jobs/job-wandb-sweep-scheduler:latest'`.
    2. 다음 예시와 같이 설정 yaml에 `scheduler` 블록을 추가하고, 이 블록에 위 이름을 가리키는 `job` 키를 포함하세요.
    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  # 스윕 run을 최대 8개까지 동시에 실행

    # 스윕 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` 함수에 로깅을 추가합니다. 이 함수는 폴링 주기(주기는 설정 가능)마다 새 스윕 run이 시작되기 전에 한 번씩 호출됩니다.
    3. 다음 명령으로 수정한 파일을 실행하여 작업을 생성하세요: `python wandb_scheduler.py --project [PROJECT] --entity [ENTITY] --name CustomWandbScheduler`
    4. UI 또는 이전 호출의 출력에서 생성된 작업의 이름을 파악하세요. 별도로 지정하지 않으면 이 작업은 코드 아티팩트 작업입니다.
    5. 스케줄러가 새 작업을 가리키도록 스윕 설정을 작성하세요.

    ```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을 조기에 종료할 수 있는 다양한 [가지치기(pruning) 알고리즘](https://optuna.readthedocs.io/en/stable/reference/pruners.html)을 제공합니다. 많은 run을 실행할 때 시간과 리소스를 절약할 수 있어 유용합니다. 각 클래스는 설정이 가능하며, 설정 파일의 `scheduler.settings.pruner/sampler.args` 블록에 필요한 매개변수를 전달하면 됩니다.

    작업을 사용해 Optuna의 스케줄링 로직으로 Launch 스윕을 생성하세요.

    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. 작업을 생성한 후에는 스윕을 생성할 수 있습니다. 다음 예시와 같이 Optuna 스케줄러 작업을 가리키는 `job` 키가 포함된 `scheduler` 블록을 넣어 스윕 설정을 구성하세요.

    ```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 step 동안은 가지치기(pruning) 비활성화

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

    3. 마지막으로 `launch-sweep` 명령을 사용하여 활성 큐에서 스윕을 실행하세요.

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

    Optuna 스윕 스케줄러 작업의 정확한 구현은 [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>

맞춤형 스윕 스케줄러 작업의 예시는 [wandb/launch-jobs](https://github.com/wandb/launch-jobs) 저장소의 `jobs/sweep_schedulers` 디렉터리에서 확인할 수 있습니다. 이 가이드에서는 공개된 **W\&B Scheduler Job**을 사용하는 방법과 맞춤형 스윕 스케줄러 작업을 만드는 과정을 설명합니다.

<h2 id="resume-sweeps-on-launch">
  Launch의 스윕 재개
</h2>

이 섹션에서는 이전에 실행한 스윕에서 launch-sweep을 재개하는 방법을 설명합니다. 업데이트된 스케줄러 설정으로 탐색을 계속하거나 다른 큐에서 탐색을 이어가려는 경우에 유용합니다. 하이퍼파라미터와 트레이닝 작업은 변경할 수 없지만, 스케줄러 관련 매개변수와 스윕을 푸시할 큐는 변경할 수 있습니다.

<Note>
  초기 스윕에서 `latest`와 같은 별칭이 지정된 트레이닝 작업을 사용했다면, 마지막 run 이후 최신 작업 버전이 변경된 경우 재개 시 결과가 달라질 수 있습니다.
</Note>

1. 이전에 실행한 launch 스윕의 스윕 이름 또는 ID를 파악하세요. 스윕 ID는 8자리 문자열(예: `hhd16935`)이며, W\&B App의 프로젝트에서 확인할 수 있습니다.
2. 스케줄러 매개변수를 변경하려면 업데이트된 설정 파일을 작성하세요.
3. 터미널에서 다음 명령을 실행하세요. `[`와 `]`로 감싼 부분은 사용자 정보로 바꾸세요.

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