Для того, чтобы начать с некоторым контекстом:Обходные решения для редких обновлений, основанных на gpu-gradient, которые обходят SparseApply * - есть ли в тензорном потоке?
SparseApply*
операторы не реализованы для GPU (от 0,11)- Этого ОПСА необходимы, чтобы использовать импульс и ADAM и различные другие оптимизаторы градиент на основе
- версии CPU вызывает передачу данных и задержки между процессором и GPU
Я хочу Momentum/ADAM на модели, которая использует tf.gather
широко во многих местах, таким образом, чтобы не калечить использование графического процессора. Плотные версии моих переменных не особенно велики, особенно по сравнению с памятью, используемой активациями и другими тензорами на графике вычислений.
Короткие реализации этих SparseApply*
опа для GPU, я думал, что обходной путь, и я хотел бы некоторые комментарии, будь то, скорее всего, работать, альтернативные предложения, или просто общую критику:
- Отслеживайте все переменные параметры модели в моей модели в Словаре
D
- Отобрать градиенты для параметров в
D
с использованиемtf.gradients
обновления
- программы вручную адам/импульса с помощью плотных операций GPU (наряду с их скрытыми переменными) я п подграф H. (подграф всей tensorflow/сеанса графа вычислений по умолчанию)
- Compute/применить H
справочную информацию: Я выборочно выбрал подстроку из первого комментария по stephenroller из https://github.com/tensorflow/tensorflow/issues/2314
На данный момент, похоже, что только GradientDescentOptimizer поддерживает , работающий на GPU, когда есть обновление SparseTensor.
Могут быть значительные улучшения скорости, позволяя им быть , хранящимся на графическом процессоре. Во-первых, нет необходимости переносить векторы вложений в/из графического процессора, и вместо этого можно просто перенести индексы внедрения , а затем градиенты также не должны быть , перенесенные назад. В одном тесте я запускал, где я реализовал версию на графическом процессоре, разница в одной эпохе была примерно 1100s против 300s.
изменить: переименовал мой вопрос/название, чтобы ключевые слова отображались ранее в заголовке.