Chcę zmienić mój _model_fn
dla Estimator
w rozwiązanie z wieloma procesorami graficznymi.Konfiguracja wielu GPU/Tower Tensorflow 1.2 Estimator
Czy istnieje sposób, aby to zrobić w ciągu API Esitmator czy muszę jawnie umieszczenie urządzenia kod i synchronizacja.
Wiem, że mogę użyć modelu tf.device('gpu:X')
, aby umieścić mój model na GPU X
. Wiem również, że mogę przechwytywać dostępne nazwy GPU w celu replikowania mojego modelu na wielu procesorach graficznych. Wiem również, że mogę użyć pojedynczej kolejki wejściowej dla wielu procesorów graficznych.
Nie wiem, które części (optymalizator, obliczanie strat), mogę faktycznie przejść do GPU i gdzie muszę zsynchronizować obliczenia.
Z przykładu Cifar10
wynika, że muszę tylko zsynchronizować gradient.
Zwłaszcza podczas korzystania
train_op = tf.contrib.layers.optimize_loss(
loss=loss,
global_step=tf.contrib.framework.get_global_step(),
learning_rate=learning_rate,
learning_rate_decay_fn=_learning_rate_decay_fn,
optimizer=optimizer)
nie mogę nazwać optimizer.compute_gradients()
lub optimizer.apply_gradients()
ręcznie już jak to jest wewnętrznie obsługiwane przez .optimize_loss(..)
Zastanawiam się jak uśrednić gradienty jak to się robi w cifar10 przykład Cifar10-MultiGPU lub jeśli jest to nawet właściwe podejście do Estimator
.