본문으로 건너뛰기

실행 재개

wandb.init()resume=True를 전달함으로써 W&B가 자동으로 실행을 재개하도록 설정할 수 있습니다. 프로세스가 성공적으로 종료되지 않은 경우 다음 번에 실행할 때 W&B는 마지막 단계부터 로깅을 시작합니다.

import keras
import numpy as np
import wandb
from wandb.keras import WandbCallback

wandb.init(project="preemptible", resume=True)

if wandb.run.resumed:
# 최고의 모델 복원
model = keras.models.load_model(wandb.restore("model-best.h5").name)
else:
a = keras.layers.Input(shape=(32,))
b = keras.layers.Dense(10)(a)
model = keras.models.Model(input=a, output=b)

model.compile("adam", loss="mse")
model.fit(
np.random.rand(100, 32),
np.random.rand(100, 10),
# 재개된 에포크 설정
initial_epoch=wandb.run.step,
epochs=300,
# 매 에포크마다 개선된 경우 최고의 모델 저장
callbacks=[WandbCallback(save_model=True, monitor="loss")],
)

실행 재개 가이드

다음과 같이 W&B를 사용하여 실행을 재개하는 다양한 방법이 있습니다:

  1. resume

    이는 W&B로 실행을 재개하는 권장 메소드입니다.

    1. 위에서 설명한 바와 같이, wandb.init()resume=True를 전달하여 실행을 재개할 수 있습니다. 이는 우리가 "자동으로" 중단된 실행을 이어서 진행하는 것으로 생각할 수 있습니다. 프로세스가 성공적으로 종료되지 않은 경우 다음 번에 실행할 때 W&B는 마지막 단계부터 로깅을 시작합니다.
      • 참고: 이 기능은 스크립트를 실패한 디렉토리와 동일한 디렉토리에서 실행할 때만 작동합니다. 파일은 wandb/wandb-resume.json에 저장됩니다.
    2. 다른 형태의 재개는 실제 실행 ID를 제공해야 합니다: wandb.init(id=run_id) 그리고 재개할 때 (실제로 재개되고 있는지 확실하게 하려면 wandb.init(id=run_id, resume="must")를 사용합니다.
      • 실행 ID를 관리함으로써 재개에 대한 전체 제어권을 가질 수도 있습니다. 우리는 run_id를 생성하는 유틸리티를 제공합니다: wandb.util.generate_id(). 이러한 고유 ID 중 하나를 각 고유 실행에 대해 ID로 설정하는 한, resume="allow"라고 하면 W&B가 자동으로 해당 ID로 실행을 재개합니다.

    자동 및 제어된 재개에 대한 더 많은 맥락은 이 섹션에서 찾을 수 있습니다.

  2. wandb.restore

    • 이 기능을 사용하면 로깅을 중단한 지점부터 실행에 대한 새로운 메트릭의 역사적 값들을 로깅할 수 있지만, 코드의 상태를 재설정하는 것은 처리하지 않습니다. 체크포인트를 로드할 수 있도록 체크포인트를 작성했는지 확인해야 합니다!
    • 실행 상태를 체크포인트 파일을 통해 기록하려면 wandb.save를 사용할 수 있습니다. wandb.save()를 통해 체크포인트 파일을 생성한 다음, wandb.init(resume=<run-id>)를 통해 사용할 수 있습니다. 이 리포트는 W&B로 모델을 저장하고 복원하는 방법을 설명합니다.

자동 및 제어된 재개

자동 재개는 프로세스가 실패한 프로세스와 동일한 파일 시스템 위에서 다시 시작될 때만 작동합니다. 파일 시스템을 공유할 수 없는 경우, WANDB_RUN_ID를 설정할 수 있습니다: 프로젝트당 전역적으로 고유한 문자열로 스크립트의 단일 실행에 해당합니다. 64문자를 초과할 수 없습니다. 모든 비단어 문자는 대시로 변환됩니다.

# 나중에 재개할 때 이 ID를 사용하려면 저장하세요
id = wandb.util.generate_id()
wandb.init(id=id, resume="allow")
# 또는 환경 변수를 통해
os.environ["WANDB_RESUME"] = "allow"
os.environ["WANDB_RUN_ID"] = wandb.util.generate_id()
wandb.init()

WANDB_RESUME"allow"로 설정한 경우, 항상 WANDB_RUN_ID를 고유한 문자열로 설정하고 프로세스의 재시작을 자동으로 처리할 수 있습니다. WANDB_RESUME"must"로 설정하면 재개할 실행이 아직 존재하지 않는 경우 W&B가 새 실행을 자동 생성하는 대신 오류를 발생시킬 것입니다.

주의

여러 프로세스가 동시에 같은 run_id를 사용하는 경우 예상치 못한 결과가 기록될 수 있으며 속도 제한이 발생할 수 있습니다.

정보

wandb.init()notes를 지정한 상태로 실행을 재개하면 UI에서 추가한 메모가 덮어씌워집니다.

정보

스윕의 일부로 실행된 실행을 재개하는 것은 지원되지 않습니다.

선점 가능한 스윕

선점 가능한 큐에서의 SLURM 작업, EC2 스팟 인스턴스 또는 Google Cloud 선점 가능한 VM과 같이 선점 가능한 컴퓨트 환경에서 스윕 에이전트를 실행하는 경우, 중단된 스윕 실행을 자동으로 다시 큐에 추가하여 완료될 때까지 재시도할 수 있습니다.

현재 실행이 곧 선점될 것이라고 알게 되면

wandb.mark_preempting()

을 호출하여 W&B 백엔드에 실행이 선점될 것으로 생각한다는 신호를 즉시 보냅니다. 선점 표시가 된 실행이 상태 코드 0으로 종료되면 W&B는 실행이 성공적으로 종료된 것으로 간주하고 재큐에 추가하지 않습니다. 선점 표시가 된 실행이 0이 아닌 상태로 종료되면 W&B는 실행이 선점되었다고 간주하고, 해당 실행을 스윕과 연관된 실행 큐에 자동으로 추가합니다. 실행이 상태 없이 종료되면 W&B는 실행의 마지막 하트비트 후 5분이 지나면 실행을 선점된 것으로 표시하고, 스윕 실행 큐에 추가합니다. 스윕 에이전트는 실행 큐가 소진될 때까지 큐에서 실행을 소비한 후 표준 스윕 검색 알고리즘에 따라 새로운 실행을 생성하기 시작합니다.

기본적으로, 재큐에 추가된 실행은 초기 단계부터 로깅을 시작합니다. 중단된 지점에서 로깅을 재개하도록 실행을 지시하려면 재개된 실행을 wandb.init(resume=True)로 초기화합니다.

Was this page helpful?👍👎