PyTorch

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

Фреймворк создан на базе Torch, библиотеки для языка Lua, которая предназначена для математических расчетов и машинного обучения. Но его особенность — следование стилю Python и философии программирования на этом языке. Некоторые говорят, что PyTorch — один из самых «питоновских» фреймворков для ML.

У PyTorch открытый исходный код, он распространяется бесплатно. Его поддержкой и развитием сейчас в основном занимается команда искусственного интеллекта Facebook*.

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

Кому и для чего нужен PyTorch

Фреймворком PyTorch пользуются специалисты по машинному обучению, работающие с языком Python — одним из наиболее популярных в этой отрасли. Непосредственно PyTorch ориентирован на глубокое обучение — это подвид ML, при котором используются многослойные обучаемые модели и нейронные сети. В глубоком обучении модель может обучаться за счет собственной обработки данных, и это позволяет решать больше разнообразных задач, чем в случае с классическим ML с узкоспециализированными моделями.

Чаще всего глубокое обучение и в частности PyTorch используются в следующих отраслях:

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

Все перечисленные задачи актуальны и нужны во множестве отраслей — начиная с аналитики и заканчивая творчеством.

Чем PyTorch отличается от других ML-фреймворков

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

Динамические вычисления. PyTorch динамически пересчитывает граф вычислений «на лету», и это удобно. Объясним, что это значит.

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

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

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

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

Нахождение производной — довольно сложная для компьютера задача. Иногда ML-специалисты вовсе решают ее вручную, считая производную на бумаге. Другой способ — использовать приближения, но тут высок риск потерять точность из-за округлений. Есть и языки, которые ищут производную по правилам, но вместо точного результата могут получиться громоздкие и малоинформативные выражения.

Автоматическое дифференцирование решает эту проблему. Суть решения — определять большую и сложную функцию через маленькие, «базовые». Если значения базовых функций в какой-то точке известны, то можно автоматически вычислить и значение, и производную сложной функции, основанной на них.

PyTorch поддерживает автоматическое дифференцирование. Совместно с динамическими вычислениями выходит так, что фреймворк строит граф и вычисляет веса «на лету», а человеку достаточно написать пару строк кода. Это удобно и позволяет реализовать более сложные проекты.

CUDA. Технология, которая позволяет запускать вычисления и на процессоре, и на видеокарте. Особенность глубокого обучения — серьезная ресурсоемкость: модели во время обучения и работы отнимают много ресурсов компьютера. Поэтому для их запуска начали использовать графические процессоры видеокарт — они мощные и подходят для сложных вычислений.

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

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

Правда, есть и ограничение. CUDA работает только с видеокартами NVIDIA, причем не со всеми. Так что не каждая конфигурация компьютера подойдет для ее использования.

Что есть в PyTorch

Структура PyTorch и его возможности многим напоминают другой фреймворк для Python — NumPy, предназначенный для сложных вычислений. Но у PyTorch есть особенности: он работает динамически, может использовать мощности графического процессора и облегчает задачу специалисту.

Вот какие возможности есть у PyTorch. Это не исчерпывающий список — просто несколько примеров.

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

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

Две особенности тензоров в PyTorch:

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

Встроенные операции. С тензорами можно выполнять разнообразные операции: сложение, вычитание, слияние и другие. Полный спектр математических операций для тензоров позволяет полноценно работать с ними. Иногда PyTorch применяют исключительно для тензорных вычислений — его возможности для этого подходят.

Чаще всего в работе с PyTorch пользуются различными математическими операциями над тензорами, а также функциями инициализации, которые позволяют быстро создавать тензор. Есть и BLAS-функции — так в программировании называют реализацию функций линейной алгебры.

Кроме того, тензоры PyTorch можно конвертировать в тензоры NumPy и обратно — для этого тоже есть специальные функции.

Datasets. Датасет — это набор данных для машинного обучения. Обычно наборы бывают двух видов: для обучения и для проверки, как работает обученная модель. В большинстве ML-фреймворков, в том числе PyTorch, есть встроенные датасеты. Это наборы популярных и известных в сообществе пакетов данных.

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

Data Loader. Data Loader — это модуль, который позволяет создавать мини-пакеты в рамках одного датасета и подгружать их в модель. С его помощью можно перемешивать данные, определять размер мини-пакета и выполнять другие действия.

Модули PyTorch

В PyTorch есть несколько встроенных модулей для решения разных конкретных задач. Основных три, и вот для чего они нужны.

Autograd. Этот модуль непосредственно предназначен для автоматического дифференцирования. Производные высчитываются при прямом прохождении графа. Потом запускается обратное прохождение, в ходе которого вычисляются градиенты — в нейронных сетях так называют векторы, которые показывают направление и крутизну производных. Именно градиенты используются в алгоритме обратного распространения ошибки. С помощью модуля Autograd производные и градиенты считаются в автоматическом режиме.

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

nn. Этот модуль включает в себя абстракции более высокого уровня, чем в Autograd — то есть более удаленные от «железа» и вычислений, но приближенные к человеческому пониманию. Это нужно для построения сложных нейронных сетей, которые может быть непросто понять и описать с использованием инструментов низкого уровня.

Программы экосистемы PyTorch

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

Создание и запуск проектов. Classy Vision и PyTorch Lightning — фреймворки, которые упрощают и расширяют работу с PyTorch. Они реализованы на более высоком уровне абстракции и предоставляют среду для запуска проектов на PyTorch.

С помощью этих фреймворков проще работать. В них реализованы полезные функции, утилиты и «синтаксический сахар» — нововведения, упрощающие синтаксис команд. В результате те же действия можно выполнить проще и быстрее, в пару строк кода.

Развертывание. Перед специалистами может встать задача развертывания программ на PyTorch в продакшене — на серверах, доступных конечным пользователям. Обычно это нужно, когда нейросеть — сама по себе коммерческий продукт, например, «умный» фоторедактор.

Собственного модуля для развертывания в PyTorch нет, поэтому для него используются инструменты TorchScript, ONNX и Caffe2. Caffe2 изначально был отдельным фреймворком машинного обучения, но потом влился в PyTorch.

Репозитории. На GitHub существует несколько репозиториев с библиотеками и расширениями PyTorch для конкретных задач. Например, Transformers — решение для распознавания естественного языка: текста, звуков, чтения с картинок. Или Detectron2 — библиотека компьютерного зрения, которая умеет распознавать движущиеся объекты, сегментировать их и выделять ключевые точки.

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

  • Weights and Biases — научный инструмент для отслеживания результатов экспериментов.
  • Clear ML — также менеджер экспериментов и средство управления версиями.
  • Tensorboard — набор инструментов для визуализации, который изначально создавался для TensorFlow, но потом был интегрирован в PyTorch.
  • Torchgeo — набор датасетов, моделей и инструментов для программ, работающих с геопространственной информацией.
  • MONAI — решение для оптимизации PyTorch под задачи в сфере медицины.

Это только несколько примеров. В реальности дополнительных инструментов для PyTorch намного больше: они есть практически для любых задач.

Преимущества PyTorch

Гибкость. Фреймворк позволяет создавать даже сложные модели и решать разнообразные задачи. Это возможно благодаря прямому доступу к математическим функциям и возможности писать собственные. Есть решения, которые не позволяют построить что-то нестандартное — PyTorch к ним не относится. Наоборот: он хорошо подходит именно для сложных и нестандартных моделей. Дополнительные плюсы — поддержка CUDA и инструменты для оптимизации.

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

Простота адаптации с NumPy. Некоторые функции и возможности PyTorch напоминают таковые у NumPy, хотя PyTorch мощнее и функциональнее. Тем не менее проекты на NumPy легко конвертировать в формат PyTorch — и наоборот. Тензоры и другие сущности в этих двух инструментах похожи структурой: достаточно немного их изменить для полноценной конвертации. Специальная функция перевода тензоров из формата NumPy в формат PyTorch и обратно позволяет с легкостью адаптировать код друг с другом.

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

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

Недостатки PyTorch

Отсутствие инструментов визуализации. Встроенных инструментов для построения графиков, диаграмм и других способов визуализации в PyTorch нет. Приходится пользоваться сторонними решениями, такими как Tensorboard, хотя изначально он предназначался не для PyTorch.

Отсутствие инструментов развертывания. То же самое касается развертывания программы на PyTorch на продакшен-серверах — так доступ к продукту получают конечные пользователи. В PyTorch нет встроенных инструментов для легкого запуска на серверах, поэтому приходится использовать сторонние стандарты, протоколы и инструменты.

Потребность в дополнительных библиотеках. Из-за всего перечисленного выше при профессиональной работе с PyTorch понадобится пользоваться дополнительными библиотеками. Это значит, что разработчик должен разобраться не с одним инструментом, а с несколькими, чтобы полноценно выполнять задачи. Но этот недостаток становится актуальным только при профессиональном использовании — новичкам обычно достаточно возможностей «чистого» PyTorch.

Как установить PyTorch

В локальной системе PyTorch можно установить с помощью pip — так называется менеджер пакетов, входящий в Python. Он позволяет с помощью одной-двух команд в консоли установить то или иное расширение, библиотеку либо фреймворк для языка. Кроме pip можно воспользоваться программным пакетом Anaconda для вычислений на Python — в нем тоже есть команда для установки дополнений.

Второй способ, подходящий для владельцев слабых компьютеров — воспользоваться сервисом для машинного обучения или исследований, например, Google Colab. Такие платформы предоставляют вычислительные мощности и среды с уже предустановленными инструментами для ML. Достаточно создать программу и прописать в верхней части команду для импорта нужного пакета — в нашем случае это PyTorch и его различные модули.

Как начать работать с PyTorch

Если фреймворк установлен, достаточно запустить среду разработки и в первых строках программы подключить нужные пакеты. В Python это делается с помощью команды import. После этого модули и команды PyTorch будут доступны, с ними можно будет писать код.

Изучать PyTorch стоит уже после знакомства с Python: важно разбираться в языке и понимать его особенности. Начать нужно с простых задач — создания тензоров, работы с несложными нейронными сетями. Со временем можно переходить к более сложным и интересным заданиям.

*Facebook принадлежит корпорации Meta, которая признана экстремистской и запрещена на территории России

(рейтинг: 5, голосов: 3)
Добавить комментарий