Возможности 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), что позволяет удобно реализовать автоматическое дифференцирование, полезное для обучения нейронной сети с обратным распространением.
Следующие шаги
Возможные следующие шаги:
- Попробуйте построить нейронную сеть с помощью PyTorch по учебнику.
- Прочитайте сравнение между TensorFlow, PyTorch и JAX.
- Узнайте о torchtext.
Спасибо за чтение! Если вы хотите узнать больше о НЛП, не забудьте подписаться на NLPlanet на Medium, LinkedIn, Twitter и присоединяйтесь к нашему новому Discord серверу!