> ## 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.

# run 초기화

> wandb.init()을 사용하여 W&B run을 초기화하여 실험 추적을 시작하세요. 하나의 프로세스에서 여러 run을 동시에 처리하는 방법도 포함됩니다.

W\&B run을 [`wandb.init()`](/ko/products/wandb/ref/python/functions/init)으로 초기화하세요.

기본적으로 W\&B는 Python 프로세스당 하나의 active run을 지원합니다. `wandb.init()`을 호출할 때 run이 active 상태이면, W\&B는 active run을 반환하거나 종료한 후 새 run을 생성합니다. 동작은 환경과 reinit 설정에 따라 달라집니다.

하나의 프로세스에서 여러 active run을 관리하려면 [Multiple runs in one process](/ko/products/wandb/runs/initialize-run#multiple-runs-in-one-process)를 참조하세요.

<Note>
  W\&B는 `wandb.init()`을 호출할 때 context manager(`with` 블록)를 사용할 것을 권장합니다. 이렇게 하면 블록이 끝날 때 W\&B가 run을 종료하고 데이터를 업로드합니다.
</Note>

<h2 id="single-run-per-process">
  프로세스당 single run
</h2>

다음 예시에서는 run을 초기화합니다:

```python title="basic.py" theme={"system"}
import wandb

with wandb.init(entity="nico", project="awesome-project") as run:
    # 여기에 트레이닝 로직을 작성하세요
```

이 명령은 다음과 유사한 출력을 생성합니다:

```bash theme={"system"}
🚀 View run exalted-darkness-6 at: 
https://wandb.ai/nico/awesome-project/runs/pgbn9y21
Find logs at: wandb/run-20241106_090747-pgbn9y21/logs
```

이 예제에서 W\&B는 `exalted-darkness-6` run을 `nico` entity 아래의 `awesome-project` 프로젝트에 로깅합니다. W\&B는 run에 `pgbn9y21`이라는 고유 ID를 부여합니다.

<h2 id="multiple-runs-in-one-process">
  하나의 프로세스에서 여러 run 사용
</h2>

`wandb.init()` 또는 `wandb.Settings`의 `reinit` 매개변수를 사용하여 하나의 Python 프로세스에서 여러 run을 관리하세요. 예를 들어, primary run을 active 상태로 유지하면서 다른 작업을 위한 단기 secondary run을 생성할 수 있습니다.

일반적인 사용 사례는 다음과 같습니다:

* primary run을 active 상태로 유지하면서 evaluations 또는 하위 작업을 위한 secondary run을 생성합니다.
* 하나의 스크립트에서 여러 하위 실험을 실행합니다.
* 하나의 프로세스에서 다른 task 또는 기간을 별도의 run에 로깅합니다.

<Note>
  **요구 사항**

  단일 Python 프로세스에서 여러 run을 관리하려면 W\&B Python SDK 버전 `v0.19.10` 이상이 필요합니다.
</Note>

<h3 id="reinit-options">
  `reinit` 옵션
</h3>

`reinit` 매개변수를 사용하여 다른 run이 active 상태일 때 `wandb.init()`를 호출하면 어떤 일이 발생하는지 제어하세요. 다음 table은 사용 가능한 옵션과 일반적인 사용 사례를 비교합니다. 전체 매개변수 정의는 [`wandb.init()` 레퍼런스 문서](/ko/products/wandb/ref/python/functions/init)를 참조하세요.

| 옵션 | 동작 | 새 run을 생성하나요? | 사용 시기 |
| - | - | - | - |
| `create_new` | 기존 active run을 종료하지 않고 새 run을 생성합니다. W\&B는 새 run을 전역 `wandb.run` 변수에 할당하지 않습니다. 반환된 각 run 객체를 저장하고 명시적으로 사용하세요. [하나의 프로세스에서 여러 active run 관리](/ko/products/wandb/runs/initialize-run#example-multiple-runs-in-one-process) 섹션을 참조하세요. | Yes | 하나의 프로세스에서 여러 active run이 필요할 때, 예를 들어 primary run이 active 상태를 유지하면서 secondary run을 생성하고 종료하는 경우입니다. |
| `finish_previous` | active run을 종료한 후 새 run을 생성합니다. 이는 비노트북 환경에서의 기본 동작입니다. | Yes | run이 순차적으로 실행되며 각 task 또는 단계마다 별도의 run이 필요한 경우입니다. |
| `return_previous` | 새 run을 생성하는 대신 가장 최근에 완료되지 않은 run을 반환합니다. 이는 노트북 환경에서의 기본 동작입니다. | No | `wandb.init()`를 반복 호출할 때 active run을 계속 사용해야 하는 경우입니다. |

<Note>
  W\&B는 단일 전역 run을 가정하는 [W\&B Integrations](/ko/products/wandb/integrations)(예: Hugging Face Trainer, Keras callbacks, PyTorch Lightning)를 `create_new` 모드에서 지원하지 않습니다. 이러한 integrations를 사용하는 경우 각 하위 실험을 별도의 프로세스에서 실행하세요.
</Note>

<h3 id="configure-reinit">
  `reinit` 설정
</h3>

* `wandb.init()`에서 `reinit` 인수를 직접 사용하세요:
  ```python theme={"system"}
  import wandb
  with wandb.init(reinit="<create_new|finish_previous|return_previous>") as run:
      # Your code here
  ```

* `wandb.init()`을 사용하고 `settings` 매개변수에 `wandb.Settings` 객체를 전달하세요. `Settings` 객체에 `reinit`를 지정하세요:

  ```python theme={"system"}
  import wandb
  with wandb.init(settings=wandb.Settings(reinit="<create_new|finish_previous|return_previous>")) as run:
      # Your code here
  ```

* `wandb.setup()`을 사용하여 현재 프로세스의 모든 run에 대해 `reinit` 옵션을 전역으로 설정하세요. 한 번 동작을 설정하고 해당 프로세스의 후속 `wandb.init()` 호출에 모두 적용하려는 경우 유용합니다.

  ```python theme={"system"}
  import wandb
  with wandb.setup(wandb.Settings(reinit="<create_new|finish_previous|return_previous>")) as run:
       # Your code here
  ```

* 환경 변수 `WANDB_REINIT`에 `reinit`의 원하는 값을 지정하세요. 환경 변수를 정의하면 `reinit` 옵션이 `wandb.init()` 호출에 적용됩니다.

  ```bash theme={"system"}
  export WANDB_REINIT="<create_new|finish_previous|return_previous>"
  ```

다음 코드 스니펫은 `wandb.init()`을 호출할 때마다 새 run을 생성하도록 W\&B를 설정하는 방법에 대한 개요를 보여줍니다:

```python theme={"system"}
import wandb

wandb.setup(wandb.Settings(reinit="create_new"))

with wandb.init() as experiment_results_run:
    # 이 run은 각 실험의 결과를 로깅하는 데 사용됩니다.
    # 이 run을 결과 수집을 위한 부모 run으로 생각할 수 있습니다.
      with wandb.init() as run:
         # do_experiment() 함수는 주어진 run에 세부적인 메트릭을 로깅하고,
         # 별도로 추적하고 싶은 결과 메트릭을 반환합니다.
         experiment_results = do_experiment(run)

         # 각 실험 후, 그 결과를 부모 run에 로깅하세요. 부모 run의 차트에서 각 점은
         # 하나의 실험 결과를 나타냅니다.
         experiment_results_run.log(experiment_results)
```

<h3 id="example-concurrent-processes">
  예시: 동시 프로세스
</h3>

스크립트가 실행되는 내내 열려 있는 기본 프로세스를 만들고, 기본 프로세스를 종료하지 않은 상태에서 수명이 짧은 보조 프로세스를 주기적으로 생성하려 한다고 가정해 보겠습니다. 예를 들어 primary run에서는 모델을 트레이닝하고, 평가 계산이나 기타 작업은 별도의 run에서 수행하려는 경우에 이 패턴이 유용합니다.

이렇게 하려면 `reinit="create_new"`를 사용하여 여러 run을 초기화하세요. 이 예제에서는 "Run A"가 스크립트 실행 내내 열려 있는 기본 프로세스이고, "Run B1", "Run B2"는 평가 등의 작업에 사용하는 수명이 짧은 secondary run이라고 가정합니다.

전체 워크플로는 대략 다음과 같습니다.

1. `wandb.init()`으로 기본 프로세스인 Run A를 초기화하고 트레이닝 메트릭을 로깅합니다.
2. (`wandb.init()`으로) Run B1을 초기화하고 데이터를 로깅한 다음 종료합니다.
3. Run A에 데이터를 추가로 로깅합니다.
4. Run B2를 초기화하고 데이터를 로깅한 다음 종료합니다.
5. Run A에 계속 로깅합니다.
6. 마지막으로 Run A를 종료합니다.

다음 Python 코드 예제는 이 워크플로를 보여 줍니다.

```python theme={"system"}
import wandb

def train(name: str) -> None:
    """Perform one training iteration in its own W&B run.

    Using a 'with wandb.init()' block with `reinit="create_new"` ensures that
    this training sub-run can be created even if another run (like our primary
    tracking run) is already active.
    """
    with wandb.init(
        project="my_project",
        name=name,
        reinit="create_new"
    ) as run:
        # 실제 스크립트에서는 이 블록 안에서 트레이닝 단계를 실행합니다.
        run.log({"train_loss": 0.42})  # 실제 메트릭으로 바꾸세요

def evaluate_loss_accuracy() -> (float, float):
    """Returns the current model's loss and accuracy.
    
    Replace this placeholder with your real evaluation logic.
    """
    return 0.27, 0.91  # 예시 메트릭 값

# 여러 트레이닝/평가 단계에 걸쳐 계속 활성 상태로 유지되는 'primary' run을 생성합니다.
with wandb.init(
    project="my_project",
    name="tracking_run",
    reinit="create_new"
) as tracking_run:
    # 1) 'training_1'이라는 하위 run에서 한 번 트레이닝합니다
    train("training_1")
    loss, accuracy = evaluate_loss_accuracy()
    tracking_run.log({"eval_loss": loss, "eval_accuracy": accuracy})

    # 2) 'training_2'라는 하위 run에서 다시 트레이닝합니다
    train("training_2")
    loss, accuracy = evaluate_loss_accuracy()
    tracking_run.log({"eval_loss": loss, "eval_accuracy": accuracy})
    
    # 이 'with' 블록이 끝나면 'tracking_run'이 자동으로 종료됩니다.
```

앞의 예시에서 주목할 세 가지 핵심 사항은 다음과 같습니다.

1. `reinit="create_new"`를 사용하면 `wandb.init()`을 호출할 때마다 새 run이 생성됩니다.
2. 각 run에 대한 참조는 직접 유지해야 합니다. `wandb.run`은 `reinit="create_new"`로 생성된 새 run을 자동으로 가리키지 않습니다. 새 run을 `run_a`, `run_b1` 등의 변수에 저장하고, 필요에 따라 해당 객체에서 `.log()` 또는 `.finish()`를 호출하세요.
3. primary run은 계속 열어 둔 채로 하위 run은 원하는 시점에 언제든지 종료할 수 있습니다.
4. run에 로깅을 마쳤으면 `run.finish()`로 run을 종료하세요. 이렇게 하면 모든 데이터가 업로드되고 run이 올바르게 닫힙니다.


## Related topics

- [튜토리얼: 데이터셋 아티팩트 생성, 추적 및 사용](/ko/products/wandb/artifacts/artifacts-walkthrough.md)
