ParameterServerStrategy TensorFlow не работает должным образом

Я хочу обучить модель с помощью ParameterServerStrategy, предоставляемого TensorFlow для API-интерфейса оценщика. Принимая во внимание учебник, я реализовал следующий код (я прилагаю часть кода, которая является важной):

strategy = tf.distribute.experimental.ParameterServerStrategy()

server = tf.distribute.Server(
            config_json['cluster'], #earlier a config_json for setting TF_CONFIG to env. variables
            job_name = job_type, # job_type ps/ worker depending on task
            task_index = job_index  # corresponding job_index
         )
if job_type == 'ps':
   server.join()
else:
   # Datasets is a class where I create necessary input pipelines with the dataset api
   train_input_fn = lambda : Datasets.get_train_data_pipeline_from_tensors(...)
   valid_input_fn = lambda : Datasets.get_valid_data_pipeline_from_tensors(...)

   run_config = tf.estimator.RunConfig(
                      save_checkpoints_steps=steps_per_epoch,
                      log_step_count_steps=steps_per_epoch,
                      model_dir=<hdfs_path>, # Model checkpoints are made on a hdfs folder
                      train_distribute=strategy
                )
   keras_model = ...
   estimator = tf.keras.estimator.model_to_estimator(
                        keras_model=keras_model, 
                        config=run_config
                )
   train_spec = tf.estimator.TrainSpec(
                        train_input_fn, max_steps=epochs*steps_per_epoch
                )                                                                                                                                                                               
   eval_spec = tf.estimator.EvalSpec(
                        valid_input_fn, steps=validation_steps
                )

   tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)

Запустив приведенный выше код на моем собственном кластере, имея активное выполнение на TensorFlow v2.3, включенном по умолчанию, я заметил следующее:

  • По умолчанию он работает в режиме распределенного координатора INDEPENDENT_WORKER (я полагаю, это правильно, поскольку другой относится к удаленному кластеру, поскольку я не отправляю код другому удаленному кластеру)
  • Мониторинг с помощью ганглиев, кажется, что серверы параметров на самом деле не работают (и процессор, и память почти равны нулю). Соответствующий процесс python постоянно спит, как будто он не нужен. Сеть кластера также равна нулю, что указывает на отсутствие связи.
  • Каждый воркер работает, но использует только один процессор из 4 (кластер не содержит графических процессоров).

Подводя итог, мои вопросы следующие:

  1. Как можно не использовать машины с сервером параметров в настройке? Есть ли в приведенном выше коде очевидные ошибки / отсутствующие параметры?
  2. Как я могу настроить рабочие задачи на использование всех ядер ЦП? Я пробовал с inter/ra_op_parallelism_threads с помощью ConfigProtos, но разницы нет. Я также заметил, что в списке физических устройств отображается только один процессор.

Заранее спасибо за помощь!

0 ответов

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