Как вы упомянули, существует torch.jit
, и его целью также является внедрение оптимизации в экспортируемом графе (например, слияние ядра, оптимизация констант и т. Д.). IIRC Вы можете найти некоторый исходный код, относящийся к ним, в их репозитории github здесь , хотя я не уверен, упоминаются ли они явно где-то в документации (или достаточно явно, чтобы их можно было запомнить).
Поскольку 1.3
также введено квантование (см. здесь для некоторого введения). В разделе учебных пособий, а именно здесь , вы можете увидеть явное объединение Conv2d
, BatchNorm
и ReLU
для повышения производительности. Ofc также существуют определенные вещи, такие как использование int
вместо float
для весов (квантование), смешанная арифметика (используя half
точность с плавающей запятой, когда это возможно, см. Apex от NVidia) и другие.
И последнее, но не менее важное: я не думаю, что для хорошо написанной модели, использующей векторизованные операции и экспортированной с torchscript
, вы увидите действительно существенные различия во времени выполнения из-за некоторой общей оптимизации графов. Тем не менее, все равно, будете ли вы использовать GPU, CPU, TPU, какие у них версии, хотите ли вы только после логического вывода или обучения, и т. Д. Довольно сложно определить, насколько быстрый tensorflow
по сравнению с pytorch
(помимо некоторых известных проблем в обеих платформах). В целом, это зависит, и измерения сильно варьируются. AFAIK.
Кстати. Когда дело доходит до преимуществ каждого фреймворка, их ядро действительно начинает покрывать подобные вещи (PyTorch недавно получил мобильную поддержку, см. здесь ). Реальная разница по-прежнему заключается в базовом подходе и в том, что должна делать каждая структура, чтобы обойти эти ограничения.