2016-11-20 4 views
3

Как заявляет бумага с тензором, передача кросс-устройств Tensorflow достигается путем добавления «узлов приема» и «отправки узла» в устройства.Связь с перекрестным устройством Tensorflow

С моей точки зрения, устройство (учитывая, что задействованы только устройства ЦП) отвечает за выполнение операции. Однако данные (например: Тензор, созданный из операции, Переменный буфер) находятся в памяти. Я не знаю, как достигается передача данных с одного устройства на другое устройство физически. Я предполагаю, что передача данных достигается за счет общей памяти. Это правильно?

Я буду благодарен за любые объяснения/соответствующие коды, касающиеся того, как осуществляется передача данных. PS: TensorFlow paper link, на рисунке 4 показан механизм связи между устройствами.

ответ

5

В TensorFlow взаимодействие между устройствами достигается с помощью интерфейса Rendezvous, который имеет несколько различных реализаций, в зависимости от развертывания. Комментарий на этом интерфейсе описывает общую идею:

// A Rendezvous is an abstraction for passing a Tensor 
// from a producer to a consumer, where the consumer may safely 
// request the Tensor before or after it has been produced. A 
// producer never blocks when using a Rendezvous. A consumer has the 
// choice of making a blocking call or providing a callback: in either 
// case, the consumer receives the Tensor as soon as it is available. 

Как Вы отметили в своем вопросе, TensorFlow представляет собой общение в графе потоков данных с использованием Send и Recv опа, которые добавляются к графе автоматически, когда граф разбиваются на разных устройства , Для каждого ребра, имеющего источник и назначение на разных устройствах, разделитель графа вставляет пару и Recv операционных систем, которые имеют один и тот же ключ «сближения» (автоматически генерируемое имя строки, которое используется как ключ в индексе рандеву ожидающие обсуждения тензоры). implementation of the Send op прост: он вызывает Rendezvous::Send(), передавая его ключ рандеву и один входной тензор, а затем немедленно возвращается без блокировки. implementation of the Recv op немного сложнее: он регистрирует обратный вызов для вызова, когда тензор с данным ключом становится доступным. То, что callback отвечает за «производство» вывода Recv op и разблокирование последующих вычислений.

The Rendezvous реализаций выполняет фактическую работу передачи данных:

  • IntraProcessRendezvous обрабатывает передачу данных между устройствами в том же процессе. В (маловероятном) случае передача между двумя процессорами в одном и том же процессе, передача может быть достигнута с помощью simple Tensor assignment. В противном случае TensorFlow kicks off - специфичная для устройства процедура DMA для передачи данных между процессором и устройством GPU.

  • Класс BaseRemoteRendezvous и его подклассы обрабатывают связь между устройствами в случае, когда отправитель и получатель могут находиться в разных процессах. Основная реализация этого класса - RpcRemoteRendezvous, которая uses gRPC предназначена для обработки удаленных передач.

+0

спасибо! @mrry – kz28

+0

@mrry Очень специфическая инструкция –

Смежные вопросы