2017-09-22 5 views
2

Keras에 LSTM, Permute 및 Dense의 다중 레이어를 포함하여 신경망을 구축하고 있습니다.Keras에서 CPU와 GPU의 혼합 사용

LSTM은 GPU와 비슷하지 않습니다. 그래서 연구를하고

With tf.device('/cpu:0'): 
    out = LSTM(cells)(inp) 

를 사용하지만 with에 대한 나의 이해를 바탕으로, with이 실행되는 정리 코드를 보장하기 try...finally 블록이다. 다음 CPU/GPU 혼합 사용 코드가 작동하는지 여부는 모르겠습니다. 교육 속도를 높일 것인가?

With tf.device('/cpu:0'): 
    out = LSTM(cells)(inp) 
With tf.device('/gpu:0'): 
    out = Permute(some_shape)(out) 
With tf.device('/cpu:0'): 
    out = LSTM(cells)(out) 
With tf.device('/gpu:0'): 
    out = Dense(output_size)(out) 
+0

나는 ...하지만이에 대한이 필요하지 않습니다과 같이 같은 문제에 직면 해있다 사용할 필요가 예. 변형 된 레이어는 매우 가벼우 며 거의 아무것도 수행하지 않습니다. –

답변

1

here가 읽을 수있는 바와 같이 - tf.device 그것에 의해 생성 된 컨텍스트 (블록)의 인수로서 건네 이에 기본 장치를 전환하는 콘텍스트 관리자이다. 따라서이 코드는 모두 '/cpu:0' 기기를 CPU에두고 나머지는 GPU에 달려 있습니다.

당신이 사용하는 기계에 따라 달라 지므로 훈련 속도가 향상됩니다.하지만 기기의 각 변경에 따라 데이터가 복사되는 시간이 더 짧을 것으로 예상하지는 않습니다. GPU RAM과 기계 RAM. 이것은 심지어 계산 속도를 늦출 수 있습니다.

+0

예. 확실히 훈련 속도가 빨라질 것입니다. 내 모델을 두 가지 버전으로 만들었습니다. 버전 CPU + GPU는 30 초 내에 배치를 교육합니다. 순수한 GPU 버전은 몇 분 내 인내심보다 큰 시간을 알 수 없었습니다. –

+0

comparision을위한 소스 코드/노트를 제공해 주시겠습니까? –

+0

일반 콘볼 루션 모델을 만들고 끝에 몇 개의 LSTM 레이어를 쌓으십시오. 한 모델이 LSTM 레이어에 대해 CPU를 사용하도록합니다. --- 업데이트 : 순수한 GPU 모델이 GPU의 메모리를 폭발 시켰습니다. –

0

2 개의 LSTM과 1 개의 고밀도 레이어를 사용하여 모델을 만들고 내 GPU (NVidia GTX 10150Ti)에서 교육했습니다. 여기 저의 의견이 있습니다.

  1. 사용 CUDA의 LSTM https://keras.io/layers/recurrent/#cudnnlstm
  2. 나는 매우 작은 배치 크기를 사용하는 경우 (2-10) GPU 멀티 코어를 활용하지 않는,보다 GPU의 병렬 처리를하는 데 도움이 목욕 크기를 사용하여; 그래서 배치 크기로 100을 사용했습니다.
  3. GPU로 네트워크를 훈련시키고 CPU 예측에 사용하려고하면, 컴파일 및 실행에있어 작동하지만 예측이 이상합니다. 제 경우에는 예측을 위해서 GPU를 사용할 수있는 사치를 가지고 있습니다. 멀티 레이어 LSTM에 대한
  4. , 여기

일부 샘플 조각

model = keras.Sequential() 
model.add(keras.layers.cudnn_recurrent.CuDNNLSTM(neurons 
       , batch_input_shape=(nbatch_size, reshapedX.shape[1], reshapedX.shape[2]) 
       , return_sequences=True 
       , stateful=True))