Я хотел бы использовать распределенный тензорный поток для обучения модели по потоковой передаче с использованием сервера параметров. Установка рабочего что-то подобное на основе https://www.tensorflow.org/how_tos/distributed/:Как можно ввести операторы ввода в график тензорного потока после того, как началось распределенное исполнение?
def train_model(filenames, params):
with tf.device(tf.train.replica_device_setter(
worker_device='/job:worker/task:%d' % params.task_index, cluster=cluster)):
input_op = construct_input_op(filenames)
global_step = tf.Variable(0)
train_op = construct_train_op(input_op, global_step, params)
init_op = tf.global_variables_initializer()
saver = tf.train.Saver(tf.global_variables() + tf.local_variables())
supervisor = tf.train.Supervisor(
is_chief=params.task_index == 0,
logdir=params.training_summary_dir,
init_op=init_op,
saver=saver,
global_step=global_step,
save_model_secs=0)
with supervisor.managed_session(server.target) as sess:
while not supervisor.should_stop() and step <= params.max_steps:
sess.run(train_op)
supervisor.stop()
cluster = tf.train.ClusterSpec({"ps": [params.param_server_host], "worker": params.worker_hosts})
server = tf.train.Server(cluster, job_name="worker", task_index=params.task_index)
while True:
filenames = wait_for_new_training_data(...)
train_model(filenames, params)
С помощью этой установки, я получаю сообщение об ошибке выполнения, что Graph is finalized and cannot be modified
при добавлении входных операторов во втором проходе. Как я могу заставить этот пример работать?
Вы можете попробовать '._unsafe_unfinalize()' на вашем объекте графа, хотя более надежным решением будет создание всех необходимых операций заблаговременно (есть проблемы с производительностью/потоками, вызванные изменением графика при его запуске/одновременно) –
@ Ярослав Булатов - не могли бы вы назвать это своим ответом? Благодаря! – dga