Как понять механизм кэширования в тензорном потоке
Бумага: TensorFlow: система для крупномасштабного машинного обучения, $3,3:
We optimized TensorFlow for executing large sub- graphs repeatedly with low latency. Once the graph for a step has been pruned, placed, and partitioned, its sub- graphs are cached in their respective devices. A client session maintains the mapping from step definitions to cached subgraphs, so that a distributed step on a large graph can be initiated with one small message to each participating task. This model favours static, reusable graphs, but it can support dynamic computations using dynamic control flow, as the next subsection describes.
Как понять "кешируется в соответствующих устройствах" здесь? И многим API принадлежит параметр 'caching_device', однако значением по умолчанию является False, как понять функцию CACHE?
В общем, механизм кэширования всегда будет следовать политике "INVALID cache", так какова политика кэширования?
Если мы используем больше графа модели клонов для нескольких графических процессоров с параллатизмом между графами, то есть больше клонов модели будут ссылаться на общую переменную на пс, как каждый клон будет читать удаленные переменные? Кеширует ли она переменную на некоторых локальных устройствах по умолчанию для уменьшения сетевого взаимодействия?
Больше деталей:
`` `Тур по TensorFlow https://arxiv.org/pdf/1610.01178.pdf
Наконец, важной оптимизацией, сделанной TensorFlow на этом этапе, является "канонизация" (отправка, получение) пар. В настройке, показанной на рисунке 5b, наличие каждого узла recv на устройстве B будет означать выделение и управление отдельным буфером для хранения выходного тензора ν, так что он затем может быть подан на узлы α и β соответственно. Однако эквивалентное и более эффективное преобразование размещает только один recv-узел на устройстве B, передает весь выходной поток из ν в этот единственный узел, а затем в два зависимых узла α и β. Эта последняя и последняя эволюция представлена на рисунке 5с.
`` `Приведенная выше документация описывает, что если на рисунке 5с автоматически выполняется оптимизация для уменьшения воздействия чтения чтения. Если это происходит в распределенной системе, сетевой трафик будет автоматически уменьшен как требуется.
По-другому, /model/slim/deployment/model_deploy.py попробуйте создать кэш-память следующим образом:
562 def caching_device(self):
563 """Returns the device to use for caching variables.
564
565 Variables are cached on the worker CPU when using replicas.
566
567 Returns:
568 A device string or None if the variables do not need to be cached.
569 """
570 if self._num_ps_tasks > 0:
571 return lambda op: op.device
572 else:
573 return None
я думаю, чтобы попытаться оптимизировать сетевой трафик.
Каков реальный или лучший способ сделать коммуникационную оптимизацию в распределенной системе?
Мы также предпочитаем больше разъяснений по этому поводу, и мы постараемся обновить эту проблему, если я получу больше результатов по настройке экспериментов.