В Tensorflow fetches
аргумент to tf.Session.run
служит двум целям: он обеспечивает выполнение определенных операций и возвращает значения python. Мой вопрос заключается в том, насколько я должен быть обеспокоен, чтобы избежать возвращения ценностей, которые мне на самом деле не нужны. Например, предположим, что op a
зависит от opb
, так что if a
b
будет тоже. Можно ли это сделать быстрее
a = sess.run([a])
чем заняться
a, _ = sess.run([a,b])
потому что последний будет копировать выход b
из GPU в CPU только для того, чтобы он был отброшен? Если a
на стороне python требуется только часть информации, обычно ли хорошо делать тензор, зависящий от a
того, что только имеет именно то, что нужно, и получать это вместо a
этого ? Или я неправильно понимаю, как работают эти передачи GPU-CPU? Я думаю, что можно профилировать, сколько времени тратится на такие переводы (например, см. графики здесь: https://github.com/tensorflow/tensorflow/issues/4526), но я еще не понимаю, как это сделать, и я хотел бы знать, правильно ли я, по крайней мере, концептуализирую вещи, независимо от того, является ли мое конкретное приложение узким местом здесь.
Это относительно важно, потому что оболочка python должна преобразовать из памяти тензора C++ в массив python numpy, таким образом выполняя операцию копирования. Если вы получаете большие переменные, время может быть не тривиальным, подумайте о 1 ГБ, которые должны быть преобразованы каждый раз.