Комментарии 8
Верхнеуровнево я использовал keras
и tf.keras
. Насколько мне известно, keras
внутри использует плейсхолдеры.
Хотите измерить скорость обучения сети с TF правильно? Используйте чистый TF, без Keras, и нормальные datapipe. Будете удивлены.
Здесь результаты получились довольно неожиданные: в большинстве случаев PyTorch 1.9.0 показывает низкую производительность, причём чем сложнее нейронная сеть, тем ниже производительность. Грубая оценка скорости инференса на CPU: TensorFlow 2.5.0 в среднем на 5% быстрее, чем TensorFlow 1.15.0 и в среднем на 40% быстрее, чем PyTorch 1.9.0.
Достаточно ожидаемые, PyTorch не ориентирован на оптимизацию производительности на CPU.
Позволю высказать критику вашего теста.
Вы упускаете, что несмотря на простоту дебага "динамического графа", статический при этом все же быстрее (параллельность выполнения неблокирующих друг друга веток).
Статический граф можно оптимизировать https://www.tensorflow.org/guide/graph_optimization // Например, сюда относится оптимизация NHWC -> NCHW при тренировке на GPU ибо так быстрее считается. В Pytorch такое порядок каналов идет по умолчанию, а TF приходится думать "конвертировать или нет" / "будет быстрее считаться или нет"
TF v2 не отказался от статического графа. В этом и прикол, что когда нужно подебажить можно скомпилировать модель с run_eagerly=True, а когда нужна производительность с False
Не являюсь большим знатоком в PyTorch, но кажется он подает данные в модель подготавливая их в многопроцессном режиме. Для адекватного сравнения я бы ожидал увидеть подачу в TF данных через tf.data.Dataset с prefetch-ем который использует плюсовый бекенд и многопоточность и с с генерацией ранодомных данных через tf.random.* а не конвертацией из numpy. Ну и как бы желательно делать model.train с указанием количества эпох, а не train_on_batch
Также для полноты картины хотелось бы чтобы при тестировании в TF был включен XLA (по ощущениям ускоряет тренировку больших моделей процентов на 10-15, в частности заменяет BatchNorm на fused-реализацию) и замерялись 2-я и последующие эпохи (на 1й TF делает оптимизации), а сами эпохи длились хотя бы минут по 5.
TensorFlow vs PyTorch в 2021: сравнение фреймворков глубокого обучения