AI-GrandChallenge / round-1

14 stars 11 forks source link

[Track 4] test 및 test_submit 폴더에 접근이 안됩니다. #105

Closed temerara-nplab closed 4 years ago

temerara-nplab commented 4 years ago

tensorflow로 inferencing 코드를 작성하고 있습니다. data loader를 만들기 위해 아래와 같은 코드를 작성했는데요.

    paths = [join(DATASET_PATH, 'test_submit', 'test_data', name) for name 
                                                                 in os.listdir(join(DATASET_PATH, 'test_submit', 'test_data')) if not name.startswith('.')]

test_submit 폴더에 접근할 수 없다고 오류가 나오네요. test 폴더도 마찬가지입니다. 참고로 train 폴더에는 접근가능했고 더미 데이터가 1개 있는 것 확인했습니다. 도움 주시면 감사하겠습니다.

nsml-admin commented 4 years ago

안녕하세요.

training타임때는 (nsml run으로 세션을 실행했을때) test, test_submit폴더에 접근을 못합니다.

test, test_submit폴더에는 nsml submit할때 접근할수가 있습니다. nsml submit일땐 기존에 training세션을 복사해오고, infer함수에서 test데이터셋의 root_path가 들어오니 infer함수안에서 inference 작업을 진행하면 될것같습니다.

temerara-nplab commented 4 years ago

안녕하세요.

training타임때는 (nsml run으로 세션을 실행했을때) test, test_submit폴더에 접근을 못합니다.

test, test_submit폴더에는 nsml submit할때 접근할수가 있습니다. nsml submit일땐 기존에 training세션을 복사해오고, infer함수에서 test데이터셋의 root_path가 들어오니 infer함수안에서 inference 작업을 진행하면 될것같습니다.

nsmal submit 시에 util.py에 있는 inference() 함수가 실행된다는 얘기인가요? 현재 저희는 main.py 안에 inferencing 하는 부분을 넣었는데 이 부분을 inference() 함수에 넣으면 되는건가요?

nsml-admin commented 4 years ago

nsml submit 시에 nsml.bind()에 bind된 infer함수가 호출됩니다.

이 infer함수의 첫번째 argument로 test_data 의 path가 들어옵니다.

temerara-nplab commented 4 years ago

nsml submit 시에 nsml.bind()에 bind된 infer함수가 호출됩니다.

이 infer함수의 첫번째 argument로 test_data 의 path가 들어옵니다.

답변 감사합니다. 말씀해 주신대로 run으로 체크포인트 생성해서 submit 했는데요. nsml.bind()에서 save()는 정상적으로 실행되고 파일생성 되는 걸 확인했는데 그 후에 세션이 그냥 종료됩니다. load()나 infer() 자체가 실행이 안되는데 어떻게 해결해야 할까요?

아래는 저희가 수정한 nsml_util.py 내용입니다.

import nsml
import os
import tensorflow as tf
from utils import inference

def bind_model(model):
    def load(save_folder, **kwargs):
        print("Loading model")
        model = tf.lite.Interpreter(os.path.join(save_folder, 'model.tflite'))
        model.allocate_tensors()

    def save(save_folder, **kwargs):
        filename = os.path.join(save_folder, 'model.tflite')

        model2 = tf.keras.models.load_model('model.h5')
        converter = tf.lite.TFLiteConverter.from_keras_model(model2)
        converter.optimizations = [tf.lite.Optimize.DEFAULT]
        model = converter.convert()
        with open(filename, 'wb') as f:
            f.write(model)
        print("Saving model")

    def infer(data_path, **kwargs):
        print("Bind inferencing")
        return inference(model, data_path)

    nsml.bind(save=save, load=load, infer=infer)
nsml-admin commented 4 years ago

코드를 안봐서 잘모르겠지만

main파일에서 argument를 받을수있어야 하고,

pause 옵션에 따라서 (nsml에서 자동으로 셋팅함) nsml.paused()함수가 호출되어야 합니다.

이부분이 있나요?? 이부분이 있어도 안되면 세션네임을 알려주시기 바랍니다

nsml-admin commented 4 years ago

test 폴더만 있고 test_submit폴더라는건 없습니다. submit -t일때는 test_submit폴더가 마운트되긴하지만 세션내에서는 test라는 폴더로 보이게 됩니다.

baseline에서 nsml이 활용되는 부분을 확인해보시면 많이 도움이 될것같습니다.

temerara-nplab commented 4 years ago

덕분에 잘 고쳤습니다. 감사합니다.