tensorflow, 딥러닝(GPU 작업) 중 해제하기.

조회수 1429회

현재 tensorflow GPU로 딥러닝 학습시키고 있습니다. Graph,Session 초기화하고 새로만들어서 GPU할당량 만큼 동시에 여러개 학습 시키도록 짰는데요. 학습시간이 긴 작업은 중간에 중지시키고 싶은데, 잘 해결방법을 못찾겠습니다.

처음 시도한게 Session ID를 만들어서 각 Session ID마다 dafault 시키는 방법 이었는데, 아무리 찾아봐도 Session을 열고 닫아만 주지 ID를 따로 부여하는거 같지 않더라고요.

stop누르면 특정 경로에 log파일 만들어서 log파일 있을 시 break문으로 학습 종료 시키려 했는데, history=fit() 내장 함수 안에서 모든게 학습되기 때문에 하지 못했고,

keras 내에 callback(딥러닝 학습 중 학습 값이 더디거나, 변화없으면 학습종료) 함수에 변수를 넣고, 해보려 했는데, 잘 해결하지 못했습니다.

딥러닝 학습 도중 원하는 세션만 닫는 방법론 공유해주시면 감사하겠습니다.

실행 파일.py

import tensorflow as tf
import keras
from keras.backend.tensorflow_backend import clear_session

def IoT():

    g1 = tf.get_default_graph()
    s1 = tf.get_default_session()
    del g1, s1
    # 기존 graph,session을 제거(새로운 그래프,세션를 만들기 위함<메모리 release문제로>)
    g=tf.Graph() #새롭게 그래프 선언해 세션을 만들고 gpu 작업.
    with g.as_default():
        s=tf.Session(config=config)
        with s.as_default
        ....
        #세션 선언하고 인공지능 모델링 돌리는 부분
        mode11 = Model(x, fix_names([xpred, yfake, yreal], ["xpred", "yfake", "yreal"]))
        ....
        model = AdversarialModel(base_model=model11,
                                         player_params=[generative_params, discriminator.trainable_weights],
                                         player_names=["generator", "discriminator"])
        ....
        model.adversarial_compile(adversarial_optimizer=adversarial_optimizer,
                                          player_optimizers=[Adam(3e-4, decay=1e-4), Adam(1e-3, decay=1e-4)],
                                          loss={"yfake": "binary_crossentropy", "yreal": "binary_crossentropy",
                                                "xpred": "mean_squared_error"},
                                          player_compile_kwargs=[{"loss_weights": {"yfake": 1e-1, "yreal": 1e-1,
                                                                                   "xpred": 1e2}}] * 2)
        ....
        #출력하고 히스토리를 저장하는 부분
        csv_logger = keras.callbacks.CSVLogger(log_path)
        history = fit(model, x=xtrain, y=y, validation_data=(xtest, ytest), nb_epoch=epoch,
                              batch_size=int(batch), callbacks=[csv_logger])

clear_session()
    s.close()
    del g, s

작업 중지.py

def workstop():
    work stop
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • Modeing 진행중에 접근할 수 있는 사용자 정의 함수를 만들어서 해결했습니다. Model fit에 사용자 정의 CallBack 함수 만들어서, 함수안에 조건이 만족했을 때, if문으로 조건을 줘서 세션 멈추게 해주는 stop 함수로 해결 했숩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)