Рабочий механизм sessions.run(tf.variables_initializer(var_list) с распределенным тензорным потоком

Я запускаю приложение с распределенным тензорным потоком с 20 PS и 100 Workers.

И есть главный рабочий по имени worker0, который берет на себя дополнительную работу, например, инициализацию переменных.

Когда я пытаюсь инициализировать некоторые очень большие переменные через sessions.run(tf.variables_initializer([large_variable_list])). Инициализация идет очень медленно, кажется, что переменные создаются в worker0, а затем отправляются в ps.

Итак, мой вопрос: каков точный механизм инициализации переменной с распределенным тензорным потоком. Он был создан в worker, а затем отправлен в PS?

А как отследить процесс инициализации переменной?

log of worker0

2019-09-09 08:20:12.238889 Start to initialize all variables
2019-09-09 08:20:20.549082: W tensorflow/core/framework/allocator.cc:124] Allocation of 12271335136 exceeds 10% of system memory.
2019-09-09 08:20:36.105050: W tensorflow/core/framework/allocator.cc:124] Allocation of 12271335136 exceeds 10% of system memory.
2019-09-09 08:21:06.638078: W tensorflow/core/framework/allocator.cc:124] Allocation of 12271335136 exceeds 10% of system memory.
2019-09-09 08:21:27.582467: W tensorflow/core/framework/allocator.cc:124] Allocation of 12271335136 exceeds 10% of system memory.
2019-09-09 08:21:53.365509: W tensorflow/core/framework/allocator.cc:124] Allocation of 12271335136 exceeds 10% of system memory.
2019-09-09 08:42:32.114437 Initialize all variables success.
2019-09-09 08:42:33.471465 Start to initialize local variables
# code sippet

term_embeddings = tf.get_variable(
                    "term_embeddings", [383479222, 5], dtype=tf.float32,
                    initializer=variable_initializer, partitioner=tf.fixed_size_partitioner(ps_count))

global_var_init_op = tf.variables_initializer([v for v in tf.global_variables() if v not in reusable_barrier.get_variables()])  

sess.run([global_var_init_op])

0 ответов

Другие вопросы по тегам