Closed HyunjiEllenPak closed 5 years ago
안녕하세요
한 세션안에서 여러개의 모델을 로드하려면 bind_model을 여러번호출하면 될것같습니다(정확히는 nsml.bind()
입니다)
예를들어서 세션네임 A와 B를 코드안에서 호출한다고 한다면,
model_for_A = Model() #load 할 model의 빈 아키텍처를 미리 정의합니다.
model_for_B = Model()
bind_model(model=model_for_A)
nsml.load('checkpoint', session='A')
bind_model(model=model_for_B)
nsml.load('checkpoint', session='B')
위와같이 하면 model_for_A
와 model_for_B
에는 weight가 로드된 모델이 만들어 집니다.
bind_model
내의 load함수는 다운로드받은 체크포인트를 '어떻게' 로드하는지를 정의하는함수입니다.
@nsml-admin 답변 감사드립니다~!! 두가지 질문사항이 있습니다.
위의 설명은 keras기준이라서 모델을 로드하신 것 같습니다. tensorflow의 경우에는 session을 로드하는데, 그러면 model_for_A=Model()대신에 sess_for_A=tf.Session()로 빈세션을 정의하고 bind_model(sess=sess_for_A)에 sess_for_A를 넘겨주면 되는 것인지요?!
그리고 저희가 한번에 여러개의 모델을 로드해서 각 모델로 db, query계산하여 사용하고 싶은데, 위와 같이 로드하면 infer는 어떻게 실행되는 건가요?
@nsml-admin
안녕하세요, 궁금한 점이 있는데 submit 할 경우 naver서버에서 자동적으로 nsml.load, nsml.infer 를 실행한다고 알고있습니다. 그렇다면 submit을 할 경우 저렇게 다른 모델이나 세션으로 여러번 로드를 할 수 없을텐데 어떻게 하면 좋을까요?
@HyunjiEllenPak
sess
를 정의하면, bind_model안의 load
함수에서 saver.restore(sess, ...)
가 참조하는 sess
로 로드가 된다면 빈세션을 넘겨줘도 될것같습니다.@HyunjiEllenPak @heasungkim
nsml.bind()
가 실행 되었다고해도 nsml.paused()
가 호출되기전 마지막의 nsml.bind()
로 전달된 load
가 호출된후 infer
함수가 호출됩니다.
위와같이 로드한 객체를 global변수로 선언하거나 infer함수안에서 참조가 가능하게 한후 infer를 하면될 것 같습니다.아니면 여러개의 세션을 로드, 저장한후 종료하는 더미세션을 만든후 그더미세션을 nsml submit [dummy session]
명령어로 서브밋 하는방법이 있을것같습니다.
요청사항 안녕하세요~!
submit할 때 코드에서 bind_model을 한번 호출하여 bind_model안에서 여러개의 세션을 로드하고자 합니다. 그런데 nsml 서버에서 submit시에 load가 불리는 flow를 알지 못하여 위의 내용을 구현 하는데 어려움이 있습니다. ㅠㅠ
저희가 submit을 하면 mode='test'로 바뀌면서 bind_model내의 load함수가 자동으로 호출되어 모델이 로드되고 그 모델을 이용하여 자동으로 infer를 실행합니다. ->한 번 infer가 불린 후 자동으로 제출이 되는데, 여기서 저희가 여러개의 모델을 로드하여 infer를 실행하려면 어떻게 해야하는 건가요?!
저희는 tensorflow로 구현하고 있고 저희가 사용하고 있는 load함수는 아래와 같습니다.