메인 콘텐츠로 건너뛰기
run 포크 기능은 현재 프라이빗 프리뷰 단계입니다. 이 기능에 대한 액세스를 요청하려면 support@wandb.com으로 W&B Support에 문의하세요.
실험의 특정 지점에서 원본 run에 영향을 주지 않고 다른 파라미터나 모델을 탐색할 수 있습니다. 이를 위해 기존 W&B run을 포크하면 됩니다. run을 포크하면 W&B는 소스 run의 run ID와 지정한 step을 사용해 새 run을 생성합니다. 포크된 run에는 해당 step까지의 소스 run의 모든 데이터가 포함됩니다. 포크 기준 step 이후에는 원본 run과 독립적으로 포크된 run에 새 데이터를 로깅할 수 있습니다.
  • run을 포크하려면 wandb SDK 버전이 0.16.5 이상이어야 합니다.
  • run을 포크하려면 step이 단조 증가해야 합니다. define_metric()으로 정의된, 단조 증가하지 않는 step을 사용하는 run에서는 포크할 수 없습니다. 단조 증가하지 않는 step은 run 기록과 시스템 메트릭의 시간 순서를 깨뜨립니다.
기존 run에서 포크하려면 wandb.init()fork_from 파라미터를 사용하세요. 소스 run의 고유한 run ID와 포크된 run을 시작하려는 step을 지정합니다.
run ID와 이를 찾는 방법에 대한 자세한 내용은 고유 run 식별자(Unique run identifiers)를 참고하세요.

이전에 로깅된 run에서 포크하기

다음 코드 스니펫은 이전에 W&B에 로깅된 run에서 포크하는 방법을 보여줍니다. 이 방법을 사용하면 다른 스크립트나 노트북에서 실행된 run, 또는 다른 사용자나 서비스 계정이 로깅한 run에서 포크할 수 있습니다. <source-run-id>, <project>, 그리고 <entity>를 여러분의 값으로 변경하세요.
import wandb

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

# 포크할 스텝 지정
fork_step = 200

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

동일한 스크립트에서 run 포크하기

다음 코드 스니펫은 동일한 스크립트 내의 run에서 포크하는 방법을 보여줍니다. 이는 동일한 스크립트나 노트북에서 특정 시점부터 서로 다른 파라미터나 모델을 탐색하려는 경우에 발생할 수 있습니다.
import wandb

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

# 포크할 스텝 지정
fork_step = 200

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

예시 스크립트

예를 들어, 다음 코드는 먼저 run을 포크한 다음, 트레이닝 스텝 200부터 포크된 run에 메트릭을 로깅하는 방법을 보여줍니다. 다음 코드를 Python 스크립트나 노트북 셀에 복사해 붙여넣고, <project><entity>를 사용자 값으로 바꾸세요.
import wandb
import math

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

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

        # 두 메트릭이 동일한 스텝에 기록되도록 단일 호출로 기록합니다
        run2.log({
            "metric": metric_value,
            "additional_metric": i * 1.1
        })
Rewind 및 포크 호환성포크는 run을 관리하고 실험하는 데 더 많은 유연성을 제공하여 rewind 기능을 보완합니다.run에서 포크를 수행하면, W&B는 특정 시점의 run으로부터 새로운 브랜치를 생성하여 다른 파라미터나 모델을 시도할 수 있게 합니다.rewind 기능으로 run을 되감으면, W&B에서 run 히스토리 자체를 수정하거나 정정할 수 있습니다.