AssertionError: `assert not _is_device_list_single_worker(devices)` при обучении оценщика на AI-платформе с зеркальной стратегией с TF 2.1
Я занимаюсь обучением на gcp ai-платформе для оценщиков тензорного потока со стратегией зеркального распределения с --python-version 3.7
а также --runtime-version 2.1
.
Ниже я привожу необходимый фрагмент кода:
SESS_CONFIG = tf.compat.v1.ConfigProto(
allow_soft_placement=True,
log_device_placement=False,
intra_op_parallelism_threads=0,
gpu_options=tf.compat.v1.GPUOptions(force_gpu_compatible=True))
config = tf.estimator.RunConfig(save_summary_steps=10,
save_checkpoints_steps=20,
session_config=SESS_CONFIG,
keep_checkpoint_max=5,
log_step_count_steps=100,
train_distribute=tf.distribute.MirroredStrategy(), # Distribution Strategy
eval_distribute=tf.distribute.MirroredStrategy(), # Distribution Strategy
experimental_max_worker_delay_secs=None)
# -----------
custom_estimator_model = tf.estimator.Estimator(
model_fn=model_fn(), model_dir=model_dir,
config=config)
train_spec = tf.estimator.TrainSpec(input_fn=input_fn,
max_steps=train_steps)
eval_spec = tf.estimator.EvalSpec(input_fn=eval_input_fn,
steps=eval_steps,
exporters=exporters,
throttle_secs=eval_throttle_secs)
tf.estimator.train_and_evaluate(custom_estimator_model,
train_spec,
eval_spec)
Конфиг: config.yaml
используемый:
trainingInput:
masterType: complex_model_m_gpu
scaleTier: CUSTOM
Код работал на ai-платформе с tensorflow 1.14 и Python 3.5 и вRunConfig()
стратегия была представлена как train_distribute=tf.contrib.distribute.MirroredStrategy()
. Но после обновления TF2 он был изменен наtrain_distribute=tf.distribute.MirroredStrategy()
. После этого изменилась ошибка:
Ошибка:
Traceback (most recent call last):
File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/root/.local/lib/python3.7/site-packages/trainer/task.py", line 239, in <module>
main()
File "/root/.local/lib/python3.7/site-packages/trainer/task.py", line 235, in main
model_dir=model_dir)
File "/root/.local/lib/python3.7/site-packages/trainer/models/models.py", line 244, in train_from_scratch
self.train_estimator(model_dir)
File "/root/.local/lib/python3.7/site-packages/trainer/models/models.py", line 234, in train_estimator
eval_spec)
File "/root/.local/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/training.py", line 463, in train_and_evaluate
_TrainingExecutor)
File "/root/.local/lib/python3.7/site-packages/tensorflow/python/distribute/estimator_training.py", line 290, in train_and_evaluate
session_config=run_config.session_config)
File "/root/.local/lib/python3.7/site-packages/tensorflow/python/distribute/distribute_coordinator.py", line 836, in run_distribute_coordinator
task_type, task_id)
File "/root/.local/lib/python3.7/site-packages/tensorflow/python/distribute/distribute_coordinator.py", line 548, in _configure_session_config_for_std_servers
task_id=task_id)
File "/root/.local/lib/python3.7/site-packages/tensorflow/python/distribute/distribute_lib.py", line 1127, in configure
session_config, cluster_spec, task_type, task_id)
File "/root/.local/lib/python3.7/site-packages/tensorflow/python/distribute/mirrored_strategy.py", line 788, in _configure
self._initialize_multi_worker(multi_worker_devices)
File "/root/.local/lib/python3.7/site-packages/tensorflow/python/distribute/mirrored_strategy.py", line 510, in _initialize_multi_worker
device_dict = _group_device_list(devices)
File "/root/.local/lib/python3.7/site-packages/tensorflow/python/distribute/mirrored_strategy.py", line 265, in _group_device_list
assert not _is_device_list_single_worker(devices)
AssertionError
1 ответ
У меня также была эта проблема, когда я обновлял среду выполнения 1.5 до 2.3, используя стратегию зеркального отображения.
Кажется, что конфигурация по умолчанию для мастера изменилась (см. Chief-versus-master ), что приводит к сбою tf с этой ошибкой, когда он пытается настроить координатор с одним рабочим. Для нас решением было отключить TF_CONFIG (
del os.environ["TF_CONFIG"]
), что заставило его вернуться к предыдущему поведению.