¿Es posible dividir una red en varias GPU en tensorflow?

Planeo ejecutar una red recurrente muy grande (por ejemplo, 2048×5), ¿es posible definir una capa en una GPU en tensorflow? ¿Cómo debo implementar el modelo para lograr la mejor eficiencia? Entiendo que hay una sobrecarga para la comunicación entre GPU o GPU-CPU-GPU.

La división de un modelo grande en múltiples GPU es ciertamente posible en TensorFlow, pero hacerlo de manera óptima es un problema de investigación difícil. En general, deberá hacer lo siguiente:

  1. Envuelva grandes regiones contiguas de su código en un with tf.device(...): nombrando las diferentes GPU:

     with tf.device("/gpu:0"): # Define first layer. with tf.device("/gpu:1"): # Define second layer. # Define other layers, etc. 
  2. Al crear su optimizador, pase el argumento opcional colocate_gradients_with_ops=True al método optimizer.minimize() :

     loss = ... optimizer = tf.train.AdaGradOptimizer(0.01) train_op = optimizer.minimize(loss, colocate_gradients_with_ops=True) 
  3. (Opcionalmente.) Es posible que deba habilitar la “colocación suave” en tf.ConfigProto cuando cree su tf.Session , si alguna de las operaciones en su modelo no puede ejecutarse en la GPU:

     config = tf.ConfigProto(allow_soft_placement=True) sess = tf.Session(config=config)