wandb.init()에서 resume 매개변수를 설정해 run이 중지되거나 크래시되었을 때 W&B가 어떻게 동작할지 지정합니다. run을 초기화하면 W&B는 run ID가 이미 존재하는지 확인하고, resume 값에 정의된 동작을 적용합니다.
다음 표는 resume 매개변수에 전달한 인수와 run ID 존재 여부에 따라 W&B가 어떻게 동작하는지 보여줍니다.
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?” 페이지의 Custom run IDs 섹션을 참조하세요.선점 가능한 스윕 run 재개
wandb agent CLI로 스윕 에이전트를 시작하는 경우에 적용됩니다. CLI는 트레이닝 프로그램을 하위 프로세스로 시작합니다. Python API wandb.agent()만 사용하는 경우에는 이 지침이 완전히 적용되지 않습니다. Python API는 트레이닝 함수를 스레드에서 실행하므로 OS 시그널의 전달 및 전달 방식이 CLI 에이전트의 동작과 다릅니다.
선점 시그널 처리
SIGUSR1 또는 SIGTERM과 같이 스케줄러나 플랫폼이 선점을 나타내기 위해 사용하는 시그널에 대한 핸들러를 등록하세요. 핸들러에서 다음을 수행합니다:
- 핸들러에서 활성 run이 있으면
mark_preempting()을 호출합니다. - 체크포인트 저장과 같은 필요한 정리 작업을 수행합니다.
- 0이 아닌 상태 코드로 종료합니다. 시그널 종료에는 일반적으로
128 + signum관례를 사용합니다.
wandb.init() 직후에 조건 없이 바로 mark_preempting()을 호출하지 마세요. 그렇게 하면 코드 버그를 포함한 모든 실패가 선점으로 표시되어 run이 반복해서 다시 큐에 들어갈 수 있습니다.
실행 가능한 예제, CLI 에이전트의 --forward-signals, 그리고 mark_preempting()의 다양한 사용 방식에 대한 전체 레퍼런스 표는 Signal handling and 스윕 runs을 참조하세요.
이 패턴을 따르면 W&B는 대략 다음과 같이 run 상태를 기록합니다:
스윕 agent가 선점된 run을 가져오면 트레이닝 프로세스는 60분 이내에
wandb.init()을 호출해야 합니다. run을 가져온 후 wandb.init()을 호출하기 전에 프로세스가 실패하는 경우처럼 초기화가 수행되지 않으면, 60분 리스가 만료될 때까지 W&B는 해당 run을 다른 agent가 사용할 수 있도록 하지 않습니다.