Какова стоимость исполнения нетерпеливого стиля в TFJS? - PullRequest
0 голосов
/ 21 февраля 2019

Бумага TENSORFLOW.JS: МАШИННОЕ ОБУЧЕНИЕ ДЛЯ ВЕБ-САЙТОВ И ВНЕ заявляет:

Поскольку важной частью наших целей проектирования является установление приоритетов простоты использования надTensorFlow.js поддерживает стремительный стиль дифференциации.

В общем, о каком падении производительности идет речь?Это зависит от модели?Есть ли случаи, когда вообще нет разницы в производительности?

1 Ответ

0 голосов
/ 22 февраля 2019

Основные преимущества производительности декларативной (иначе говоря, отложенного выполнения, графического режима) парадигмы, подобной той, что используется в графической модели TensorFlow v1 (Python) по умолчанию, обусловлены следующими аспектами:

  • Отталкивание всей модели до уровня C ++, где накладные расходы на выполнение намного ниже по сравнению с интерпретируемыми или не скомпилированными языками, такими как Python и JavaScript
  • Параллельное выполнение независимых путейграф расчета модели.Примером является модель, состоящая из нескольких отдельных входных башен.Эти башни могут выполняться одновременно на разных ядрах ЦП или нескольких графических процессорах одного и того же хоста.
  • Благодаря тому, что вся модель известна до начала выполнения, механизм выполнения C ++ может выполнить целый набор оптимизаций на графике вычислений модели .Просто приведу несколько примеров:
    • свертывание констант : поддерево графа, состоящее только из детерминированных операций без констант, на константных узлах можно сложить в один константный узел
    • Операция слияния : в некоторых случаях несколько смежных узлов (операций) графа вычислений можно заменить на математически эквивалентный, но вычислительно более эффективный узел.
    • Сокращение : некоторые графы вычислений содержат узлы, которые не влияют на конечный результат.Механизм выполнения графической модели может заранее увидеть это и предотвратить выполнение этих узлов.
  • Компиляция точно в срок (JIT) : механизм выполнения графа может принятьвесь график и скомпилируйте его в более низкоуровневое представление, которое включает в себя меньшие накладные расходы и более пригодно для высокопроизводительного выполнения на доступном оборудовании (например, программы CUDA для NVIDIA или совместимые графические процессоры, специальные инструкции для Google TPU или даже шейдеры)программы для WebGL и т. д.)

Все вышеупомянутые оптимизации поддерживаются графическим режимом TensorFlow.Для более подробной информации, Google для терминов "Grappler" и "XLA".

TensorFlow.js использует императивную (иначе, нетерпеливую) парадигму, в основном основанную на соображениях удобства использования.Это аналогично нетерпеливому выполнению TensorFlow, PyTorch и NumPy.В результате он не обладает всеми вышеупомянутыми возможностями для оптимизации.

Однако следует понимать, что существуют способы получения графов вычислений из императивной программы (см. Декоратор tf.function в TensorFlow v2 и * 1037).* JAX ).Нет причин, по которым TensorFlow.js не может использовать подобную парадигму для повышения производительности.Просто для команды разработчиков пока не ясно, стоит ли отдавать приоритет этой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...