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

> wandb.init()의 resume 매개변수 옵션을 사용하여 일시 중지되거나 중단되거나 크래시가 발생한 W&B run을 재개하세요.

# run 재개

`wandb.init()`에서 `resume` 매개변수를 설정하여 run이 중단되거나 크래시가 발생했을 때 W\&B가 어떻게 대응할지 지정하세요. run을 초기화하면 W\&B는 run ID가 이미 존재하는지 확인하고 `resume` 값에 정의된 동작을 적용합니다.

다음 table은 `resume` 매개변수에 전달된 인수와 run ID의 존재 여부에 따른 W\&B의 동작을 설명합니다.

| 인수 | 설명 | run ID가 존재함 | run ID가 존재하지 않음 | 사용 사례 |
| - | - | - | - | - |
| `"must"` | W\&B는 run ID로 지정된 run을 반드시 재개해야 합니다. | W\&B는 동일한 run ID로 run을 재개합니다. 마지막 step부터 재개합니다. | W\&B가 오류를 발생시킵니다. | 동일한 run ID를 사용해야 하는 run을 재개합니다. |
| `"allow"` | run ID가 존재하면 W\&B가 run을 재개하도록 허용합니다. | W\&B는 동일한 run ID로 run을 재개합니다. 마지막 step부터 재개합니다. | W\&B는 지정된 run ID로 새 run을 초기화합니다. | 기존 run을 덮어쓰지 않고 run을 재개합니다. |
| `"never"` | W\&B가 run ID로 지정된 run을 재개하지 못하도록 합니다. | 지정된 ID의 run이 이미 존재하면 오류를 발생시킵니다. | W\&B는 지정된 run ID로 새 run을 초기화합니다. | |
| `"auto"` | run ID가 존재하면 W\&B가 자동으로 run 재개를 시도하도록 허용합니다. 실패한 프로세스와 동일한 디렉터리에서 run을 다시 시작하세요. | W\&B는 동일한 run ID로 run을 재개합니다. | W\&B는 지정된 run ID로 새 run을 초기화합니다. | run이 자동으로 재개되도록 합니다. |

<Note>
  **`auto`와 `allow`의 사용 시점**

  W\&B는 `resume="allow"`를 사용하고 재개하려는 run ID를 명시적으로 지정할 것을 권장합니다.

  `resume="auto"` 옵션은 run ID를 지정할 필요가 없지만, 동일한 디렉터리에서 여러 run이 실패하거나 파일 디렉터리 구조가 변경되면 예기치 않은 동작이 발생할 수 있습니다. 또한 `resume="auto"`를 사용할 때는 실패한 프로세스와 동일한 디렉터리에서 run을 다시 시작해야 합니다.
</Note>

아래의 모든 예시에서 `<>`로 둘러싸인 값을 자신의 값으로 바꾸세요.
<Tip>[재개된 run의 라이브 데모를 확인하세요](https://forge.coreweave.com/wandb/wandb/resume-run/workspace?nw=nwuserjuliarose).</Tip>

<h2 id="resume-a-run-that-must-use-the-same-run-id">
  동일한 run ID를 사용해야 하는 run 재개
</h2>

run이 중단되거나 크래시 또는 실패한 경우, 동일한 run ID를 사용하여 재개할 수 있습니다. 이를 위해 run을 초기화하고 다음을 지정하세요:

* `resume` 매개변수를 `"must"`로 설정하세요 (`resume="must"`)
* 중단되었거나 크래시된 run의 run ID를 제공하세요

다음 코드 스니펫은 W\&B Python SDK로 이를 수행하는 방법을 보여줍니다:

```python theme={"system"}
with wandb.init(entity="<entity>", project="<project>", id="<run ID>", resume="must") as run:
        # 여기에 트레이닝 코드를 작성하세요
```

<Warning>
  여러 프로세스가 동일한 `id`를 동시에 사용하면 예기치 않은 결과가 발생합니다.

  여러 프로세스를 관리하는 방법에 대한 자세한 내용은 [분산 트레이닝 실험 로깅](/ko/products/wandb/track/log/distributed-training)을 참조하세요.
</Warning>

<h2 id="resume-a-run-without-overriding-the-existing-run">
  기존 run을 덮어쓰지 않고 run 재개
</h2>

중단되었거나 크래시된 run을 기존 run을 덮어쓰지 않고 재개하세요. 프로세스가 성공적으로 종료되지 않는 경우 특히 유용합니다. 다음에 W\&B를 시작하면 W\&B는 마지막 step부터 로깅을 시작합니다.

W\&B로 run을 초기화할 때 `resume` 매개변수를 `"allow"` (`resume="allow"`)로 설정하세요. 중단되었거나 크래시된 run의 run ID를 제공하세요. 다음 코드 스니펫은 W\&B Python SDK로 이를 수행하는 방법을 보여줍니다:

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

with wandb.init(entity="<entity>", project="<project>", id="<run ID>", resume="allow") as run:
        # 여기에 트레이닝 코드를 작성하세요
```

<h2 id="enable-runs-to-automatically-resume">
  run 자동 재개 활성화
</h2>

다음 코드 스니펫은 Python SDK 또는 환경 변수를 사용하여 run 자동 재개를 활성화하는 방법을 보여줍니다.

<Tabs>
  <Tab title="W&B Python SDK">
    run을 초기화할 때 `resume` 매개변수에 `auto`를 인수로 전달하세요. 실패한 프로세스와 동일한 디렉터리에서 run을 다시 시작해야 합니다.

    다음 코드 스니펫을 복사하여 붙여넣으세요. `<>`로 둘러싸인 값을 자신의 값으로 바꾸세요:

    ```python theme={"system"}
    with wandb.init(entity="<entity>", project="<project>", id="<run ID>", resume="auto") as run:
            # 여기에 트레이닝 코드 작성
    ```
  </Tab>

  <Tab title="셸 스크립트">
    다음 예시는 bash 스크립트에서 W\&B `WANDB_RUN_ID` 변수를 지정하는 방법을 보여줍니다:

    ```bash title="run_experiment.sh" theme={"system"}
    RUN_ID="$1"

    WANDB_RESUME=auto WANDB_RUN_ID="$RUN_ID" python eval.py
    ```

    터미널에서 W\&B run ID와 함께 셸 스크립트를 실행할 수 있습니다. 다음 코드 스니펫은 run ID `akj172`를 전달합니다:

    ```bash theme={"system"}
    sh run_experiment.sh akj172 
    ```
  </Tab>
</Tabs>

<Warning>
  자동 재개는 실패한 프로세스와 동일한 파일 시스템에서 프로세스를 다시 시작하는 경우에만 작동합니다.
</Warning>

예를 들어, `Users/AwesomeEmployee/Desktop/ImageClassify/training/` 디렉터리에서 `train.py`라는 Python 스크립트를 실행한다고 가정해 보겠습니다. `train.py`에서 스크립트는 자동 재개가 활성화된 run을 생성합니다. 이후 트레이닝 스크립트가 중단되었다고 가정해 보겠습니다. 이 run을 재개하려면 `Users/AwesomeEmployee/Desktop/ImageClassify/training/` 내에서 `train.py` 스크립트를 다시 시작해야 합니다 .

<Note>
  파일 시스템을 공유할 수 없다면 `WANDB_RUN_ID` 환경 변수를 지정하거나 W\&B Python SDK로 run ID를 전달하세요. run ID에 대한 자세한 내용은 "run이란?" 페이지의 [맞춤형 run ID](/ko/products/wandb/runs#custom-run-ids) 섹션을 참조하세요.
</Note>

<h2 id="resume-preemptible-sweeps-runs">
  선점 가능한 스윕 run 재개
</h2>

선점 시그널을 처리하면 W\&B가 중단된 [스윕](/ko/products/wandb/sweeps) run을 자동으로 다시 큐에 들어가게 해 다른 에이전트에 할당할 수 있습니다. 이 패턴은 스윕 에이전트가 SLURM 선점 가능 큐, Amazon EC2 Spot 인스턴스 또는 Google Cloud 선점형 VM과 같은 선점 가능한 컴퓨팅 리소스에서 실행될 때 유용합니다.

아래 지침은 [`wandb agent`](/ko/products/wandb/ref/cli/wandb-agent) CLI로 스윕 에이전트를 시작하는 경우에 적용됩니다. CLI는 트레이닝 프로그램을 **하위 프로세스**로 시작합니다. Python API [`wandb.agent()`](/ko/products/wandb/ref/python/functions/agent)만 사용하는 경우에는 이 지침이 완전히 적용되지는 않습니다. Python API는 트레이닝 함수를 스레드에서 실행하므로 OS 시그널 전달 및 전달 방식이 CLI 에이전트의 동작과 다릅니다.

<h3 id="handle-a-preemption-signal">
  선점 시그널 처리
</h3>

스케줄러 또는 플랫폼이 선점을 알리는 데 사용하는 시그널(예: `SIGUSR1` 또는 `SIGTERM`)에 대한 handler를 등록하세요. handler에서는 다음을 수행합니다:

1. run이 active일 때 [`mark_preempting()`](/ko/products/wandb/ref/python/experiments/run#mark_preempting)을 호출합니다.
2. checkpoint 저장과 같은 필요한 cleanup을 수행합니다.
3. 0이 아닌 상태 코드로 종료합니다. 시그널 종료에 대한 일반적인 규칙은 `128 + signum`입니다.

`wandb.init()` 직후에 `mark_preempting()`을 무조건 호출하지 마십시오. 그렇게 하면 코드 bug를 포함한 모든 실패가 선점으로 표시되어 run이 반복적으로 다시 큐에 들어갈 수 있습니다.

실행 가능한 예시, CLI 에이전트의 `--forward-signals`, `mark_preempting()`의 다양한 사용에 대한 전체 레퍼런스 table은 [시그널 handling and sweep runs](/ko/products/wandb/sweeps/signal-handling-sweep-runs)를 참조하세요.

해당 패턴을 따를 경우 W\&B는 run 상태를 대략 다음과 같이 기록합니다:

| Scenario | run 상태 |
| - | - |
| run이 종료 코드 0으로 정상적으로 완료됨 | FINISHED |
| run이 0이 아닌 종료 코드로 실패함 | FAILED |
| run이 처리되지 않은 시그널(예: `SIGKILL`)을 수신함 | 약 5분 후 CRASHED |
| run이 처리된 선점 시그널(예: `SIGTERM` 또는 `SIGUSR1`)을 수신하고, handler가 `mark_preempting()`을 호출한 후 프로세스가 0이 아닌 상태로 종료됨 | PREEMPTED; run이 다음 에이전트 요청을 위해 queued됨 |

<Info>
  스윕 에이전트가 선점된 run을 가져올 때 트레이닝 프로세스는 60분 이내에 `wandb.init()`을 호출해야 합니다. run을 가져온 후 `wandb.init()`을 호출하기 전에 프로세스가 실패하는 경우와 같이 초기화가 발생하지 않으면 W\&B는 60분 lease가 만료될 때까지 run을 다른 에이전트에서 사용 가능하게 만들지 않습니다.
</Info>

스윕 에이전트는 스윕 검색 알고리즘에서 새로운 하이퍼파라미터 조합을 요청하기 전에 다시 큐에 들어간 run을 처리합니다. 큐가 비워진 후 스윕은 정상적인 scheduling을 재개합니다.
