Closed ellexi-ai closed 4 years ago
bind 한후, nsml.save() 까지 하셔야 nsml model ls에서 확인이 됩니다.(https://github.com/AI-GrandChallenge/round-1/blob/master/iitp_falling/main.py#L191)
세션이 종료되는 이유는 entry파일(main.py)이 종료 되었기 때문에 더이상 실행할 코드가 남아있지 안을때 종료됩니다.
nsml.save('model') 까지 정상 실행 됐습니다. 그리고 세션이 종료되어 nsml model ls {session_id}가 불가 합니다
run을 할때 main.py를 실행하여 save까지 하고 submit 실행시 load, infer가 호출되는걸로 이해하고 있는데, 그럼 nsml.save 이후 main.py를 종료하지 않고 어떻게 세션 유지하나요(이게 맞는 방법인가요.)?
nsml.save('model') 이후 기존 동일한 코드 사용하고 있습니다
bind_nsml(model)
nsml.save('model')
if config.pause:
nsml.paused(scope=locals())
if config.mode == 'train':
val_loader = data_loader_local(root=VAL_DATASET_PATH)
time_ = datetime.datetime.now()
if not IS_ON_NSML and config.local_eval:
# Local debugging block.
start_time = time.time()
local_eval(model, val_loader, VAL_LABEL_PATH)
print('{} sec'.format(time.time() - start_time))
세션이 종료되더라도 종료된 세션에 대한 nsml model ls
는 됩니다.
예를들어 A라는 세션에서 nsml.save('model')
을 이용해서 checkpoint를 저장하고 세션을 종료하면 nsml model ls A
를 입력하면 model
이라는 checkpoint가 보이게 됩니다.
말씀하신대로 run을 하면 save까지 하고 종료되면 (정상입니다)
submit할때는 nsml submit A
를 입력하면 됩니다. (내부적으로는 A라는 세션의 정보를 그대로 가져와서 새로운 세션을 생성하고, 그세션안에선 nsml.bind에 bind된 load, infer함수가 호출됩니다.)
run이 실행되고 있을때 nsml model ls {session_id}를 하면 checkpoint에 model이 뜨는걸 확인 했습니다 그러나 run이 끝나고 user session exited가 뜸과 동시에 nsml model ls {session_id} 을 실행하면 아래와 같은 에러가 발생합니다.
Error: Invalid value for "SESSION": No valid sessions FATA[2020/07/30 18:14:46.508] Internal server error
세션 아이디 입니다. 확인 부탁드립니다
t0099/tr-1/63
nsml run을 할때 커맨드가 어떻게 되나요?
기존 예시에서 -i 만 add 하였습니다
nsml run -d tr-1 -e main.py -c 2 -i --memory 16G
참고로 weight-file 값은 내부에서 path지정 하였고 나머지 arg 값들은 default 값 사용중입니다
-i 를 추가하면 세션을 끝나고 삭제하는 옵션입니다. -i 옵션을 빼고 해보실래요.?
네 해결되었네요.. 감사합니다
nsml run을 하면 main.py에서 load_weight을 통해 모델을 로드하고 bind에서 save까지 정상작동합니다
그리고 나서 user session exited라고 뜨면서 세션이 종료됩니다. nsml model ls 을 통해서 확인해도 모델이 올라가지 않습니다
모델이 커서 run 할때마다 웹서버에서 모델을 다운받는 작업이 들어가는데 세션이 유지되지 않아 run 할 때마다 매번 다운을 받는 시간소비적인 작업이 필요합니다.
왜 세션이 종료 되는지, 어떻게 유지 하는지요?