Может ли pytorch оптимизировать последовательные операции (например, граф тензорного потока или Jit JAX)? - PullRequest
2 голосов
/ 28 октября 2019

Изначально тензорный поток и pytorch имели принципиальную разницу:

  • тензорный поток основан на расчетном графике. Построение этого графика и его оценка в сеансе - это два отдельных шага. Пока он используется, график не меняется, что позволяет оптимизировать.
  • Факел охотно оценивает операции над тензором. Это делает API более удобным (без сеансов), но также теряет потенциал для распознавания и оптимизации операций, которые всегда выполняются последовательно.

Теперь эта разница становится менее очевидной. Tensorflow ответил на популярность факела: tf eager . Существует также проект JAX , основанный на той же базовой структуре, что и tenorflow ( XLA ). JAX не имеет понятия о сессии. Но он позволяет вам скомпилировать несколько операций вместе, просто вызвав jit .

Поскольку Tensorflow перешел на охват функциональности PyTorch, работает ли PyTorch над интеграцией преимуществ Tensorflow? Есть ли что-то вроде функциональности сеанса или jit в PyTorch (или в его дорожной карте)?

Документы API имеют раздел jit , но, насколько я вижу, это больше оэкспорт ваших моделей.

1 Ответ

2 голосов
/ 28 октября 2019

Как вы упомянули, существует torch.jit, и его целью также является внедрение оптимизации в экспортируемом графе (например, слияние ядра, оптимизация констант и т. Д.). IIRC Вы можете найти некоторый исходный код, относящийся к ним, в их репозитории github здесь , хотя я не уверен, упоминаются ли они явно где-то в документации (или достаточно явно, чтобы их можно было запомнить).

Поскольку 1.3 также введено квантование (см. здесь для некоторого введения). В разделе учебных пособий, а именно здесь , вы можете увидеть явное объединение Conv2d, BatchNorm и ReLU для повышения производительности. Ofc также существуют определенные вещи, такие как использование int вместо float для весов (квантование), смешанная арифметика (используя half точность с плавающей запятой, когда это возможно, см. Apex от NVidia) и другие.

И последнее, но не менее важное: я не думаю, что для хорошо написанной модели, использующей векторизованные операции и экспортированной с torchscript, вы увидите действительно существенные различия во времени выполнения из-за некоторой общей оптимизации графов. Тем не менее, все равно, будете ли вы использовать GPU, CPU, TPU, какие у них версии, хотите ли вы только после логического вывода или обучения, и т. Д. Довольно сложно определить, насколько быстрый tensorflow по сравнению с pytorch (помимо некоторых известных проблем в обеих платформах). В целом, это зависит, и измерения сильно варьируются. AFAIK.

Кстати. Когда дело доходит до преимуществ каждого фреймворка, их ядро ​​действительно начинает покрывать подобные вещи (PyTorch недавно получил мобильную поддержку, см. здесь ). Реальная разница по-прежнему заключается в базовом подходе и в том, что должна делать каждая структура, чтобы обойти эти ограничения.

...