DeepFreeze - это инструмент, используемый для моделирования PPA и генерации RTL для проекта FixyNn . Сценарии включены для генерации RTL с графа TensorFlow и синтеза/имитации этой конструкции. Чтобы работать с графиком, не связанного с Tensorflow, вы должны написать свою собственную структуру данных слоя, чтобы подавать в объект Veriloggenerator (см. Конец gen_verliog.py
, например, использование).
Для получения дополнительной информации о Fixynn , включая описание DeepFreeze в контексте, см. Следующую статью: FixyNn: Эффективное оборудование для мобильного компьютерного зрения с помощью Transfer Learning.
Этот инструмент был построен и протестирован с использованием Python 2.7.15 и Tensorflow 1.10.1.
Требуемые пакеты Python являются Numpy и Tensorflow. Для установки:
pip install numpy tensorflow
cd deep_freeze/
bash run.sh
Чтобы добавить модель для генерации или моделирования RTL, вам необходимо предоставить:
mobilenet_base
возвращается в https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet.py)Каждый уровень в фиксированной сети определяется либо сгенерированным модулем Verilog, либо параметризованным экземпляром рукописного модуля. Создается любой слой с обучаемыми переменными, а все остальные созданы. Тренируемые переменные жестко кодируются в RTL с переменной точностью и реализованы в синтезированной конструкции в виде фиксированных скалярных скал. То, что традиционно будет реализовано в блоке Mac в программируемом ускорителе, вместо этого состоит из фиксированных скалярных скал, за которыми следует дерево доверчика с переносной павилькой в конструкции с фиксированным весом. Это очень эффективно по энергии, но требует большой кремниевой области. Кремниевая область растет примерно линейно с нулевом с фиксированными переменными.
Чтобы достичь высокого использования фиксированных данных, мы полностью работаем в сфере трубопровода. Это требует буферизации активаций между слоями. Мы можем избежать буферизации всей активации слоя, используя линейный буфер. В этой статье дается фундаментальное объяснение, какие линии буферы и как они используются.
Наша реализация линейного буфера состоит из двух частей: буфера SRAM и буфера регистра. SRAM хранит активации для столько строк, сколько необходимо, чтобы быть сочетания за раз (равное высоте следующего ядра). Регистральный буфер следует за буфером SRAM и хранит активации MXN для следующих ядер MXN. Это устраняет ненужные чтения из буфера SRAM.
Размер SRAM, необходимый для слоя, - это IM_HEIGHT * IM_WIDTH * NCHANNELS * NBITS
. Это разбито на IM_HEIGHT * IM_WIDTH
слова размера NCHANNELS * NBITS
. Размер буфера регистра - K_HEIGHT * K_WIDTH * NCHANNELS * NBITS
.
Установка слоев в оборудовании предоставляет возможность для различных агрессивных оптимизаций (как оптимизации оборудования, так и оптимизации в дизайне модели).
Улучшения в сетевой архитектуре могут привести к улучшению аппаратного PPA. Например, глубинные разделяемые слои способны достичь аналогичной точности, как традиционные сверточные слои с весами в 8-9 раз. Эти слои работают очень хорошо в Fixynn из -за снижения затрат на площадь. Любые другие методы, которые уменьшают размер модели или повышают точность, могут принести пользу FixyNn.
Установка веса в кремний позволяет нам извлечь выгоду из снижения сложности определенных значений. Веса нулевых значений являются одним из примеров: они могут быть явно удалены из аппаратного обеспечения без накладных расходов. Это делает обрезку особенно мощной и привлекательной.
Кроме того, значения с низкими весами хэмминга, то есть количество ненулевых битов в их двоичном представлении, дешевые для реализации в фиксированном оборудовании. Это связано с тем, что фиксированные скаляры реализованы как серия смен и добавления. Чем меньше ненулевых битов фиксированного множителя, тем меньше сдвига и добавляет. Инструмент синтеза также способен воспользоваться значениями с высоким весом хамминга относительно общего количества битов, необходимых для представления числа. Например, скалярный x * 239
(вес хамминга = 7, nbits = 8) может быть реализован как x << 8 - x << 5
в оборудовании.
Для изображений с высоким разрешением каждая строка линейного буфера требует значительной области SRAM. Мы можем устранить часть этого SRAM, буферируя только фракции линии за раз, и сделав несколько проходов вниз по изображению. Это происходит за счет повышенного оборудования для управления и некоторого избыточного вычисления активаций на границе линейного диапазона буферов. Это избыточное вычисление вызывает минимальную стоимость энергии и задержки, потому что аппаратное обеспечение с фиксированным весом очень эффективно.
Любое ядро 1x1 не требует, чтобы буферное предварительное предложение, поскольку оно может непосредственно потреблять активации, сгенерированные предыдущим слоем. Это приводит к глубинному разделяемым слоям, не требующим какого -либо буферизации между глубинными и точковыми сознаниями. Поэтому мы можем объединить эти две операции в один кампунационный блок.
Уровень Conv2D эффективна в этой конструкции, потому что они демонстрируют высокое повторное использование веса, что приводит к относительно низкой стоимости площади. Плотные слои не имеют повторного использования веса. Следовательно, плотные слои приводят к очень неэффективному использованию области. Кроме того, плотные слои не допускают линейного буферизации, что приводит к довольно большим областям регистрации.
Наша работа для SYSML 2019 (см. sysml_2019/
) исследует полностью фиксированные экстракторы функций CNN. PPA для этого экстрактора этой функции великолепен, потому что он содержит только слои Conv2D. Все сети, внедренные в фиксированном оборудовании, должны оплачивать стоимость области, которые требуют плотных слоев. Это может быть приемлемо для небольших моделей IoT.
CNN, как правило, демонстрируют поведение, где слои на передних конечных показателях имеют много входных пикселей и небольшое количество ядер, тогда как на задние слои имеют меньше входных пикселей и большое количество ядер. Это приводит к тому, что площадь SRAM будет сосредоточена к передней части сетевого трубопровода, в то время как комбинационная площадь сосредоточена по направлению к задней части сетевого трубопровода.
Любой слой с шагом, превышающим 1x1, производит меньше пикселей активации, чем он потребляет на изображение. Например, слой Pool2D, который усиливает 2x2 по сравнению с изображением 100x100, создает изображение 50x50, которое представляет собой 4X снижение пикселей. Это приводит к следующим слоям, имеющим 1/4x количество активных циклов (каждый выходной пиксель на слое требует 1 цикла). Это означает, что очень глубокие сетевые трубопроводы с большим количеством пониженного состава будут значительно узкими местами на передних уровнях, что приведет к низкому использованию слоев бэкэнд.
Это понимание помогает нам выбрать модели, которые будут хорошо перевести в аппаратное обеспечение. Некоторые архитектуры выполняют раннюю понижение активаций для сокращения задержки на процессоре за счет сокращения общего количества Mac (по стоимости размера модели) (см. FD-Mobilenet). Модели, реализованные в FixyNn, хотят сделать противоположное обмен: уменьшить количество параметров за счет вычислений (поскольку область является основным ограничением производительности в реальной системе).
Исправление части CNN в аппаратном обеспечении затрудняет повторное использование этого аппаратного обеспечения для какой -то другой цели. Наша работа для SYSML 2019 исследует этот компромисс и демонстрирует, что некоторое количество фиксированного оборудования способно обобщать во многих различных моделях. Будущая работа будет сосредоточена на дальнейшем улучшении обобщения фиксированного оборудования, добавив некоторую программируемость (при этом все еще пользуясь эффективностью аппаратного обеспечения с фиксированным весом).
SAME
накладки путем изменения sram_controller.sv
flatten.sv
, чтобы включить полностью фиксированные сети классификации изображений путем сглаживания изображения от 2D-слоев до плотных слоев.ker_size
данных записывается в SRAM.Опубликованные работы, в которых использовался этот инструмент, были представлены на SYSML 2019 и на семинаре Neurips 2018 на Device ML. Полную бумагу можно найти на Arxiv At Fixynn: Эффективное оборудование для мобильного компьютерного зрения с помощью Transfer Learning.
Если вы обнаружите, что этот DeepFreeze полезным для вашего исследования, используйте следующий Bibtex, чтобы цитировать нас,
@article{fixynn,
title={FixyNN: Efficient Hardware for Mobile Computer Vision via Transfer Learning},
author={Whatmough, Paul and Zhou, Chuteng and Hansen, Patrick and Venkataramanaiah, Shreyas Kolala and Seo, Jae-Sun and Mattina, Matthew},
journal={SysML},
year={2019}
}
Патрик Хансен, исследовательская лаборатория Arm ML, Бостон, Массачусетс
Шреяс Колала Венкатараманая, Университет штата Аризона
Пол Уотмо, исследовательская лаборатория Arm ML, Бостон, Массачусетс
Этот проект лицензирован по лицензии MIT - для получения подробной информации см. Файл лицензии.