На практике при работе с Machine Learning алгоритмами Data Scientist сталкивается с вопросом: “Какой фреймворк (библиотеку) выбрать?”, рассматривая два популярных Python-решений: TensorFlow и PyTorch. Сегодня мы подготовили для вас подробное сравнение этих библиотек: читайте в нашей статье про сходства и различия, плюсы и минусы TensorFlow и PyTorch.
Pytorch становится популярней среди исследователей
Как сказано в статье журнала The Gradient, библиотека PyTorch упоминается все чаще на конференциях, посвященных Machine Learning. До 2018 года TensorFlow имел больше упоминаний, но после 2018 года ситуация кардинально изменилась на многих конференциях. Рисунок ниже это иллюстрирует.
Но такая тенденция наблюдается лишь у специалистов по Machine Learning. В этой же статье говорилось о списках вакансий на работу, в которых TensorFlow упоминается 1541 раз, а PyTorch — 1437. На блог-платформе Medium имеется более 3000 статей о TensorFlow и более 1200 о PyTorch. Попробуем выяснить почему Data Scientist’ы и ML-исследователи все больше предпочитают PyTorch в качестве основной библиотеки.
Механизмы вычислительных графов в TensorFlow и PyTorch
Библиотека TensorFlow была разработана в Google в 2015 году, а PyTorch появился в 2017 году в Facebook. Обе библиотеки открытые и работают на специальных структурах данных — тензорах, о которых мы рассказывали здесь. Они обе являются масштабируемыми и применяются для глубокого обучения. Кроме того, в основе и PyTorch, и TensorFlow лежат вычислительные графы (computational graphs) – абстракция, которая описывает вычисления в виде ориентированного ациклического графа. Например, выражение y = wx+b можно развернуть в граф, изображенный ниже. Основной особенность такого представления является параллелизм, когда операции выполняются одновременно, что ускоряет работу.
Различие библиотек состоит в том, что PyTorch использует динамические вычислительные графы, а TensorFlow – статические вычислительные графы.
Динамические вычислительные графы не требуют компиляции перед каждым его выполнением. Поэтому можно спокойно изменять входные данные в процессе работы для изучения различных результатов. Помимо этого, уменьшается время на проведение множества экспериментов.
Статические вычислительные графы, с другой стороны, требуют перекомпиляции при изменении входных параметров. Однако позволяют получить высокую производительность, когда используются в качестве конечного продукта, в это время они закрыты для изменений и, следовательно, для перекомпиляции.
Распределенность вычислений при обучении
В плане распараллеливания PyTorch имеет огромное преимущество. PyTorch оптимизирует производительность, используя встроенную поддержку асинхронных вызовов Python. Ниже приведен фрагмент кода на Python, объясняющий, как просто реализовать распределенное обучение для модели в PyTorch.
import torch.distributed as dist from torch.nn.parallel import DistributedDataParallel as DDP dist.init_process_group() model = DDP(model)
В TensorFlow придется вручную настраивать каждую операцию, выполняемую на конкретном устройстве, чтобы обеспечить распределенное обучение.
Визуализация: TensorBoard vs Visdom
Визуализация данных помогает специалистам Machine Learning следить за процессом обучения и отлаживать код в соответствии с результатами. В визуализации явно выигрывает TensorFlow со своим инструментом — TensorBoard. Разработчики на PyTorch используют сторонний инструмент Visdom от Facebook. Минималистичный Visdom имеет не так много особенностей по сравнению с TensorBoard.
Особенности Tensorboard:
- Отслеживание и визуализация таких показателей, как потери (accuracy) и точность (loss).
- Визуализация вычислительного графа (его операции и слои).
- Просмотр весов, смещений (bias) по мере их изменения со временем.
- Отображение изображений, текста и аудио данных.
- Профилирование TensorFlow-программ .
Особенности Visdom:
- Обработка обратных вызовов(callbacks).
- Построение графиков и управление ими.
Развертывание в production
Когда появляется желание внедрить обученную модель в качестве конечного продукта, то TensorFlow снова берет верх. TensorFlow предоставляет свой фреймворк для REST API — TensorFlow Serving.
А вот у PyTorch такого фреймворка нет, поэтому во многих случаях для production придется воспользоваться сторонними фреймворками типа Flask, Django, FastAPI.
Плюсы и минусы TensorFlow
Подведем итоги, перечислив достоинства и недостатки TensorFlow.
Плюсы TensorFlow:
- Простой встроенный высокоуровневый API.
- Многофункциональный
- Имеет свой фреймворк для развертывания в produсtion.
- Хорошая поддержка под мобильные устройства.
- Подробная документация.
Минусы TensorFlow:
- Сложная отладка.
- Трудности с внесением изменений (связано с использованием статических вычислительных графов).
Плюсы и минусы PyTorch
Аналогичным образом, резюмируем достоинства и недостатки PyTorch.
Плюсы PyTorch:
- Интерфейс в Python-стиле.
- Простое и быстрое внесение изменений и экспериментирование (связано с использованием динамических вычислительных графов).
- Подробная документация.
Минусы PyTorch:
- Нет своего инструмента для визуализации.
- Нет своего фреймворка для развертывания в production.
В качестве заключения, отметим, что TensorFlow – это мощный инструмент для создания моделей и использования их в production с хорошим средством для визуализации. Кроме того, он отлично поддерживает мобильные платформы. В свою очередь, PyTorch – молодая, набирающая силы библиотека с интерфейсом в Python-стиле. Поэтому если вам требуется получить модель и внедрить ее свою систему, то выбирайте TensorFlow, а если вы — исследователь, который экспериментирует с моделями, стоит рассмотреть PyTorch.
А о том, как на практике использовать TensorFlow и PyTorch в реальных Data Science проектах, вы узнаете на наших курсах по Python в лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве.