Возможности PyTorch и основные тензорные функции.

Здравствуйте, любители НЛП! В NLPlanet мы много говорили об общих концепциях и техниках НЛП, новостях и библиотеках. Сегодня мы делаем небольшой ознакомительный шаг в сторону знаменитой библиотеки PyTorch, которая все еще высокоуровневая, но несколько более низкого уровня, чем SpaCy или трансформеры Hugging Face. В этой статье мы поговорим об основных возможностях PyTorch и о том, как управлять тензорами. Наслаждаться! 😄

Что такое ПиТорч

PyTorch (впервые выпущенный Meta AI) — это среда машинного обучения с открытым исходным кодом, основанная на библиотеке Torch. Фреймворк сочетает в себе эффективные и гибкие серверные библиотеки Torch с ускорением на графическом процессоре и интуитивно понятный интерфейс Python, позволяющий легко создавать прототипы. Torch — это библиотека для научных вычислений с широкой поддержкой алгоритмов машинного обучения и эффективных реализаций GPU благодаря C и CUDA.

Вот некоторые особенности PyTorch:

  • Интегрирован с популярными библиотеками Python, такими как NumPy, SciPy и Cython.
  • Он поддерживает CPU, GPU и параллельную обработку, а также распределенное обучение.
  • PyTorch Hub — общедоступный репозиторий предварительно обученных моделей.
  • Легко создавать собственные компоненты, а параметрами можно легко делиться с внешними инструментами, такими как TensorBoard.
  • Он поддерживает как нетерпеливый режим для экспериментов, так и графический режим для высокопроизводительного исполнения».
  • Большое и активное сообщество.
  • PyTorch поддерживает ONNX (Open Neural Network Exchange), который представляет собой формат для сохранения и загрузки нейронных сетей в различных средах машинного обучения.

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

Давайте посмотрим несколько примеров кода о том, как использовать тензоры.

Установка ПиТорч

См. Веб-сайт PyTorch для получения подробных инструкций по установке PyTorch в вашей среде. Инструкции по установке различаются в зависимости от операционной системы хостинга и поддержки GPU/TPU.

Определения тензора

Во-первых, давайте импортируем библиотеки torch и numpy (которые мы будем использовать для бенчмаркинга).

Тензоры можно создавать несколькими способами, например, из списков Python и массивов NumPy или из форм, заполненных случайными числами.

Тензорные свойства

Наиболее важными свойствами объекта tensor являются его shape, dtype (тип элементов в тензоре) и device (строка, указывающая, находится ли тензор на CPU, GPU или других ускорителях).

Переместите тензоры в GPU

Чтобы переместить тензор в ускоритель, используйте метод to() с именем используемого ускорителя (например, cuda для GPU). Если ускоритель не распознается PyTorch, метод вызывает ошибку времени выполнения. Проверить наличие графического процессора можно с помощью метода torch.cuda.is_available() .

Тензорные операции

PyTorch реализует наиболее распространенные операции над тензорами, такие как умножение матриц, объединение, индексирование и агрегирование. Синтаксис аналогичен синтаксису NumPy.

Тест PyTorch и NumPy

Давайте посмотрим на образец теста PyTorch и NumPy на умножение матриц. Умножение матрицы 1000 x 1000 на ее транспонирование занимает около 18,6 миллисекунд на процессоре с NumPy.

PyTorch на процессоре немного медленнее: умножение матриц занимает около 27 миллисекунд.

Наконец, PyTorch на GPU занимает всего 540 микросекунд на умножение матрицы: ускорение x33 по сравнению с NumPy на CPU.

Обратите внимание, что мы не учитываем время, затрачиваемое на перемещение данных между ЦП и ГП (т. е. вызов x.to("cuda") находится вне магии %timeit): эти операции могут занять некоторое время, но ими можно пренебречь при умножении матриц, достаточно больших по отношению к время, затраченное на вычисление произведения.

Основное использование тензоров в PyTorch

При реализации нейронных сетей с тензорами PyTorch ведет учет тензоров и выполненных операций в направленном ациклическом графе (DAG), что позволяет удобно реализовать автоматическое дифференцирование, полезное для обучения нейронной сети с обратным распространением.

Следующие шаги

Возможные следующие шаги:

Спасибо за чтение! Если вы хотите узнать больше о НЛП, не забудьте подписаться на NLPlanet на Medium, LinkedIn, Twitter и присоединяйтесь к нашему новому Discord серверу!