Какие тензорные операции инициируют выделение памяти? - PullRequest
1 голос
/ 21 января 2020

После прочтения документации для класса TensorArray я обнаружил следующую строку:

Если True, TensorArray будет расположен на том же устройстве, что и Tensor, используемый на его первая запись (операции записи включают запись, распаковку и разбиение). Если False, TensorArray будет помещен на устройство, определяемое контекстом устройства, доступным во время его инициализации.

Это заставляет меня задаться вопросом, вызывают ли только определенные операции фактическое выделение памяти и чтение / запись, и если есть список этих операций.

Я также хотел бы знать это, поскольку существуют ограничения из-за ошибок OOM при создании тензоров, которые временно очень велики, но обрабатываются пакетным способом в любом случае, поэтому программа никогда не требуется фактически хранить все данные тензора - подобно тому, как API набора данных позволяет обрабатывать бесконечно больших наборов данных, поскольку все загружается по требованию.

1 Ответ

0 голосов
/ 21 января 2020

С точки зрения Tensorflow-GPU: списка нет.

Существует два способа запуска TF на графическом процессоре:

  • без XLA
  • с XLA

Без XLA, однократная операция A0 Завершенный тензор потока выделит память для всех операций в зависимости от A0: B0, B1, B2 и др. c. Как только они завершены, TF освободит память A0 как ненужную. Если у вас сверточный NN, вы, как правило, сохраняете все свои активации прямого пути, пока не начнется обратный путь.

С помощью XLA несколько операций можно объединить в блоки. Внутри блока операции могут быть объединены / разделены / дублированы, чтобы уменьшить использование памяти. Кластер XLA будет иметь собственную процедуру управления памятью, и это будет зависеть от того, как операции были смешаны вместе. Несколько кластеров XLA будут вести себя как несколько операций не-XLA: все они начнутся как можно скорее, что, вероятно, приведет к неоптимальному пиковому использованию памяти.

...