Beispiel #1
0
  def _do_pack_unpack_test(self, tt):
    """Do a single pack-unpack test.

    Args:
      tt: A _test_tuple defining the parameters of the test to do.

    This test executes a graph that performs a pack of tower_grads
    followed by an unpack and verifies that the shapes and values
    of gradient tensors are unchanged, along with paired variables.
    """
    with ops.Graph().as_default():
      tower_grads, consts, _, vrbls = self._init_tensors(
          tt.num_devices, tt.in_shapes)
      packed_tg, packing = allreduce.pack_small_tensors(
          tower_grads, max_bytes=40, max_group=10)
      unpacked_tg = allreduce.unpack_small_tensors(packed_tg, packing)
      with self.test_session() as sess:
        sess.run(variables.global_variables_initializer())
        packed = sess.run(packed_tg)
        for d in range(0, tt.num_devices):
          for t in range(0, len(tt.out_shapes)):
            num_elts = 0
            for dim in tt.out_shapes[t]:
              num_elts = (num_elts or 1) * dim
            self.assertTrue(np.array_equal(
                np.array(range(tt.out_i[t], tt.out_i[t] + num_elts),
                         dtype=np.float32).reshape(tt.out_shapes[t]),
                packed[d][t][0]))
        unpacked = sess.run(unpacked_tg)
        for d in range(0, tt.num_devices):
          for t in range(0, len(tt.in_shapes)):
            self.assertTrue(np.array_equal(consts[d][t], unpacked[d][t][0]))
            self.assertEqual(vrbls[d][t], unpacked_tg[d][t][1])
Beispiel #2
0
 def _do_all_reduce_pack_test(self, tt):
   """Test that all-reduce results are the same with or without packing."""
   with ops.Graph().as_default():
     tower_grads, consts, _, _ = self._init_tensors(
         tt.num_devices, tt.in_shapes)
     dev_prefixes = ['/job:localhost']
     num_workers = 1
     alg = 'xring'
     shards = 1
     gpu_indices = range(0, tt.num_devices)
     assert len(gpu_indices) == len(tower_grads)
     no_pack_all_reduce = allreduce.sum_gradients_all_reduce(
         dev_prefixes, tower_grads, num_workers, alg, shards,
         gpu_indices,
         agg_small_grads_max_bytes=0, agg_small_grads_max_group=1)
     packed_tg, packing = allreduce.pack_small_tensors(tower_grads, 100, 100)
     packed_all_reduce = allreduce.sum_gradients_all_reduce(
         dev_prefixes, packed_tg, num_workers, alg, shards,
         gpu_indices,
         agg_small_grads_max_bytes=0, agg_small_grads_max_group=1)
     unpacked_tg = allreduce.unpack_small_tensors(packed_all_reduce, packing)
     with self.test_session() as sess:
       sess.run(variables.global_variables_initializer())
       no_pack_values = sess.run(no_pack_all_reduce)
       pack_unpack_values = sess.run(unpacked_tg)
       for d in range(1, tt.num_devices):
         for t in range(0, len(tt.in_shapes)):
           self.assertTrue(np.allclose(no_pack_values[d][t][0],
                                       tt.num_devices * consts[0][t]))
           self.assertTrue(np.array_equal(no_pack_values[d][t][0],
                                          pack_unpack_values[d][t][0]))
Beispiel #3
0
 def testUnpackSmallTensors(self):
   packing = {'0:0': allreduce.GradPackTuple(indices=range(2),
                                             vars=['v_0_0', 'v_0_1'],
                                             shapes=[tf.TensorShape([4]),
                                                     tf.TensorShape([4])]),
              '0:1': allreduce.GradPackTuple(indices=range(3, 5),
                                             vars=['v_0_3', 'v_0_4'],
                                             shapes=[tf.TensorShape([3, 3,]),
                                                     tf.TensorShape([3, 3,])]),
              '1:0': allreduce.GradPackTuple(indices=range(2),
                                             vars=['v_1_0', 'v_1_1'],
                                             shapes=[tf.TensorShape([4]),
                                                     tf.TensorShape([4])]),
              '1:1': allreduce.GradPackTuple(indices=range(3, 5),
                                             vars=['v_1_3', 'v_1_4'],
                                             shapes=[tf.TensorShape([3, 3,]),
                                                     tf.TensorShape([3, 3,])])}
   t0 = tf.constant([0, 1, 2, 3, 4, 5, 6, 7], dtype=tf.float32)
   t1 = tf.constant([17, 17], dtype=tf.float32)
   t2 = tf.constant([0, 1, 2, 3, 4, 5, 6, 7, 8,
                     0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=tf.float32)
   t3 = tf.constant([0], dtype=tf.float32)
   tower_grads = []
   for d in range(0, 2):
     one_tower = [(t0, 'packing_var_placeholder'),
                  (t2, 'packing_var_placeholder'),
                  (t1, 'v_%d_2' % d), (t3, 'v_%d_5' %d)]
     tower_grads.append(one_tower)
   new_tower_grads = allreduce.unpack_small_tensors(tower_grads, packing)
   self.assertEqual(2, len(new_tower_grads))
   for d, tg in enumerate(new_tower_grads):
     self.assertEqual(6, len(tg))
     self.assertEqual('v_%d_0' % d, tg[0][1])
     self.assertEqual('v_%d_1' % d, tg[1][1])
     self.assertEqual('v_%d_2' % d, tg[2][1])
     self.assertEqual('v_%d_3' % d, tg[3][1])
     self.assertEqual('v_%d_4' % d, tg[4][1])
     self.assertEqual('v_%d_5' % d, tg[5][1])
     self.assertEqual(1, tg[0][0].shape.ndims)
     self.assertEqual(4, tg[0][0].shape.dims[0])
     self.assertEqual(1, tg[1][0].shape.ndims)
     self.assertEqual(4, tg[1][0].shape.dims[0])
     self.assertEqual(1, tg[2][0].shape.ndims)
     self.assertEqual(2, tg[2][0].shape.dims[0])
     self.assertEqual(2, tg[3][0].shape.ndims)
     self.assertEqual(3, tg[3][0].shape.dims[0])
     self.assertEqual(3, tg[3][0].shape.dims[1])
     self.assertEqual(2, tg[4][0].shape.ndims)
     self.assertEqual(3, tg[4][0].shape.dims[0])
     self.assertEqual(3, tg[4][0].shape.dims[1])
     self.assertEqual(1, tg[5][0].shape.ndims)
     self.assertEqual(1, tg[5][0].shape.dims[0])