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

기존에 로그된 실행에서 포크하기

다음 코드 스니펫은 이전에 W&B에 로그된 실행에서 포크하는 방법을 보여줍니다. 이 방식을 사용하면 다른 스크립트나 노트북에서 수행된 실행이거나, 다른 사용자 또는 서비스 계정이 로그한 실행에서 포크할 수 있습니다. <source-run-id>, <project>, <entity>를 사용자 환경에 맞는 값으로 바꾸십시오.
import wandb

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

# 포크할 스텝 지정
fork_step = 200

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

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

다음 코드 스니펫은 동일한 스크립트 내에서 기존 실행에서 포크하는 방법을 보여줍니다. 이는 동일한 스크립트나 노트북의 특정 지점에서 서로 다른 파라미터나 모델을 탐색하고 싶을 때 유용할 수 있습니다.
import wandb

# 실행 초기화
with wandb.init(
    project="<project>",
    entity="<entity>"
) as original_run:
    # ...여기에 학습 로직을 작성하세요 ...
    pass

# 포크할 스텝 지정
fork_step = 200

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

예제 스크립트

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

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

# 특정 스텝에서 첫 번째 실행을 포크하고
# 스텝 200부터 메트릭을 기록합니다
with wandb.init(
    project="<project>", 
    entity="<entity>", 
    fork_from=f"{run1.id}?_step=200"
) as run2:
    # 새 실행에서 계속 기록합니다
    # 처음 몇 스텝 동안은 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 및 분기(forking) 호환성분기(forking)는 실행 관리를 더 유연하게 하고 다양한 실험을 할 수 있도록 rewind 기능을 보완합니다.실행에서 분기를 생성하면, W&B는 특정 시점의 실행에서 갈라져 나오는 새 분기를 만들어 다른 매개변수나 모델을 시도할 수 있게 합니다.실행을 rewind하면, W&B에서 실행 이력 자체를 수정하거나 정정할 수 있습니다.