Основные преимущества производительности декларативной (иначе говоря, отложенного выполнения, графического режима) парадигмы, подобной той, что используется в графической модели 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 не может использовать подобную парадигму для повышения производительности.Просто для команды разработчиков пока не ясно, стоит ли отдавать приоритет этой функции.