16 - отнюдь не большое число. Сколько единиц MAC потребуется для вычисления сверточной нейронной сети (CNN) для создания 16 выходных каналов тайла 16x16 из 16-глубиной свертки тензора 3x3 за, скажем, 64 такта?

Если бы не использовался быстрый алгоритм, то потребовалось бы как минимум 9216 единиц MAC. 9216 единиц MAC обычно используются для построения систолического массива 96x96, но для вычисления умножения матриц 96x96 (MM) требуется задержка не менее 96 тактов. Чтобы систолический массив оставался занятым, потребуется длинная последовательность из 96 умножений матриц 96x96.

Добро пожаловать в мир тензоров в AI. Пришло время привыкнуть к проклятию размерности.

Тензоры против матриц

Название этой статьи вдохновлено цитатой профессора Чарльза Ф. Ван Лоана из его лекции о тензорных развертываниях в 2010 году и является ответом на нее.

Все тензоры втайне желают, чтобы они были матрицами!

Это утверждение демонстрирует стремление сообщества исследователей тензорного анализа изучать тензоры, сначала разворачивая их в матрицы, а затем используя хорошо зарекомендовавшие себя теоретико-матричные основы для их изучения. Также стандартной отраслевой практикой является сглаживание тензоров вплоть до матриц для использования высокооптимизированных библиотек для умножения матриц (MM) или ускорителей MM (MMA), хотя тензоры считаются наиболее фундаментальным типом данных во всех основных ИИ. каркасы. В сообществе ИИ матрицы обычно считаются частным случаем тензоров.

Вот, возможно, то, что гласит общепринятое мнение:

  1. В MM есть очень хорошие шаблоны параллелизма и совместного использования данных.
  2. Матрицы более естественны или естественны для программируемого оборудования, чем тензор.
  3. Существует собственное решение для аппаратного ускорения - систолический массив для MM.

Тем не мение,

  1. CNN структурно эквивалентны MM. Нет необходимости сглаживать тензоры для использования MM-эквивалентного параллелизма и шаблонов совместного использования данных.
  2. Матрицы рекурсивно блокируются для временной локальности и упаковываются для пространственной локальности при подъеме по иерархии памяти. В конечном итоге они становятся микропанелями, которые представляют собой небольшие строки или столбцы блоков, которые используются программным микроядром или шейдерным ядром графического процессора.
  3. В моем обзоре TPU v1 от Google с систолическим массивом 256x256 был затронут вопрос масштабируемости из-за проклятия квадратной формы систолического массива. С тех пор стало популярным использование нескольких относительно меньших систолических массивов. По этой причине матрицы должны быть аналогичным образом заблокированы и упакованы, прежде чем они приобретут квадратную форму матрицы, которая может быть использована систолическими матрицами.

В результате матрицы из выравнивающих тензоров фактически блокируются и упаковываются, чтобы иметь соответствующую структуру для высокопроизводительного выполнения, как показано ниже. Первое можно назвать раскладыванием в плоскости, а второе - раскладыванием блоков. Матрицы становятся типом данных по умолчанию для CNN и AI в целом из-за десятилетий исследований, создания и использования структуры блочных матриц для высокопроизводительных реализаций MM.

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

Блок-тензоры спешат на помощь

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

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

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

Блочный тензор - это тензор, элементами которого являются тензоры. Это аналог блочной матрицы. Концепция блочных тензоров может использоваться для устранения проклятия размерности и сохранения локальности данных в CNN, подобно тому, как отрасль высокопроизводительных вычислений (HPC) приняла концепцию блочной матрицы для ММ. Тензорные пакеты, эквивалентные микропанелям или квадратным субматрицам в MM, определяются как базовые тензорные единицы, которые должны обрабатываться атомарно, чтобы использовать пространственную локальность по всем измерениям. тензорный блок, состоящий из тензорных пакетов, определяется как тензорные единицы, которые должны полностью передаваться между вычислительными модулями и внешней памятью, чтобы облегчить временную локальность среди тензорных пакетов.

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

CNN в терминах тензоров блоков

Входной и выходной C CNN состоит из нескольких входных карт функций (IFM) и выходных карт функций. (OFM) соответственно. Их можно рассматривать как трехмерные тензоры с размерами x, y для карт объектов, глубиной ввода w для индексирования IFM и глубина вывода z для индексации OFM. Для достижения мелкозернистого параллелизма SIMD и использования быстрых алгоритмов с пространственной локальностью каждая карта функций может быть дополнительно разбита по x и y в плитки. Составной индекс (tx, ty) используется для идентификации входной и выходной плитки соответственно. Для каждой уникальной пары IFM w и OFM z существует фильтр B (w, z), обычно состоящий из параметров фильтра 3x3. Входные и выходные тензоры становятся блочными тензорами тайлов, как показано ниже.

Тайловая CNN может быть представлена ​​более компактно и точно в теоретико-тензорных обозначениях следующим образом:

Обозначение двоеточия означает, что все данные взяты из этого измерения. A (:,:, w) представляет IFM w, поскольку он берет все плитки из этого IFM.

CNN структурно эквивалентны MM

Согласно общепринятому мнению, мы должны развернуть тензоры в матрицы, чтобы использовать параллелизм и шаблоны совместного использования данных в ММ. Однако на самом деле все наоборот. CNN структурно эквивалентны MM с точки зрения их параллелизма и шаблонов совместного использования данных, как показано ниже, и это причина того, почему MM так широко используются в CNN.

Строки в A могут быть заблокированы, поскольку вычисления строк в C независимы. Точно так же карта функций может быть мозаичной, поскольку пиксели могут вычисляться независимо.

ММ-эквивалентный параллелизм и шаблон совместного использования данных остается неизменным по отношению к тайлам.

Выходные листы на одной карте объектов используют одни и те же фильтры, но не одни и те же входные листы. Выходные плитки по выходному измерению используют одни и те же входные плитки, но не одни и те же фильтры. Эквивалентность MM и CNN может быть описана более компактно в тензорно-теоретических обозначениях в следующей таблице:

Глубины тоже нужно выложить плиткой (заблокировать)

Теперь размер изображения встроенной памяти ограничен, и желательно полностью использовать MM-эквивалентные шаблоны обмена данными в CNN между IFM, OFM и фильтрами в порции данных, которые мы переносим на кристалл. Как должна выглядеть геометрия блока данных? У него должно быть достаточно (x, y) для повторного использования фильтров, достаточно w , чтобы было достаточно входных данных для совместного использования, и достаточно z для эффективного обмена входными данными, как показано ниже:

Это наблюдение приводит к блокировке размеров w и z в дополнение к блокировке x и y размеры, которые мы уже сделали. Это необходимо для того, чтобы входные и выходные блоки данных покрывали минимально достаточное количество IFM и OFM, соответственно. Новые индексы tw и tz вводятся для идентификации группы IFM и группы OFM соответственно. Мы определяем входной тензорный пакет A (tx, ty, tw) как группу ( tx, ty) тайлов с выравниванием из группы IFM tw. Аналогичным образом мы определяем C ( tx, ty, tz) как группа (tx, ty) -выровненные тайлы из группы OFM tz. B (tw, tz) представляет группу фильтров, каждый для пары IFM из группы tw и OFM от группы tz. Он называется пакетом тензорного фильтра. Входные, выходные и фильтрующие тензоры теперь являются блочными тензорами тензорных пакетов, как показано ниже.

ММ-эквивалентный параллелизм и шаблон совместного использования данных остаются неизменными по отношению к тензорным пакетам.

тензорное микроядро в программном обеспечении или тензорный пакетный движок в аппаратном обеспечении может быть разработано для обработки атомарной операции свертки входного тензорного пакета A ( tx, ty, tw) с пакетом тензора фильтра B ( tw, tz) , как показано ниже:

Предположим, что входные и выходные плитки имеют размер 6x6 и 4x4, соответственно, и используйте 8 как размер группы IFM и группы OFM. Без использования быстрого алгоритма свертки 3x3 потребуется 2304 единицы MAC, чтобы завершить эту операцию за 4 такта. 2304-сторонний параллелизм применяется примерно одинаково для всех измерений, включая x и y вдоль карты функций, глубину ввода w и глубина вывода z. Блокирование с помощью плитки небольшого размера, например 4x4, позволяет использовать быстрый алгоритм, такой как Winograd, так что 2304-сторонний параллелизм может быть достигнут только с 576 устройствами MAC.

Рекурсивная блокировка тензоров

Тензорный пакет - это основная единица, которая полностью используется вычислительными модулями. Чтобы сохранить локальность данных и мозаичную структуру между тайлами, мы вводим промежуточный уровень блока между полным тензором и тензорным пакетом, тензорный блок, , чтобы включить тензорные пакеты, которые мы хотим вывести на кристалле. полностью. Это фундаментальная единица для временной локальности между тайлами и для пространственной локальности, когда имеется достаточное количество вычислительных блоков, встроенная память и обеспечивающая пропускная способность. Тензорный блок обозначается (bx, by, bz) вдоль x , y, и z размеры.

Ниже приведен пример рекурсивной блокировки тензоров. Полный тензор - это блочный тензор 4x4x2 блочных тензоров 1x1x8 блочных тензоров 4x4 тайлов, где (dx, dy) - смещение для поиска пикселя внутри тайла, и dz - это индекс для идентификации конкретной карты функций в группе.

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

Задержка выполнения транспонирования может быть покрыта двойной буферизацией. Когда тензорный блок представлен вычислительным блокам, он разворачивается в тензорные пакеты в (tx, ty) -славных порядках, так что тензорные пакеты могут обрабатываться параллельно. в домене (x, y) с соответствующими вычислительными блоками.

Все тензоры тайно хотят быть самими собой

Профессор Ван Лоан также сказал в разговоре о блочном развертывании тензоров блоков:

Блочная развертка сохраняет структуру и локальность данных. … На мой взгляд, блокировка в конечном итоге окажет такое же влияние на тензорные вычисления, как и на матричные вычисления.

Тензоры блочно разворачиваются в тензорные блоки для временной локальности в нескольких измерениях, так что при переносе на кристалл данные могут совместно использоваться в нескольких измерениях. Тензорный блок далее разворачивается в тензорные пакеты, которые имеют минимально достаточные покрытия по всем измерениям. В представленном случае для обработки таких тензорных пакетов потребовался бы большой параллелизм в 2304 направления. ММ-эквивалентный параллелизм и шаблоны совместного использования данных применяются к тензорным пакетам в тензорном блоке.

Насколько нам известно, то, что обсуждалось в этом посте, может быть первой попыткой в ​​истории вычислений принять концепцию тензоров блоков на «голом железе». Может быть достигнута масштабируемость и больший параллелизм по измерениям x и y для приложений, работающих с видео / изображениями высокого разрешения. CNN может быть первым приложением-убийцей тензоров блоков с его революционной силой и глубоко укоренившимся в тензорах.

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