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

# Define a sweep configuration

> 스윕을 위한 설정 파일을 만드는 방법을 배워보세요.

W\&B Sweep은 하이퍼파라미터 값을 탐색하는 전략과 해당 값을 평가하는 코드를 결합합니다. 이 전략은 모든 옵션을 시도하는 것만큼 간단할 수도 있고, 베이지안 최적화 및 Hyperband([BOHB](https://arxiv.org/abs/1807.01774))만큼 복잡할 수도 있습니다.

[Python dictionary](https://docs.python.org/3/tutorial/datastructures.html#dictionaries) 또는 [YAML](https://yaml.org/) 파일에서 스윕 구성을 정의합니다. 스윕 구성을 정의하는 방법은 스윕을 관리하려는 방식에 따라 다릅니다.

<Note>
  커맨드라인에서 스윕을 초기화하고 스윕 에이전트를 시작하려면 YAML 파일에서 스윕 구성을 정의하십시오. Python 스크립트 또는 Jupyter notebook 내에서 스윕을 초기화하고 완전히 시작하려면 Python dictionary에서 스윕을 정의하십시오.
</Note>

다음 가이드에서는 스윕 구성의 형식을 지정하는 방법을 설명합니다. 최상위 스윕 구성 키의 전체 목록은 [스윕 구성 옵션](/ko/models/sweeps/sweep-config-keys/)을 참조하십시오.

## 기본 구조

두 가지 스윕 구성 형식 옵션(YAML 및 Python dictionary) 모두 키-값 쌍과 중첩 구조를 활용합니다.

스윕 구성 내에서 최상위 키를 사용하여 스윕 이름([`name`](/ko/models/sweeps/sweep-config-keys/) 키), 검색할 파라미터([`parameters`](/ko/models/sweeps/sweep-config-keys/#parameters) 키), 파라미터 공간을 검색하는 방법([`method`](/ko/models/sweeps/sweep-config-keys/#method) 키) 등과 같은 스윕 검색의 품질을 정의합니다.

예를 들어, 다음 코드 조각은 YAML 파일과 Python dictionary 내에서 정의된 동일한 스윕 구성을 보여줍니다. 스윕 구성 내에는 `program`, `name`, `method`, `metric` 및 `parameters`의 5가지 최상위 키가 지정되어 있습니다.

<Tabs>
  <Tab title="CLI">
    커맨드라인 (CLI)에서 스윕을 대화형으로 관리하려면 YAML 파일에서 스윕 구성을 정의하십시오.

    ```yaml title="config.yaml" theme={null}
    program: train.py
    name: sweepdemo
    method: bayes
    metric:
      goal: minimize
      name: validation_loss
    parameters:
      learning_rate:
        min: 0.0001
        max: 0.1
      batch_size:
        values: [16, 32, 64]
      epochs:
        values: [5, 10, 15]
      optimizer:
        values: ["adam", "sgd"]
    ```
  </Tab>

  <Tab title="Python script or Jupyter notebook">
    Python 스크립트 또는 Jupyter notebook에서 트레이닝 알고리즘을 정의하는 경우 Python dictionary 데이터 구조에서 스윕을 정의하십시오.

    다음 코드 조각은 `sweep_configuration`이라는 변수에 스윕 구성을 저장합니다.

    ```python title="train.py" theme={null}
    sweep_configuration = {
        "name": "sweepdemo",
        "method": "bayes",
        "metric": {"goal": "minimize", "name": "validation_loss"},
        "parameters": {
            "learning_rate": {"min": 0.0001, "max": 0.1},
            "batch_size": {"values": [16, 32, 64]},
            "epochs": {"values": [5, 10, 15]},
            "optimizer": {"values": ["adam", "sgd"]},
        },
    }
    ```
  </Tab>
</Tabs>

최상위 `parameters` 키 내에는 `learning_rate`, `batch_size`, `epoch` 및 `optimizer` 키가 중첩되어 있습니다. 중첩된 각 키에 대해 하나 이상의 값, 분포, 확률 등을 제공할 수 있습니다. 자세한 내용은 [스윕 구성 옵션](/ko/models/sweeps/sweep-config-keys/)의 [파라미터](/ko/models/sweeps/sweep-config-keys/#parameters) 섹션을 참조하십시오.

## 이중 중첩 파라미터

스윕 구성은 중첩된 파라미터를 지원합니다. 중첩된 파라미터를 구분하려면 최상위 파라미터 이름 아래에 추가 `parameters` 키를 사용하십시오. 스윕 구성은 다단계 중첩을 지원합니다.

베이지안 또는 랜덤 하이퍼파라미터 검색을 사용하는 경우 랜덤 변수에 대한 확률 분포를 지정하십시오. 각 하이퍼파라미터에 대해:

1. 스윕 구성에 최상위 `parameters` 키를 만듭니다.
2. `parameters` 키 내에서 다음을 중첩합니다.
   1. 최적화하려는 하이퍼파라미터의 이름을 지정합니다.
   2. `distribution` 키에 사용할 분포를 지정합니다. 하이퍼파라미터 이름 아래에 `distribution` 키-값 쌍을 중첩합니다.
   3. 탐색할 하나 이상의 값을 지정합니다. 값은 분포 키와 일치해야 합니다.
      1. (선택 사항) 최상위 파라미터 이름 아래에 추가 parameters 키를 사용하여 중첩된 파라미터를 구분합니다.

<Warning>
  스윕 구성에 정의된 중첩된 파라미터는 W\&B run 구성에 지정된 키를 덮어씁니다.

  예를 들어, `train.py` Python 스크립트에서 다음 구성으로 W\&B run을 초기화한다고 가정합니다 (1-2행 참조). 다음으로 `sweep_configuration`이라는 dictionary에 스윕 구성을 정의합니다 (4-13행 참조). 그런 다음 스윕 구성 dictionary를 `wandb.sweep`에 전달하여 스윕 구성을 초기화합니다 (16행 참조).

  ```python title="train.py"  theme={null}
  def main():
      run = wandb.init(config={"nested_param": {"manual_key": 1}})


  sweep_configuration = {
      "top_level_param": 0,
      "nested_param": {
          "learning_rate": 0.01,
          "double_nested_param": {"x": 0.9, "y": 0.8},
      },
  }

  # Initialize sweep by passing in config.
  sweep_id = wandb.sweep(sweep=sweep_configuration, project="<project>")

  # Start sweep job.
  wandb.agent(sweep_id, function=main, count=4)
  ```

  W\&B run이 초기화될 때 전달되는 `nested_param.manual_key`에는 액세스할 수 없습니다. `run.config`는 스윕 구성 dictionary에 정의된 키-값 쌍만 보유합니다.
</Warning>

## 스윕 구성 템플릿

다음 템플릿은 파라미터를 구성하고 검색 제약 조건을 지정하는 방법을 보여줍니다. `hyperparameter_name`을 하이퍼파라미터 이름으로 바꾸고 `<>`로 묶인 모든 값을 바꿉니다.

```yaml title="config.yaml" theme={null}
program: <insert>
method: <insert>
parameter:
  hyperparameter_name0:
    value: 0  
  hyperparameter_name1: 
    values: [0, 0, 0]
  hyperparameter_name: 
    distribution: <insert>
    value: <insert>
  hyperparameter_name2:  
    distribution: <insert>
    min: <insert>
    max: <insert>
    q: <insert>
  hyperparameter_name3: 
    distribution: <insert>
    values:
      - <list_of_values>
      - <list_of_values>
      - <list_of_values>
early_terminate:
  type: hyperband
  s: 0
  eta: 0
  max_iter: 0
command:
- ${Command macro}
- ${Command macro}
- ${Command macro}
- ${Command macro}      
```

## 스윕 구성 예제

<Tabs>
  <Tab title="CLI">
    ```yaml title="config.yaml"  theme={null}
    program: train.py
    method: random
    metric:
      goal: minimize
      name: loss
    parameters:
      batch_size:
        distribution: q_log_uniform_values
        max: 256 
        min: 32
        q: 8
      dropout: 
        values: [0.3, 0.4, 0.5]
      epochs:
        value: 1
      fc_layer_size: 
        values: [128, 256, 512]
      learning_rate:
        distribution: uniform
        max: 0.1
        min: 0
      optimizer:
        values: ["adam", "sgd"]
    ```
  </Tab>

  <Tab title="Python script or Jupyter notebook">
    ```python title="train.py"  theme={null}
    sweep_config = {
        "method": "random",
        "metric": {"goal": "minimize", "name": "loss"},
        "parameters": {
            "batch_size": {
                "distribution": "q_log_uniform_values",
                "max": 256,
                "min": 32,
                "q": 8,
            },
            "dropout": {"values": [0.3, 0.4, 0.5]},
            "epochs": {"value": 1},
            "fc_layer_size": {"values": [128, 256, 512]},
            "learning_rate": {"distribution": "uniform", "max": 0.1, "min": 0},
            "optimizer": {"values": ["adam", "sgd"]},
        },
    }
    ```
  </Tab>
</Tabs>

### Bayes hyperband 예제

```yaml theme={null}
program: train.py
method: bayes
metric:
  goal: minimize
  name: val_loss
parameters:
  dropout:
    values: [0.15, 0.2, 0.25, 0.3, 0.4]
  hidden_layer_size:
    values: [96, 128, 148]
  layer_1_size:
    values: [10, 12, 14, 16, 18, 20]
  layer_2_size:
    values: [24, 28, 32, 36, 40, 44]
  learn_rate:
    values: [0.001, 0.01, 0.003]
  decay:
    values: [1e-5, 1e-6, 1e-7]
  momentum:
    values: [0.8, 0.9, 0.95]
  epochs:
    value: 27
early_terminate:
  type: hyperband
  s: 2
  eta: 3
  max_iter: 27
```

다음 탭은 `early_terminate`에 대한 최소 또는 최대 반복 횟수를 지정하는 방법을 보여줍니다.

<Tabs>
  <Tab title="Maximum number of iterations">
    이 예제의 대괄호는 `[3, 3*eta, 3*eta*eta, 3*eta*eta*eta]`이며, 이는 `[3, 9, 27, 81]`과 같습니다.

    ```yaml theme={null}
    early_terminate:
      type: hyperband
      min_iter: 3
    ```
  </Tab>

  <Tab title="Minimum number of iterations">
    이 예제의 대괄호는 `[27/eta, 27/eta/eta]`이며, 이는 `[9, 3]`과 같습니다.

    ```yaml theme={null}
    early_terminate:
      type: hyperband
      max_iter: 27
      s: 2
    ```
  </Tab>
</Tabs>

### 커맨드 예제

```yaml theme={null}
program: main.py
metric:
  name: val_loss
  goal: minimize

method: bayes
parameters:
  optimizer.config.learning_rate:
    min: !!float 1e-5
    max: 0.1
  experiment:
    values: [expt001, expt002]
  optimizer:
    values: [sgd, adagrad, adam]

command:
- ${env}
- ${interpreter}
- ${program}
- ${args_no_hyphens}
```

<Tabs>
  <Tab title="Unix">
    ```bash theme={null}
    /usr/bin/env python train.py --param1=value1 --param2=value2
    ```
  </Tab>

  <Tab title="Windows">
    ```bash theme={null}
    python train.py --param1=value1 --param2=value2

    ```
  </Tab>
</Tabs>

다음 탭은 일반적인 커맨드 매크로를 지정하는 방법을 보여줍니다.

<Tabs>
  <Tab title="Set Python interpreter">
    `{$interpreter}` 매크로를 제거하고 값을 명시적으로 제공하여 Python 인터프리터를 하드 코딩하십시오. 예를 들어, 다음 코드 조각은 이를 수행하는 방법을 보여줍니다.

    ```yaml theme={null}
    command:
      - ${env}
      - python3
      - ${program}
      - ${args}
    ```
  </Tab>

  <Tab title="Add extra parameters">
    다음은 스윕 구성 파라미터에 의해 지정되지 않은 추가 커맨드라인 인수를 추가하는 방법을 보여줍니다.

    ```yaml theme={null}
    command:
      - ${env}
      - ${interpreter}
      - ${program}
      - "--config"
      - "your-training-config.json"
      - ${args}
    ```
  </Tab>

  <Tab title="Omit arguments">
    프로그램이 인수 파싱을 사용하지 않는 경우 인수를 모두 전달하지 않고 `wandb.init`이 스윕 파라미터를 자동으로 `wandb.config`에 선택하도록 할 수 있습니다.

    ```yaml theme={null}
    command:
      - ${env}
      - ${interpreter}
      - ${program}
    ```
  </Tab>

  <Tab title="Hydra">
    [Hydra](https://hydra.cc)와 같은 툴이 예상하는 방식으로 인수를 전달하도록 커맨드를 변경할 수 있습니다. 자세한 내용은 [W\&B와 함께 Hydra 사용하기](/ko/guides/integrations/hydra)를 참조하십시오.

    ```yaml theme={null}
    command:
      - ${env}
      - ${interpreter}
      - ${program}
      - ${args_no_hyphens}
    ```
  </Tab>
</Tabs>
