Fork a run

W&B run 포크하기

기존 W&B run에서 “포크"하려면 wandb.init()으로 run을 초기화할 때 fork_from을 사용하십시오. run에서 포크하면 W&B는 소스 run의 run IDstep을 사용하여 새 run을 생성합니다.

run을 포크하면 원래 run에 영향을 주지 않고 실험의 특정 시점에서 다른 파라미터 또는 Models를 탐색할 수 있습니다.

포크된 run 시작

run을 포크하려면 wandb.init()에서 fork_from 인수를 사용하고 포크할 소스 run ID와 소스 run의 step을 지정하십시오.

import wandb

# 나중에 포크할 run을 초기화합니다
original_run = wandb.init(project="your_project_name", entity="your_entity_name")
# ... 트레이닝 또는 로깅 수행 ...
original_run.finish()

# 특정 step에서 run을 포크합니다
forked_run = wandb.init(
    project="your_project_name",
    entity="your_entity_name",
    fork_from=f"{original_run.id}?_step=200",
)

변경 불가능한 run ID 사용

특정 run에 대한 일관되고 변경되지 않는 참조를 보장하려면 변경 불가능한 run ID를 사용하십시오. 사용자 인터페이스에서 변경 불가능한 run ID를 얻으려면 다음 단계를 따르십시오.

  1. Overview 탭에 엑세스: 소스 run 페이지의 Overview 탭으로 이동합니다.

  2. 변경 불가능한 Run ID 복사: Overview 탭의 오른쪽 상단에 있는 ... 메뉴(세 개의 점)를 클릭합니다. 드롭다운 메뉴에서 Copy Immutable Run ID 옵션을 선택합니다.

이러한 단계를 따르면 run에 대한 안정적이고 변경되지 않는 참조를 갖게 되어 run을 포크하는 데 사용할 수 있습니다.

포크된 run에서 계속하기

포크된 run을 초기화한 후 새 run에 계속 로그할 수 있습니다. 연속성을 위해 동일한 메트릭을 로그하고 새 메트릭을 도입할 수 있습니다.

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

import wandb
import math

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

# 특정 step에서 첫 번째 run에서 포크하고 step 200부터 메트릭을 로그합니다
run2 = wandb.init(
    "your_project_name", entity="your_entity_name", fork_from=f"{run1.id}?_step=200"
)

# 새 run에서 계속 로깅합니다
# 처음 몇 steps 동안은 run1에서 메트릭을 그대로 로깅합니다
# Step 250 이후에는 스파이크 패턴 로깅을 시작합니다
for i in range(200, 300):
    if i < 250:
        run2.log({"metric": i})  # 스파이크 없이 run1에서 계속 로깅합니다
    else:
        # Step 250부터 스파이크 행동을 도입합니다
        subtle_spike = i + (2 * math.sin(i / 3.0))  # 미묘한 스파이크 패턴을 적용합니다
        run2.log({"metric": subtle_spike})
    # 모든 steps에서 새 메트릭을 추가로 로깅합니다
    run2.log({"additional_metric": i * 1.1})
run2.finish()