Skip to main content
wandb.init()에서 resume 매개변수를 설정해 run이 중지되거나 크래시되었을 때 W&B가 어떻게 동작할지 지정합니다. run을 초기화하면 W&B는 run ID가 이미 존재하는지 확인하고, resume 값에 정의된 동작을 적용합니다. 다음 표는 resume 매개변수에 전달한 인수와 run ID 존재 여부에 따라 W&B가 어떻게 동작하는지 보여줍니다.
autoallow를 언제 사용해야 하나요?W&B는 resume="allow"를 사용하고 재개하려는 특정 run ID를 지정할 것을 권장합니다.resume="auto" 옵션은 run ID를 지정하지 않아도 되지만, 동일한 디렉터리에서 실패한 run이 여러 개 있거나 파일 디렉터리 구조가 변경되면 예기치 않은 동작이 발생할 수 있습니다. 또한 resume="auto"를 사용할 때는 실패한 프로세스와 동일한 디렉터리에서 run을 다시 시작해야 합니다.
아래의 모든 예시에서 <>로 둘러싼 값은 자신의 값으로 바꾸세요.

동일한 run ID를 사용해야 하는 run 재개

run이 중단되거나 크래시되거나 실패한 경우, 동일한 run ID를 사용해 재개할 수 있습니다. 이렇게 하려면 run을 초기화하고 다음을 지정하세요:
  • resume 매개변수를 "must"로 설정합니다 (resume="must")
  • 중단되었거나 크래시된 run의 run ID를 제공합니다
다음 코드 스니펫에서는 W&B Python SDK를 사용해 이를 수행하는 방법을 보여줍니다:
여러 프로세스가 동일한 id를 동시에 사용하면 예기치 않은 결과가 발생할 수 있습니다.여러 프로세스를 관리하는 방법에 대한 자세한 내용은 분산 트레이닝 실험 로그를 참조하세요.

기존 run을 덮어쓰지 않고 run 재개하기

기존 run을 덮어쓰지 않고 중단되었거나 크래시된 run을 재개합니다. 특히 프로세스가 정상적으로 종료되지 않았을 때 유용합니다. 다음에 W&B를 시작하면 W&B는 마지막 step부터 logging을 시작합니다. W&B로 run을 초기화할 때 resume 파라미터를 "allow"(resume="allow")로 설정하세요. 중단되었거나 크래시된 run의 run ID를 제공하세요. 다음 코드 스니펫은 W&B Python SDK로 이를 수행하는 방법을 보여줍니다:

run이 자동으로 자동 재개되도록 설정

다음 코드 스니펫에서는 Python SDK 또는 환경 변수를 사용해 run이 자동으로 재개되도록 설정하는 방법을 보여줍니다.
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 재개

선점 시그널을 처리하면 W&B가 중단된 스윕 run을 다른 에이전트가 실행하도록 자동으로 재큐잉할 수 있습니다. 이 패턴은 스윕 에이전트가 SLURM 선점 가능 큐, Amazon EC2 Spot Instance 또는 Google Cloud 선점 가능 VM과 같은 선점 가능 컴퓨팅 환경에서 실행될 때 유용합니다. 아래 지침은 wandb agent CLI로 스윕 에이전트를 시작하는 경우에 적용됩니다. CLI는 트레이닝 프로그램을 하위 프로세스로 시작합니다. Python API wandb.agent()만 사용하는 경우에는 이 지침이 완전히 적용되지 않습니다. Python API는 트레이닝 함수를 스레드에서 실행하므로 OS 시그널의 전달 및 전달 방식이 CLI 에이전트의 동작과 다릅니다.

선점 시그널 처리

SIGUSR1 또는 SIGTERM과 같이 스케줄러나 플랫폼이 선점을 나타내기 위해 사용하는 시그널에 대한 핸들러를 등록하세요. 핸들러에서 다음을 수행합니다:
  1. 핸들러에서 활성 run이 있으면 mark_preempting()을 호출합니다.
  2. 체크포인트 저장과 같은 필요한 정리 작업을 수행합니다.
  3. 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가 사용할 수 있도록 하지 않습니다.
스윕 agent는 스윕 검색 알고리즘에서 새 하이퍼파라미터 조합을 요청하기 전에 다시 큐에 들어간 run을 처리합니다. 큐가 비면 스윕은 정상 스케줄링을 재개합니다.