wandb.init()을 호출한 프로세스로부터 더 이상 하트비트를 받지 못하고, 해당 프로세스가 wandb.finish()를 호출하지 않았을 때 run을 Crashed로 표시합니다. 이는 트레이닝 프로세스가 강제 종료되거나, 예기치 않게 종료되거나, 정상 종료를 보고하기 전에 연결이 끊어질 때 발생합니다.
일반적인 원인
- 메모리 부족(OOM) 오류: 사용 가능한 메모리를 초과하면 OS 또는 GPU 드라이버가 프로세스를 종료합니다.
output.log에서CUDA out of memory또는Killed메시지를 확인하세요. - 처리되지 않은 예외: 처리되지 않은 Python 예외로 인해
wandb.finish()를 호출하지 못한 채 프로세스가 종료됩니다. 예외는output.log에 표시됩니다. - 작업 스케줄러 선점: SLURM 또는 다른 클러스터 스케줄러에서는 작업이 선점되어 경고 없이 종료될 수 있습니다. 이 경우 run은 정상적으로 종료할 기회를 얻지 못합니다.
- 네트워크 손실: 드문 경우지만 장시간 네트워크 장애가 발생하면, W&B 백엔드가 하트비트를 기다리다가 시간 초과로 인해 프로세스가 아직 실행 중이더라도 run을 크래시된 것으로 표시할 수 있습니다.
- 수동으로 프로세스 종료:
kill -9또는SIGKILL을 사용하면 Python의 시그널 핸들러를 우회하므로wandb.finish()가 호출되지 않습니다.
- 프로젝트 사이드바에서 Runs를 클릭하세요.
- run 이름을 클릭한 다음 Files 탭을 클릭하세요.
- stdout/stderr용
output.log를 다운로드하세요. 이 파일에는 일반적으로 크래시를 일으킨 오류가 들어 있습니다. - W&B 수준의 진단 정보(연결 문제, 업로드 오류)를 확인하려면
debug.log와debug-internal.log를 다운로드하세요. - run이 클러스터에서 실행된 경우, 선점 또는 OOM 시그널이 있었는지 스케줄러의 작업 로그도 확인하세요.
wandb sync를 사용해 로컬 run 디렉터리에 버퍼링된 데이터를 푸시하세요. [TIMESTAMP]와 [ID]를 run의 값으로 바꾸세요:
wandb.init()를 컨텍스트 관리자로 사용하세요. 그러면 run은 Crashed가 아니라 Failed로 표시되고, 버퍼링된 데이터가 플러시됩니다:
Runs run 크래시