Распределенный тензорный поток Тензорный лес - PullRequest
0 голосов
/ 25 мая 2018

Пожалуйста, я новичок в распределенной обработке, и я хочу знать, как мы можем обучить модель тензорного леса с использованием распределенного тензорного леса?Я понял, как это делается для нейронных сетей, но я не понял для tenorforest, который представляет собой реализацию Random Forest, использующую инфраструктуру тензор потока

1 Ответ

0 голосов
/ 04 апреля 2019

Я недавно вник в эту тему.Поскольку TensorForestEstimator является производным от tf.contrib.learn.Estimator, его можно использовать в распределенной обучающей среде.

Проблема, с которой я столкнулся, заключается в том, как правильно настроить назначение устройства.Конструктор для TensorForestEstimator принимает аргумент ключевого слова device_assigner.

device_assigner: An object instance that controls how trees get assigned to devices. If None, will use tensor_forest.RandomForestDeviceAssigner.

Документация не является точной.По умолчанию это экземпляр tf.contrib.framework.VariableDeviceChooser.

https://github.com/tensorflow/tensorflow/blob/v1.12.0/tensorflow/contrib/tensor_forest/python/tensor_forest.py#L380

Код создает экземпляр VariableDeviceChooser без аргументов, который следует запускать без серверов параметров.Это нормально для среды с одним компьютером, но не для распределенной среды.Я попытался передать значение VariableDeviceChooser, для которого было установлено число серверов параметров, полученных из данных в TF_CONFIG.

Это сообщение об ошибке, которое я наблюдаю, когда сеанс инициируется во время операции обучения.

  File "/home/ubuntu/.pyenv/versions/cmle-1_12-py-3_5/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1334, in _do_call
    return fn(*args)
  File "/home/ubuntu/.pyenv/versions/cmle-1_12-py-3_5/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1317, in _run_fn
    self._extend_graph()
  File "/home/ubuntu/.pyenv/versions/cmle-1_12-py-3_5/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1352, in _extend_graph
    tf_session.ExtendSession(self._session)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot assign a device for operation device_dummy_0/Initializer/random_uniform/RandomUniform: Could not satisfy explicit device specification '' because the node {{colocation_node device_dummy_0/Initializer/random_uniform/RandomUniform}} was colocated with a group of nodes that required incompatible device '/job:ps/task:0/device:CPU:0'
Colocation Debug Info:
Colocation group had the following types and devices: 
IsVariableInitialized: CPU 
Assign: CPU 
Identity: CPU XLA_CPU 
VariableV2: CPU  
Mul: CPU XLA_CPU 
Add: CPU XLA_CPU 
Sub: CPU XLA_CPU 
RandomUniform: CPU XLA_CPU 
Const: CPU XLA_CPU 

Colocation members and user-requested devices:
  device_dummy_0/Initializer/random_uniform/shape (Const) 
  device_dummy_0/Initializer/random_uniform/min (Const) 
  device_dummy_0/Initializer/random_uniform/max (Const) 
  device_dummy_0/Initializer/random_uniform/RandomUniform (RandomUniform) 
  device_dummy_0/Initializer/random_uniform/sub (Sub) 
  device_dummy_0/Initializer/random_uniform/mul (Mul) 
  device_dummy_0/Initializer/random_uniform (Add) 
  device_dummy_0 (VariableV2) /job:ps/task:0/device:CPU:0   
  device_dummy_0/Assign (Assign) /job:ps/task:0/device:CPU:0
  device_dummy_0/read (Identity) /job:ps/task:0/device:CPU:0
  report_uninitialized_variables/IsVariableInitialized_1 (IsVariableInitialized) /job:ps/task:0/device:CPU:0  
  report_uninitialized_variables_1/IsVariableInitialized_1 (IsVariableInitialized) /job:ps/task:0/device:CPU:0
  save/Assign_1 (Assign) /job:ps/task:0/device:CPU:0

     [[{{node device_dummy_0/Initializer/random_uniform/RandomUniform}} = RandomUniform[T=DT_INT32, _class=["loc:@device_dummy_0"], dtype=DT_FLOAT, seed=0, seed2=0](device_dummy_0/Initializer/random_uniform/shape)]]```
...