Как PyTorch Управляет Тензорами и Вычислениями

В основе PyTorch лежит понятие тензора как многомерного массива, чьи данные хранятся в одномерном массиве. Для представления формы и доступа к элементам используются атрибуты shape и stride. Операция транспонирования создает «вид» на те же данные, а не копию. Изменение типа данных создаёт копию тензора. Методы .view() и .reshape() используются для изменения формы тензора, при этом .view() создает представление, а .reshape() может и копировать данные.
Как PyTorch Управляет Тензорами и Вычислениями
Изображение носит иллюстративный характер

Широковещание в PyTorch позволяет выполнять операции с тензорами разных форм без копирования данных. Градиенты в таком случае накапливаются в меньших измерениях. Перемножение матриц обрабатывается с учетом широковещания, а фактически является пакетным умножением.

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

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

Транспонирование: Операция .t() возвращает view (представление) на те же данные, а не создаёт новую копию. Изменения в одном view влияют на другой.

Типы данных: Приведение типов данных (например, из int64 в float16) создаёт новый тензор с копией данных.

Хранилище данных: Данные в PyTorch хранятся в виде одномерного массива (torch.Storage), а форма и шаг (stride) используются для доступа к элементам.

Stride: Шаг определяет, как двигаться по одномерному массиву для доступа к элементам с разными индексами в многомерном тензоре.

.view() vs.reshape(): .view() создаёт представление (view) с той же памятью, а .reshape() может создавать копию данных при несовместимости форм.

Широковещание (Broadcasting): Применяется при операциях с тензорами разных форм, и не копирует данные, а лишь ссылается на существующие элементы. При широковещании градиенты накапливаются по элементам в меньшем измерении.

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

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

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

Оптимизация памяти: PyTorch не хранит промежуточные активации, если они не требуются для обратного распространения.

Пакетная обработка: Перемножение матриц обрабатывает несколько операций одновременно.


Новое на сайте

19521Банковский троян VENON на Rust атакует Бразилию с помощью девяти техник обхода защиты 19520Бонобо агрессивны не меньше шимпанзе, но всё решают самки 19519Почему 600-килограммовый зонд NASA падает на Землю из-за солнечной активности? 19518«Липовый календарь»: как расписание превращает работников в расходный материал 19517Вредоносные Rust-пакеты и ИИ-бот крадут секреты разработчиков через CI/CD-пайплайны 19516Как хакеры за 72 часа превратили npm-пакет в ключ от целого облака AWS 19515Как WebDAV-диск и поддельная капча помогают обойти антивирус? 19514Могут ли простые числа скрываться внутри чёрных дыр? 19513Метеорит пробил крышу дома в Германии — откуда взялся огненный шар над Европой? 19512Уязвимости LeakyLooker в Google Looker Studio открывали доступ к чужим базам данных 19511Почему тысячи серверов оказываются открытой дверью для хакеров, хотя могли бы ею не быть? 19510Как исследователи за четыре минуты заставили ИИ-браузер Perplexity Comet попасться на... 19509Может ли женщина без влагалища и шейки матки зачать ребёнка естественным путём? 19508Зачем учёные из Вены создали QR-код, который невозможно увидеть без электронного... 19507Девять уязвимостей CrackArmor позволяют получить root-доступ через модуль безопасности...
Ссылка