2016-11-28 6 views
0

Для того, чтобы начать с некоторым контекстом:Обходные решения для редких обновлений, основанных на gpu-gradient, которые обходят SparseApply * - есть ли в тензорном потоке?

  • SparseApply* операторы не реализованы для GPU (от 0,11)
  • Этого ОПСА необходимы, чтобы использовать импульс и ADAM и различные другие оптимизаторы градиент на основе
  • версии CPU вызывает передачу данных и задержки между процессором и GPU

Я хочу Momentum/ADAM на модели, которая использует tf.gather широко во многих местах, таким образом, чтобы не калечить использование графического процессора. Плотные версии моих переменных не особенно велики, особенно по сравнению с памятью, используемой активациями и другими тензорами на графике вычислений.

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

  1. Отслеживайте все переменные параметры модели в моей модели в Словаре D
  2. Отобрать градиенты для параметров в D с использованием tf.gradients
  3. обновления
  4. программы вручную адам/импульса с помощью плотных операций GPU (наряду с их скрытыми переменными) я п подграф H. (подграф всей tensorflow/сеанса графа вычислений по умолчанию)
  5. Compute/применить H

справочную информацию: Я выборочно выбрал подстроку из первого комментария по stephenroller из https://github.com/tensorflow/tensorflow/issues/2314

На данный момент, похоже, что только GradientDescentOptimizer поддерживает , работающий на GPU, когда есть обновление SparseTensor.

Могут быть значительные улучшения скорости, позволяя им быть , хранящимся на графическом процессоре. Во-первых, нет необходимости переносить векторы вложений в/из графического процессора, и вместо этого можно просто перенести индексы внедрения , а затем градиенты также не должны быть , перенесенные назад. В одном тесте я запускал, где я реализовал версию на графическом процессоре, разница в одной эпохе была примерно 1100s против 300s.

изменить: переименовал мой вопрос/название, чтобы ключевые слова отображались ранее в заголовке.

ответ

1

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

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

  • Нет связанных вопросов^_^