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

> 원본 run에 영향을 주지 않고 실험의 특정 지점에서 다양한 파라미터나 모델을 탐색합니다.

# run 포크하기

<Note>
  run 포크 기능은 현재 활발히 개발 중입니다. Multi-tenant Cloud 및 Dedicated Cloud에서는 프리뷰로 제공되며, Self-Managed에서는 아직 사용할 수 없습니다.
</Note>

원본 run에 영향을 주지 않고 실험의 특정 지점에서 다양한 하이퍼파라미터나 모델을 탐색할 수 있습니다. 이렇게 하려면 기존 W\&B run에서 포크하세요.

run에서 포크하면 W\&B는 소스 run의 [고유 ID](/ko/models/runs/run-identifiers#unique-run-identifiers)와 지정한 step을 사용해 새 run을 생성합니다. 소스 run의 summary 메트릭은 포크된 run으로 복사됩니다. 포크된 run은 지정한 step까지 소스 run의 모든 이력과 파일을 공유합니다.

포크 step 이후에는 원본 run과 독립적으로 포크된 run에 새 데이터를 로깅할 수 있습니다.

아래 코드로 생성된 포크된 run의 [라이브 데모](https://wandb.ai/wandb/test-fork-run/workspace?nw=nwuserjuliarose)를 확인하세요.

<Note>
  * run 포크를 사용하려면 [`wandb`](https://pypi.org/project/wandb/) SDK 버전이 0.16.5 이상이어야 합니다.
  * run 포크를 사용하려면 step이 단조 증가해야 합니다. [`define_metric()`](/ko/models/ref/python/experiments/run#define_metric)로 정의된 비단조 step을 사용하는 run에서는 포크할 수 없습니다. 비단조 step은 run 이력과 시스템 메트릭의 시간순 순서를 깨뜨립니다.
</Note>

포크된 run을 시작할 소스 run의 고유한 `run ID`와 `step`을 [`wandb.init()`](/ko/models/ref/python/functions/init)의 `fork_from` 인자로 지정하세요.

<div id="fork-from-a-previously-logged-run">
  ## 이전에 로깅된 run에서 포크하기
</div>

다음 코드 스니펫은 이전에 W\&B에 로깅한 run에서 포크하는 방법을 보여줍니다.

먼저, 포크하려는 run의 run ID를 획득합니다. 다음으로, [`wandb.init()`](/ko/models/ref/python/functions/init)의 `fork_from`에 포크할 run ID와 포크할 step을 인수로 지정합니다.

다음 코드를 Python 스크립트 또는 노트북 셀에 복사하여 붙여넣으세요. `<source-run-id>`, `<project>`, `<entity>`를 자신의 값으로 바꾸세요:

```python theme={null}
import wandb

# 포크할 소스 run의 고유 ID
source_run_id = "<source-run-id>"

# 포크할 step 지정
fork_step = 200

# run 포크
with wandb.init(
    project="<project>",
    entity="<entity>",
    fork_from=f"{source_run_id}?_step={fork_step}",
) as forked_run:
    pass
```

<div id="fork-from-a-run-in-the-same-script">
  ## 동일한 스크립트에서 run에서 포크하기
</div>

다음 코드 스니펫에서는 동일한 스크립트 내에서 run을 생성한 뒤, 그 run에서 포크하는 방법을 보여줍니다. 이는 W\&B App에서 run ID를 따로 조회하지 않고 방금 생성한 run에서 바로 포크하려는 경우에 유용합니다.

먼저 run을 초기화하고 일부 데이터를 로깅합니다. 다음으로, 원본 run 객체의 `id` 속성을 사용해 해당 run의 run ID를 획득합니다. 마지막으로, 새 run을 초기화한 다음 원본 run의 ID와 포크를 시작할 step을 [`wandb.init()`](/ko/models/ref/python/functions/init)의 `fork_from`에 인수로 전달합니다.

```python theme={null}
import wandb

# run 초기화
with wandb.init(
    project="<project>",
    entity="<entity>"
) as original_run:
    # ...트레이닝 로직을 여기에 작성하세요 ...
    pass

# 포크를 시작할 step 지정
fork_step = int("<num>")

# 원본 run의 ID를 사용하고 포크를 시작할 step 지정
with wandb.init(
    project="<project>",
    entity="<entity>",
    fork_from=f"{original_run.id}?_step={fork_step}",
) as forked_run:
    # ...트레이닝 로직을 여기에 작성하세요 ...
    pass
```

<Tip>원본 run의 고유한 run ID를 획득하려면 `original_run.id` 속성을 사용하세요.</Tip>

<div id="example-script">
  ### 예제 스크립트
</div>

예를 들어, 다음 코드 예제는 먼저 run을 포크한 다음 트레이닝 step 200부터 포크된 run에 메트릭을 로깅하는 방법을 보여줍니다.

다음 코드를 Python 스크립트 또는 노트북 셀에 복사하여 붙여넣으세요. `<project>` 및 `<entity>`를 자신의 값으로 바꾸세요.

```python theme={null}
import wandb
import math

# 첫 번째 run을 초기화하고 일부 메트릭을 로깅합니다
with wandb.init(
    project="<project>",
    entity="<entity>"
) as run1:
    for i in range(300):
        run1.log({"metric": i})

# 특정 step에서 첫 번째 run을 포크하고
# step 200부터 메트릭을 로깅합니다
with wandb.init(
    project="<project>", 
    entity="<entity>", 
    fork_from=f"{run1.id}?_step=200"
) as run2:
    # 새 run에서 계속 로깅합니다
    # 처음 몇 step은 run1의 메트릭을 그대로 로깅합니다
    # step 250 이후부터 스파이크 패턴을 로깅하기 시작합니다
    for i in range(200, 300):
        if i < 250:
            # 스파이크 없이 run1에서 계속 로깅합니다
            metric_value = i
        else:
            # step 250부터 스파이크 동작을 도입합니다
            metric_value = i + (2 * math.sin(i / 3.0))  # 미세한 스파이크 패턴을 적용합니다

        # 동일한 step에 로깅되도록 단일 Call로 두 메트릭을 모두 로깅합니다
        run2.log({
            "metric": metric_value,
            "additional_metric": i * 1.1
        })
```

<Note>
  **Rewind와 포크의 호환성**

  포크는 [`rewind`](/ko/models/runs/rewind/)를 보완하여 run을 관리하고 실험하는 데 더 큰 유연성을 제공합니다.

  run에서 포크하면 W\&B는 특정 시점의 run에서 새 브랜치를 생성해 다른 파라미터나 모델을 사용해 볼 수 있게 합니다.

  run을 rewind하면 W\&B는 run 이력 자체를 바로잡거나 수정할 수 있게 합니다.
</Note>
