2017-05-23 6 views
2

배경

나는 Keras로 훈련했고 지금은 배치하려는 RNN 256 개의 숨겨진 유닛 인 단일 계층을 가지고 있습니다. 이상적으로이 RNN의 여러 인스턴스를 GPU에 배포하고 싶습니다. 그러나이 시점에서 모델을 keras.models.load_model()으로로드하면 사용 가능한 12Gb GPU 메모리의 11Gb가 사용 된 것 같습니다.훈련 된 신경망 메모리 사용의 이해

질문

는 는
  • 이유는 아주 작은 내 네트워크는, 너무 많은 메모리를
      를 차지 ? 나는 단지 훈련하기보다는 예측하기를 원한다. 모델을 잘못된 방향으로로드합니까?
    1. 일반적으로 사용하는 GPU 메모리의 양에 내 RNN 구조를 매핑 할 수있는 방법이 있습니까?
    2. 이렇게 이해하면 내 RNN에서 소비하는 메모리 양을 어떻게 줄일 수 있습니까?

    현재 이해

    사용이 하이퍼 매개 변수의 수에서 부여한다 얼마나 많은 메모리 내 네트워크의 나의 현재 추정 :

    • 256 입력 무게
    • 256 출력 무게
    • 256x256 반복 가중치
    • 256 숨겨진 단위 의
    • 256 숨겨진 장치는

    총 바이어스 : 32 bits/parameter x (4 x 256 + 256 x 256) parameters = 260e6 bits

    이 내가 현재보고있는 무슨 다음 현저하게 적습니다. 그래서 내 가설은 Keras가 여전히 내 모델을 교육 중이라서 일괄 오류 크기를 캐싱하려고한다는 것입니다. 하지만 어떻게하면 내 모델을로드해야합니까?

  • 답변

    4

    아니요, 이것은 GPU 메모리 사용 전략 일뿐입니다. Keras는 일반적으로 tensorflow를 기반으로하며 tensorflow는 사용 가능한 메모리 양에 관계없이 동적 메모리 할당을 피하기 위해 사용 가능한 GPU 메모리를 모두 매핑합니다.

    아래처럼 구성 할 수 있습니다

    import tensorflow as tf 
    from keras.backend.tensorflow_backend import set_session 
    config = tf.ConfigProto() 
    config.gpu_options.per_process_gpu_memory_fraction = 0.3 # or any valid options. 
    set_session(tf.Session(config=config))