wandb.init()에서 resume 매개변수를 설정하여 run이 중단되거나 크래시될 때 W&B가 어떻게 처리할지 지정하세요. run을 초기화하면 W&B는 run ID가 이미 존재하는지 확인하고, resume 값에 정의된 동작을 적용합니다.
다음 표는 resume 매개변수에 전달한 인수와 run ID 존재 여부에 따라 W&B가 어떻게 동작하는지 보여줍니다.
| Argument | Description | Run ID exists | Run ID does not exist | Use case |
|---|---|---|---|---|
"must" | W&B는 run ID로 지정한 run을 반드시 재개해야 합니다. | W&B는 동일한 run ID로 run을 재개합니다. 마지막 step부터 이어서 실행합니다. | W&B는 오류를 발생시킵니다. | 동일한 run ID를 반드시 사용해야 하는 run을 재개할 때 사용합니다. |
"allow" | run ID가 존재하면 W&B가 run을 재개하도록 허용합니다. | W&B는 동일한 run ID로 run을 재개합니다. 마지막 step부터 이어서 실행합니다. | W&B는 지정한 run ID로 새 run을 초기화합니다. | 기존 run을 덮어쓰지 않고 run을 재개할 때 사용합니다. |
"never" | W&B가 run ID로 지정한 run을 재개하지 않도록 합니다. | 지정한 ID를 가진 run이 이미 존재하면 오류를 발생시킵니다. | W&B는 지정한 run ID로 새 run을 초기화합니다. | |
"auto" | run ID가 존재하면 W&B가 자동으로 run 재개를 시도하도록 허용합니다. 실패한 프로세스와 동일한 디렉터리에서 run을 다시 시작합니다. | W&B는 동일한 run ID로 run을 재개합니다. | W&B는 지정한 run ID로 새 run을 초기화합니다. | run이 자동으로 재개되도록 설정할 때 사용합니다. |
auto와 allow를 언제 사용해야 하나요?W&B는 resume="allow"를 사용하고 재개하려는 특정 run ID를 지정할 것을 권장합니다.resume="auto" 옵션은 run ID를 지정할 필요가 없지만, 동일한 디렉터리에서 여러 run이 실패했거나 파일 디렉터리 구조가 변경된 경우 예기치 않은 동작이 발생할 수 있습니다. 또한 resume="auto"를 사용할 때는 실패한 프로세스와 동일한 디렉터리에서 run을 다시 시작해야 합니다.<>로 둘러싸인 값을 자신의 값으로 바꾸세요.
동일한 run ID를 사용해야 하는 run 재개
resume매개변수를"must"로 설정하세요 (resume="must")- 중단되었거나 크래시된 run의 run ID를 지정하세요
기존 run을 덮어쓰지 않고 run 재개
resume 매개변수를 "allow" (resume="allow")로 설정하세요. 중단되었거나 크래시된 run의 run ID를 지정하세요. 다음 코드 스니펫은 W&B Python SDK를 사용해 이를 수행하는 방법을 보여줍니다.
run이 자동으로 재개되도록 설정하기
- W&B Python SDK
- 셸 스크립트
run을 초기화할 때
resume 매개변수에 인수로 auto를 전달하세요. 실패한 프로세스와 동일한 디렉터리에서 run을 다시 시작해야 합니다.다음 코드 스니펫을 복사하여 붙여넣으세요. <>로 둘러싸인 값은 사용자의 값으로 바꾸세요.Users/AwesomeEmployee/Desktop/ImageClassify/training/라는 디렉터리에서 train.py라는 Python 스크립트를 실행한다고 가정해 보겠습니다. train.py에서 이 스크립트는 자동 재개를 활성화하는 run을 생성합니다. 이후 트레이닝 스크립트가 중지되었다고 가정해 보겠습니다. 이 run을 재개하려면 Users/AwesomeEmployee/Desktop/ImageClassify/training/에서 train.py 스크립트를 다시 시작해야 합니다.
파일 시스템을 공유할 수 없는 경우
WANDB_RUN_ID 환경 변수를 지정하거나 W&B Python SDK로 run ID를 전달하세요. run ID에 대한 자세한 내용은 “What are runs?” 페이지의 맞춤형 run IDs 섹션을 참조하세요.선점형 스윕 run 재개
wandb agent CLI로 스윕 에이전트를 실행할 때 적용되며, 이 방식은 트레이닝 프로그램을 하위 프로세스로 시작합니다. Python API wandb.agent()만 사용하는 경우에는 완전히 동일하게 적용되지 않습니다. 이 경로는 별도 프로세스가 아니라 스레드에서 트레이닝 함수를 실행하므로, OS 시그널의 전달 및 포워딩 방식이 CLI 에이전트 모델과 일치하지 않기 때문입니다.
권장 패턴: 스케줄러나 플랫폼에서 사용하는 선점 시그널(예: SIGUSR1 또는 SIGTERM)에 대한 시그널 핸들러를 등록하세요. 핸들러에서는 활성 run이 있을 때 mark_preempting()을 호출하고, 필요한 정리 작업(예: checkpoint 저장)을 수행한 다음, 0이 아닌 코드로 종료하세요(시그널 종료에는 일반적으로 128 + signum 관례를 사용합니다). wandb.init() 직후에 조건 없이 즉시 mark_preempting()을 호출하지 마세요. 그렇게 하면 코드 bug를 포함한 모든 실패가 선점으로 표시되어 run이 반복해서 다시 큐에 들어갈 수 있습니다.
실행 가능한 예제, CLI 에이전트의 --forward-signals, 그리고 mark_preempting()의 다양한 사용 방식에 대한 전체 레퍼런스 표는 시그널 처리와 스윕 run을 참조하세요.
이 패턴을 따르면 W&B는 run 상태를 대략 다음과 같이 기록합니다:
| 시나리오 | Run 상태 |
|---|---|
| run이 exit code 0으로 정상 종료됨 | FINISHED |
| run이 0이 아닌 exit code로 실패함 | FAILED |
run이 처리되지 않은 시그널(예: SIGKILL)을 받음 | 약 5분 후 CRASHED |
run이 처리된 선점 시그널(예: SIGTERM 또는 SIGUSR1)을 받고, 핸들러가 mark_preempting()을 호출한 뒤 프로세스가 0이 아닌 값으로 종료됨 | PREEMPTED; run이 다음 에이전트 요청을 위해 큐에 등록됨 |