Recovery¶
NSML을 사용하다 보면, 여러 이유로 세션이 멈춰서 복구해야 할 때가 있습니다. NSML library 에서 제공하는 함수의 사용 여부에 따라서 복구 방법이 달라집니다. 자세한 복구 프로세스는 다음과 같습니다.
모델을 기존 세션에서 받아와야 할 경우
- nsml download 로 세션에 접근해서 모델을 가져오고, nsml run 할 때 모델과 코드를 같이 올린 후 코드 안에서 가져온 모델을 load한 후 세션을 실행시킵니다.
모델이 NSML server에 저장되어있고, 이를 불러올 경우
- 코드 안에서 nsml.load 로 대상 세션의 모델을 불러올 수 있습니다.
- nsml model pull 로 저장된 모델을 가져온 후 1번과 같이 복구할 수 있습니다.
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이 미리 파악해서 메일을 보내드립니다.