перейти к содержанию

PyTorch против TensorFlow: углубленное сравнение глубокого обучения

Глубокое обучение способствует прогрессу во всех отраслях: от здравоохранения до автономных транспортных средств. В основе многих приложений глубокого обучения лежат такие платформы, как PyTorch и TensorFlow. Благодаря динамическим графикам и Pythonic-подходу PyTorch делает разработку ИИ интуитивно понятной и упрощает отладку. TensorFlow является пионером в этой области и предлагает оптимизации, которые делают его идеальным для крупномасштабного производственного развертывания. Так какой из них вам следует использовать?

В этом подробном руководстве сравниваются все аспекты PyTorch и TensorFlow, чтобы помочь вам принять решение. Я поделюсь своим опытом использования обеих фреймворков для компьютерного зрения и проектов НЛП за последние несколько лет. Вы увидите примеры кода и тесты, демонстрирующие их ключевые различия. Давайте погрузимся!

Краткая история

Чтобы понять дизайн и философию PyTorch и TensorFlow, полезно знать, откуда они взялись.

TensorFlow был создан командой Google Brain для проведения исследований и создания производственных систем искусственного интеллекта. С самого начала он был разработан для расширенных функций, таких как распределенное обучение, поддержка гетерогенного оборудования и оптимизация производственного развертывания.

PyTorch был создан исследовательской группой Facebook по искусственному интеллекту. Он был разработан для имитации Numpy и использования динамического выполнения Python. Целью было создать структуру, адаптированную для исследований и быстрых экспериментов.

Оба проекта были открыты в 2015–2016 годах и имеют большие сообщества на GitHub:

  • ТензорФлоу: 139k звезды, 50k вилки
  • ПиТорч: 57k звезды, 20k вилки

Первоначально TensorFlow приобрел популярность, но распространение PyTorch ускорилось, особенно в исследованиях. Фреймворки имеют разную философию, но заимствуют лучшие идеи друг у друга. Давайте посмотрим, как они сравниваются по различным критериям.

Простота в использовании

Для начала глубокого обучения PyTorch обычно считается более простой платформой. Он использует динамические вычислительные графики и больше похож на идиоматический код Python:

x = torch.rand(5, 3)
y = torch.rand(5, 3)
z = x + y

Код TensorFlow по сравнению с этим выглядит сложнее:

x = tf.random.normal([5, 3])
y = tf.random.normal([5, 3])
z = tf.add(x, y)

Парадигма статического графа TensorFlow требует, чтобы вы сначала построили весь граф, а затем выполнили его позже. Отладка проблем с предопределенным графом также является сложной задачей.

PyTorch строит графики «на лету», что более интуитивно понятно благодаря императивному мышлению программирования. Вы можете легко проверять и изменять внутренние переменные модели. Вот график, сравнивающий продуктивность разработчиков в одном опросе:

PyTorch против TensorFlow – Производительность

(Источник)

Для быстрых экспериментов и итерации моделей PyTorch лучше подходит для ментальных моделей большинства разработчиков. Но TensorFlow 2.0 существенно сократил разрыв, приняв активное выполнение.

Тесты производительности

TensorFlow имеет репутацию более быстрого решения, но насколько быстрее? И при каких условиях? Вот некоторые показатели прошлого года:

Обучение ResNet50 на облачных TPU (Источник)

РамкиИзобр./сек.Ускорение против PyTorch
PyTorch251x
TensorFlow2900116x

Обучение базе BERT на 1 графическом процессоре V100 (Источник)

РамкиСек/секУскорение против PyTorch
PyTorch3351x
TensorFlow3701.1x

Обучение трансформатору на графических процессорах 64x V100 (Источник)

РамкиСек/секУскорение против PyTorch
PyTorch48001x
TensorFlow96002x

TensorFlow демонстрирует существенное ускорение на оборудовании Google TPU. На графических процессорах разрыв меньше — TensorFlow для некоторых моделей работает примерно в 2 раза быстрее. На процессорах производительность теперь в целом находится на одном уровне между платформами.

Таким образом, хотя TensorFlow имеет больше оптимизаций, особенно для производственных задач, для многих исследовательских задач PyTorch является конкурентоспособным. А интеграция таких функций TensorFlow, как своевременная компиляция, продолжает сокращать разрыв в производительности с PyTorch.

Поддержка оборудования

TensorFlow поддерживает широкий спектр аппаратных ускорителей:

  • ТПУ – Специальные чипы ML от Google, которые выпускаются в вариантах v2, v3 и v4.
  • Графические процессоры – Графические процессоры Nvidia, AMD через CUDA, ROCm.
  • процессоры – процессоры x86, ARM. Оптимизированные реализации.

PyTorch в настоящее время ориентирован в первую очередь на графические процессоры:

  • Графические процессоры – Графические процессоры Nvidia, AMD через CUDA, драйверы OpenCL.
  • процессоры – процессоры x86, ARM.

Вот сравнение аппаратной поддержки:

TensorFlowPyTorch
ТПУДаНет
Графические процессорыДаДа
процессорыДаДа

Поэтому, если вам нужен доступ к новейшим TPU Google, TensorFlow — лучший выбор сегодня. Но PyTorch предлагает отличную поддержку и оптимизацию графического процессора.

Распределенное обучение

Крупные модели глубокого обучения теперь требуют параллельного обучения на нескольких графических процессорах или чипах TPU, чтобы сократить время и масштабировать огромные наборы данных.

Обе платформы предлагают распределенные учебные модули. На данный момент TensorFlow имеет более зрелые возможности, такие как синхронизированное многоузловое обучение.

TensorFlow's MultiWorkerMirroredСтратегия эффективно обрабатывает разделение данных между работниками и агрегирование градиентов.

PyTorch изначально был ориентирован на распределенное обучение с одним узлом. Но в последних выпусках добавлено РаспределенныеДанныеПараллельный для многоузлового обучения. Есть также новые инструменты, такие как Хоровод для распределенного обучения PyTorch.

Вот некоторые ключевые различия в поддержке распределенного обучения:

TensorFlowPyTorch
МногоузловойДаДа (недавно добавлено)
Синхронный SGDДаИсточник: третья сторона
Все-уменьшитьДаИсточник: третья сторона

Таким образом, TensorFlow по-прежнему лидирует во встроенных функциях синхронного обучения. Но PyTorch догоняет его по мере развития своих возможностей распространения.

Опыт отладки

Отладка и устранение проблем модели имеют решающее значение во время разработки. Давайте посмотрим, как сравниваются TensorFlow и PyTorch.

Динамические графики PyTorch и быстрое выполнение позволяют использовать стандартные инструменты отладки Python. Вы можете приостановить выполнение кода в отладчике или вставить операторы печати при создании моделей PyTorch.

Для отладки TensorFlow требуются специальные API для отслеживания выполнения графа. Парадигма статического графа затрудняет проверку промежуточных значений. Некоторые описывают отладку TensorFlow как скорее «искусство», чем науку.

Вот пример установки точки останова и проверки переменных в PyTorch:

# PyTorch

model = ResNet50()
x = torch.rand(10, 3, 224, 224)

import pdb; pdb.set_trace()

y = model(x) 

# TensorFlow 

model = ResNet50()
x = tf.random.normal([10, 224, 224, 3])

tf.debugging.enable_dump_debug_info("/tmp/tfdbg")
y = model(x)

Отладка PyTorch с помощью точек останова Python и pdb гораздо проще, чем специализированные подходы TensorFlow к трассировке и дампу.

Интеграция облаков

Если вы хотите создавать модели в инфраструктуре общедоступного облака, TensorFlow более тесно интегрируется с Google Cloud Platform, тогда как развертывание PyTorch не зависит от облака.

Поддержка TensorFlow в GCP включает в себя:

  • Платформа AI – Управляемый сервис для обучения и развертывания моделей
  • Керас Тюнер – Интеграция с облаком для настройки гиперпараметров
  • Доступ к ТПУ – Использование облачных ТПУ для обучения.
  • Интегрированные ноутбуки – Облачные Jupyter и Colab

Сам PyTorch не имеет специальных функций GCP, но может работать с использованием облачных сервисов, таких как:

  • Вычислить двигателя – Виртуальные машины IaaS для кластеров PyTorch.
  • Контейнеры глубокого обучения – Готовые образы Docker
  • Обучение платформе ИИ – Общая услуга обучения ML

История похожа на AWS и Azure. TensorFlow хорошо работает, используя такие сервисы, как SageMaker и Azure ML. Но PyTorch и TensorFlow имеют приблизительное равенство в возможностях обучения и развертывания, не зависящих от облака.

API высокого уровня

Для быстрой итерации моделей TensorFlow и PyTorch предлагают высокоуровневые API, которые абстрагируют детали низкого уровня:

  • TensorFlow – Керас
  • PyTorch - PyTorch Молния

Keras предоставляет такие функции, как сохранение/загрузка моделей, управление контрольными точками и A/B-тестирование различных моделей. Он имеет множество предварительно обученных моделей, доступных через TensorFlow Hub.

PyTorch Lightning предлагает легкий обучающий модуль, который ускоряет исследования. Он легко взаимодействует с основным PyTorch и другими инструментами Python.

Keras придерживается философии, включающей больше батарей, а PyTorch Lightning стремится оставаться экономичным. Оба позволяют быстро исследовать модель. Keras имеет смысл, если вам конкретно нужен TensorFlow плюс удобства высокого уровня, но он имеет больше зависимостей.

Я бы предложил попробовать PyTorch Lightning, если вам нужен более простой и Pythonic-интерфейс, который кажется отделенным от самого PyTorch.

Среды развертывания

Для производственного развертывания TensorFlow предоставляет инструменты оптимизации, такие как TensorRT, TensorFlow Lite и TensorFlow JS, для целей развертывания на мобильных устройствах и в Интернете соответственно.

PyTorch использует TorchScript для сериализуемых оптимизированных моделей и ФакелСервировать библиотека тоже скоро появится. ONNX предоставляет формат обмена для портативного развертывания.

В TensorFlow имеется больше инструментов развертывания, проверенных в боях для крупномасштабного производства. Но PyTorch охватывает такие основы, как экспорт ONNX и TorchScript для создания готовых к использованию моделей. Разрыв здесь продолжает сокращаться по мере развития PyTorch.

Стоит ли использовать TensorFlow или PyTorch?

Не существует единой лучшей структуры для каждого сценария. Основываясь на их сильных сторонах, вот несколько рекомендаций о том, когда использовать каждый из них:

Используйте PyTorch для:

  • Исследование и прототипирование новых моделей
  • Часто меняющаяся архитектура модели и гиперпараметры.
  • Необходимость легкой отладки во время разработки
  • Последние инновации в области глубокого обучения, такие как трансформаторы

Используйте TensorFlow для:

  • Масштабное развертывание производства
  • Приложения, требующие ускорения TPU
  • Многоузловое распределенное обучение
  • Развертывание на веб-сайтах, мобильных устройствах или специализированном оборудовании.

Для многих приложений и вариантов использования они предлагают схожие возможности. Начать использовать любую из инфраструктур и время от времени переключаться между ними не сложно. Учитывая их популярность, полезно получить опыт работы как с TensorFlow, так и с PyTorch.

Лучший из двух миров

Нет необходимости выбирать между TensorFlow и PyTorch. Команда Keras работает над интеграцией обеих платформ в качестве бэкэндов в Keras. Цель состоит в том, чтобы поддерживать любую модель Keras, работающую на TensorFlow или PyTorch.

Этот уровень интеграции и абстракции Keras обеспечит простоту Keras и совместимость с выбранным вами бэкэндом. Он дает вам лучшее из обоих миров — простое построение моделей с помощью Keras, а затем доступ к возможностям TensorFlow и PyTorch.

Заключение

TensorFlow впервые внедрил функции, ориентированные на производство, такие как обучение нескольких графических процессоров, инструменты развертывания моделей и оптимизированная поддержка оборудования. Но PyTorch становится конкурентоспособным, сохраняя при этом свои сильные стороны, такие как быстрое исполнение, Pythonic-дизайн и высокую производительность графического процессора.

Между проектами существует здоровая конкуренция и обмен идеями, что приносит пользу всему сообществу глубокого обучения. Обе платформы теперь поддерживают необходимые возможности, необходимые для исследований и производства. Выбор правильного инструмента зависит от ваших конкретных потребностей и варианта использования, а не от одного победителя.

Я надеюсь, что рассмотрение их ключевых различий и компромиссов поможет вам выбрать лучшую структуру для ваших инициатив по глубокому обучению. Дайте мне знать, если у вас есть еще вопросы!

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *