|
|
@ -47,7 +47,6 @@ class TranspilerTest(unittest.TestCase):
|
|
|
|
avg_cost = fluid.layers.mean(cost)
|
|
|
|
avg_cost = fluid.layers.mean(cost)
|
|
|
|
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.1)
|
|
|
|
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.1)
|
|
|
|
sgd_optimizer.minimize(avg_cost)
|
|
|
|
sgd_optimizer.minimize(avg_cost)
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_main_program(self):
|
|
|
|
def get_main_program(self):
|
|
|
|
main = fluid.Program()
|
|
|
|
main = fluid.Program()
|
|
|
@ -95,8 +94,9 @@ class TranspilerTest(unittest.TestCase):
|
|
|
|
def test_transpiler(self):
|
|
|
|
def test_transpiler(self):
|
|
|
|
main = fluid.Program()
|
|
|
|
main = fluid.Program()
|
|
|
|
startup = fluid.Program()
|
|
|
|
startup = fluid.Program()
|
|
|
|
with fluid.program_guard(main, startup):
|
|
|
|
with fluid.unique_name.guard():
|
|
|
|
self.transpiler_test_impl()
|
|
|
|
with fluid.program_guard(main, startup):
|
|
|
|
|
|
|
|
self.transpiler_test_impl()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestBasicModel(TranspilerTest):
|
|
|
|
class TestBasicModel(TranspilerTest):
|
|
|
@ -249,7 +249,6 @@ class TestLRDecay(TranspilerTest):
|
|
|
|
decay_rate=0.1,
|
|
|
|
decay_rate=0.1,
|
|
|
|
staircase=True))
|
|
|
|
staircase=True))
|
|
|
|
sgd_optimizer.minimize(avg_cost)
|
|
|
|
sgd_optimizer.minimize(avg_cost)
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
pserver, startup = self.get_pserver(self.pserver1_ep)
|
|
|
|
pserver, startup = self.get_pserver(self.pserver1_ep)
|
|
|
@ -279,7 +278,6 @@ class TestLRDecayConditional(TranspilerTest):
|
|
|
|
learning_rate=fluid.layers.piecewise_decay([10000, 20000],
|
|
|
|
learning_rate=fluid.layers.piecewise_decay([10000, 20000],
|
|
|
|
[1.0, 0.5, 1.0]))
|
|
|
|
[1.0, 0.5, 1.0]))
|
|
|
|
sgd_optimizer.minimize(avg_cost)
|
|
|
|
sgd_optimizer.minimize(avg_cost)
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
pserver, startup = self.get_pserver(self.pserver1_ep)
|
|
|
|
pserver, startup = self.get_pserver(self.pserver1_ep)
|
|
|
@ -328,7 +326,6 @@ class TestL2Decay(TranspilerTest):
|
|
|
|
avg_cost = fluid.layers.mean(cost)
|
|
|
|
avg_cost = fluid.layers.mean(cost)
|
|
|
|
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.1)
|
|
|
|
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.1)
|
|
|
|
sgd_optimizer.minimize(avg_cost)
|
|
|
|
sgd_optimizer.minimize(avg_cost)
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
pserver, startup = self.get_pserver(self.pserver1_ep)
|
|
|
|
pserver, startup = self.get_pserver(self.pserver1_ep)
|
|
|
@ -363,7 +360,6 @@ class TestL2DecayWithPiecewise(TranspilerTest):
|
|
|
|
momentum=0.9,
|
|
|
|
momentum=0.9,
|
|
|
|
regularization=fluid.regularizer.L2Decay(1e-4))
|
|
|
|
regularization=fluid.regularizer.L2Decay(1e-4))
|
|
|
|
sgd_optimizer.minimize(avg_cost)
|
|
|
|
sgd_optimizer.minimize(avg_cost)
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
pserver, startup = self.get_pserver(self.pserver1_ep)
|
|
|
|
pserver, startup = self.get_pserver(self.pserver1_ep)
|
|
|
@ -393,13 +389,14 @@ class TestDistLookupTableBase(TranspilerTest):
|
|
|
|
def network_with_table(self, is_sparse, is_distributed):
|
|
|
|
def network_with_table(self, is_sparse, is_distributed):
|
|
|
|
self.table_size = 1000
|
|
|
|
self.table_size = 1000
|
|
|
|
self.emb_size = 64
|
|
|
|
self.emb_size = 64
|
|
|
|
|
|
|
|
self.lookup_table_name = 'shared_w'
|
|
|
|
|
|
|
|
|
|
|
|
def emb_pool(ids):
|
|
|
|
def emb_pool(ids):
|
|
|
|
emb = fluid.layers.embedding(
|
|
|
|
emb = fluid.layers.embedding(
|
|
|
|
input=ids,
|
|
|
|
input=ids,
|
|
|
|
size=[self.table_size, self.emb_size],
|
|
|
|
size=[self.table_size, self.emb_size],
|
|
|
|
dtype='float32',
|
|
|
|
dtype='float32',
|
|
|
|
param_attr='shared_w', # share parameter
|
|
|
|
param_attr=self.lookup_table_name, # share parameter
|
|
|
|
is_sparse=is_sparse,
|
|
|
|
is_sparse=is_sparse,
|
|
|
|
is_distributed=is_distributed)
|
|
|
|
is_distributed=is_distributed)
|
|
|
|
pool = fluid.layers.sequence_pool(input=emb, pool_type='average')
|
|
|
|
pool = fluid.layers.sequence_pool(input=emb, pool_type='average')
|
|
|
@ -572,7 +569,7 @@ class TestDistLookupTableSliceSize(TestDistLookupTableBase):
|
|
|
|
|
|
|
|
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
config = fluid.DistributeTranspilerConfig()
|
|
|
|
config = fluid.DistributeTranspilerConfig()
|
|
|
|
pserver1, startup1 = self.get_pserver(self.pserver1_ep, config)
|
|
|
|
pserver1, _ = self.get_pserver(self.pserver1_ep, config)
|
|
|
|
|
|
|
|
|
|
|
|
self.assertTrue(self.transpiler.has_distributed_lookup_table)
|
|
|
|
self.assertTrue(self.transpiler.has_distributed_lookup_table)
|
|
|
|
lookup_table_var = pserver1.global_block().vars[
|
|
|
|
lookup_table_var = pserver1.global_block().vars[
|
|
|
@ -582,6 +579,21 @@ class TestDistLookupTableSliceSize(TestDistLookupTableBase):
|
|
|
|
self.assertEqual(row_size, calc_row_size)
|
|
|
|
self.assertEqual(row_size, calc_row_size)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestDistArgsInProgram(TestDistLookupTableBase):
|
|
|
|
|
|
|
|
def net_conf(self):
|
|
|
|
|
|
|
|
self.network_with_table(is_sparse=True, is_distributed=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
|
|
|
|
trainer, _ = self.get_trainer()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.assertTrue(trainer._is_distributed)
|
|
|
|
|
|
|
|
self.assertTrue(trainer._is_chief)
|
|
|
|
|
|
|
|
self.assertEqual(trainer._distributed_lookup_table,
|
|
|
|
|
|
|
|
self.lookup_table_name)
|
|
|
|
|
|
|
|
self.assertEqual(trainer._endpoints,
|
|
|
|
|
|
|
|
[self.pserver1_ep, self.pserver2_ep])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestRMSPropOptimizer(TranspilerTest):
|
|
|
|
class TestRMSPropOptimizer(TranspilerTest):
|
|
|
|
def net_conf(self):
|
|
|
|
def net_conf(self):
|
|
|
|
x = fluid.layers.data(name='x', shape=[1000], dtype='float32')
|
|
|
|
x = fluid.layers.data(name='x', shape=[1000], dtype='float32')
|
|
|
@ -595,7 +607,6 @@ class TestRMSPropOptimizer(TranspilerTest):
|
|
|
|
avg_cost = fluid.layers.mean(cost)
|
|
|
|
avg_cost = fluid.layers.mean(cost)
|
|
|
|
optimizer = fluid.optimizer.RMSProp(learning_rate=0.1)
|
|
|
|
optimizer = fluid.optimizer.RMSProp(learning_rate=0.1)
|
|
|
|
optimizer.minimize(avg_cost)
|
|
|
|
optimizer.minimize(avg_cost)
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
pserver, startup = self.get_pserver(self.pserver1_ep)
|
|
|
|
pserver, startup = self.get_pserver(self.pserver1_ep)
|
|
|
@ -612,5 +623,40 @@ class TestRMSPropOptimizer(TranspilerTest):
|
|
|
|
self.assertEqual(moment_var.shape, (500, 1000))
|
|
|
|
self.assertEqual(moment_var.shape, (500, 1000))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestLoadSliceVar(TranspilerTest):
|
|
|
|
|
|
|
|
def net_conf(self):
|
|
|
|
|
|
|
|
x = fluid.layers.data(name='x', shape=[1000], dtype='float32')
|
|
|
|
|
|
|
|
y_predict = fluid.layers.fc(input=x,
|
|
|
|
|
|
|
|
size=1000,
|
|
|
|
|
|
|
|
act=None,
|
|
|
|
|
|
|
|
param_attr=fluid.ParamAttr(name='fc_w'),
|
|
|
|
|
|
|
|
bias_attr=fluid.ParamAttr(name='fc_b'))
|
|
|
|
|
|
|
|
y = fluid.layers.data(name='y', shape=[1], dtype='float32')
|
|
|
|
|
|
|
|
cost = fluid.layers.square_error_cost(input=y_predict, label=y)
|
|
|
|
|
|
|
|
avg_cost = fluid.layers.mean(cost)
|
|
|
|
|
|
|
|
optimizer = fluid.optimizer.RMSProp(learning_rate=0.1)
|
|
|
|
|
|
|
|
optimizer.minimize(avg_cost)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def transpiler_test_impl(self):
|
|
|
|
|
|
|
|
pserver, _ = self.get_pserver(self.pserver1_ep)
|
|
|
|
|
|
|
|
pserver2, _ = self.get_pserver(self.pserver2_ep)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.assertTrue(pserver._slice_vars_and_attrs)
|
|
|
|
|
|
|
|
self.assertTrue(pserver2._slice_vars_and_attrs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for idx in xrange(len(pserver._slice_vars_and_attrs)):
|
|
|
|
|
|
|
|
self.assertEqual(pserver._slice_vars_and_attrs[idx][0],
|
|
|
|
|
|
|
|
pserver2._slice_vars_and_attrs[idx][0])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
total_numel = reduce(lambda x, y: x * y,
|
|
|
|
|
|
|
|
pserver._slice_vars_and_attrs[idx][0].shape)
|
|
|
|
|
|
|
|
self.assertEqual(
|
|
|
|
|
|
|
|
total_numel,
|
|
|
|
|
|
|
|
reduce(lambda x, y: x * y,
|
|
|
|
|
|
|
|
pserver._slice_vars_and_attrs[idx][2].shape) + reduce(
|
|
|
|
|
|
|
|
lambda x, y: x * y,
|
|
|
|
|
|
|
|
pserver2._slice_vars_and_attrs[idx][2].shape))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
if __name__ == "__main__":
|
|
|
|
unittest.main()
|
|
|
|
unittest.main()
|
|
|
|