2017-01-23 1 views
0

Я хотел бы использовать распределенный тензорный поток для обучения модели по потоковой передаче с использованием сервера параметров. Установка рабочего что-то подобное на основе 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 при добавлении входных операторов во втором проходе. Как я могу заставить этот пример работать?

+0

Вы можете попробовать '._unsafe_unfinalize()' на вашем объекте графа, хотя более надежным решением будет создание всех необходимых операций заблаговременно (есть проблемы с производительностью/потоками, вызванные изменением графика при его запуске/одновременно) –

+0

@ Ярослав Булатов - не могли бы вы назвать это своим ответом? Благодаря! – dga

ответ

0

Вы можете попробовать ._unsafe_unfinalize() на вашем объекте графа, хотя более надежным решением будет создание всех необходимых операций заблаговременно (есть проблемы с производительностью/потоком безопасности, вызванные изменением графика при его запуске/одновременном)