Recovery

NSML을 사용하다 보면, 여러 이유로 세션이 멈춰서 복구해야 할 때가 있습니다. NSML library 에서 제공하는 함수의 사용 여부에 따라서 복구 방법이 달라집니다. 자세한 복구 프로세스는 다음과 같습니다.

  1. 모델을 기존 세션에서 받아와야 할 경우

    • 코드 안에서 nsml.load 로 대상 세션의 모델을 불러올 수 있습니다.
  2. NSML 명령어를 사용하여 세션을 재생성할 수 있을 경우

    • nsml fork 명령어로 기존 세션을 복사해서 마지막으로 저장한 모델, 혹은 특정 모델부터 학습을 재개할 수 있습니다.

복구가 필요한 상황 역시 크게 세 종류로 구분할 수 있으며, 각각의 상황 및 대처법은 다음과 같습니다.

  • 세션이 비정상 종료된 경우
    • OOM 같이 세션이 예고 없이 죽는 경우입니다. 위의 1, 2, 3의 방법으로 해결할 수 있습니다.
  • 세션이 응답이 없는 경우
    • nsml [rm, plot, exec, stop, sh, logs, download...] 등 세션에 접근하는 명령어가 반응이 없는 경우인데, 위의 2, 3의 방법으로 해결 또는 NSML admin에게 제보 후 복구가 된다면 1의 방법으로 해결합니다
  • 세션 로그에 'NSML warning' 이 발생한 경우
    • NSML server와 통신하는 도중 에러가 발생한 경우입니다. NSML admin에게 로그 내용 제보하면, 상황에 맞게 복구 방법을 안내받을 수 있습니다.
    • 스토리지 문제로 모델 저장이 실패한 경우 복구가 불가능합니다 (세션 내에 저장했다면 1번으로 복구 가능합니다). 이러한 상황을 피하기 위해서, 모델 저장소 관리가 필요합니다. nsml ps -a 를 통해서 현재 있는 세션의 크기를 직접 체크할 수 있고, 가용 용량이 부족할 때에는 NSML admin이 미리 파악해서 메일을 보내드립니다.