Решения Analog In—Memory Computing для граничных вычислений с очень низким энергопотреблением
Марк Райтен (Mark Reiten), вице-президент SST, дочерней компании Microchip Technology
Машинное и глубокое обучение уже давно стали неотъемлемой частью нашей жизни. Приложения, использующие искусственный интеллект (ИИ), обработку естественного языка (Natural Language Processing, NLP), анализ изображений и распознавание объектов, применяются во многих окружающих нас устройствах. Большинство таких приложений использует для работы облачные сервисы, которые выполняют все возложенные на них задачи, например упрощают написание электронного письма при работе с почтой Gmail путем автопобора слов. PDF версия.
Однако несмотря на преимущества облачных сервисов, их использование порождает ряд проблем, связанных с безопасностью, конфиденциальностью, задержкой передачи, энергопотреблением и стоимостью устройств. Решить эти проблемы можно было бы с помощью локальных механизмов обработки, выполняющих частичные или полные вычисления в самом граничном устройстве. Однако такой подход трудно реализовать при использовании традиционных принципов построения цифровых нейронных сетей, где данные для проведения вычислений сначала следует перенести из памяти в арифметическое логическое устройство (ALU), что является весьма энергозатратным процессом. Оптимальным решением в таком случае является использование многоуровневой памяти и архитектуры аналоговых вычислений в памяти (Analog In-Memory Computing), которые позволят сократить мощность потребления процессоров граничных устройств, отвечающих за обработку данных, в пределах от нескольких мкВт до мВт.
Проблемы облачных вычислений
Во время работы приложения ИИ, использующего для вычислений облачные сервисы, пользователь так или иначе загружает в облако некоторый пакет данных, после чего осуществляется их обработка и отправка результата граничному устройству (см. рис. 1).
Рис. 1. Пример передачи данных с граничного устройства в облако
Рассмотрим основные проблемы, связанные с использованием облачных сервисов в приложениях ИИ.
- Конфиденциальность и безопасность. При постоянной работе устройств всегда имеется риск утечки личных данных или конфиденциальной информации во время ее загрузки на сервер или хранения в центре обработки данных (ЦОД).
- Излишнее потребление энергии. Каждый передаваемый в облако бит данных вызывает рост потребления энергии оборудованием, отвечающим за передачу информации, ее обработку в облаке и прием результата граничным устройством.
- Задержка при обработке пакетов данных. Иногда на обработку даже небольшого пакета и получение ответа от облака может потребоваться несколько секунд. Пользователь замечает любую задержку более 100 мс, и она его может раздражать.
- Экономия вычислительных мощностей. Поскольку в сети имеется множество устройств и датчиков, генерирующих данные, загрузка каждого бита информации в облако для последующей обработки и выгрузки является нецелесообразной.
Для решения этих проблем с помощью пограничных вычислений в первую очередь необходимо провести обучение нейронной сети, ответственной за обработку данных, в соответствии с предполагаемым сценарием использования. Такое обучение, как правило, требует значительных вычислительных мощностей, памяти и возможности выполнения арифметических операций с плавающей запятой. Оно выполняется в облаке или же на т.н. локальных фермах ГП/ЦП/ПЛИС. Созданную модель нейронной сети можно оптимизировать для работы с граничным устройством с низкой вычислительной мощностью: нейронной сети не требуется обратная передача ошибки обучения для операций вывода. Однако механизму вывода необходимо множество блоков умножения с накоплением (Multiply-Accumulate, MAC), за которыми следует блок активации на базе функции линейного выпрямителя (rectified linear unit, ReLU), сигмовидно-взвешенной линейной функции (Sigmoid-weighted linear unit, SiLU) или функции гиперболического тангенса th(x) в зависимости от сложности модели нейронной сети и уровня объединения между ее слоями.
Большинство моделей нейронных сетей требуют проведения огромного количества MAC-операций. Даже сравнительно небольшая модель сети 1.0 MobileNet-224, имеющая 4,2 млн параметров (весовых коэффициентов), требует проведения 569 млн операций умножения с накоплением во время обработки данных. Поскольку в большинстве моделей нейронных сетей преобладают именно операции MAC, основное внимание в статье будет уделено именно им, а также поиску возможности создания лучшего решения. Пример простой полностью связанной двухуровневой сети представлен на рисунке 2.
Рис. 2. Пример полносвязной двухуровневой нейронной сети
Входные нейроны (данные) обрабатываются с помощью весовых коэффициентов первого уровня. Далее выходные нейроны первого уровня обрабатываются с использованием коэффициентов второго уровня, и на выход поступает прогнозный результат, по которому можно определить, смогла ли модель распознать, например, кошку на заданном изображении. Такая модель нейронной сети используют скалярное произведение для вычисления каждого нейрона на каждом уровне.
Эффект «узкого горлышка» в цифровых вычислениях
При реализации цифровой нейронной сети весовые коэффициенты и входные данные хранятся в памяти DRAM или SRAM. Однако для проведения вычислений их необходимо поместить рядом с блоком MAC. При таком подходе большая часть энергии затрачивается не на саму обработку данных, а на их выборку и перенос в блок ALU, где и происходят операции умножения с накоплением, как это видно из рисунка 3.
Рис. 3. Эффект «узкого горлышка» в цифровых вычислениях для машинного обучения х – ×
Чтобы оценить уровень энергетических потерь при такой архитектуре сети, достаточно знать, что для выполнения типичной операции MAC с использованием цифровых вентилей необходимо около 250 фДж энергии. Однако энергия, затрачиваемая на передачу данных из памяти в ALU, более чем на два порядка выше и составляет 50–100 пДж. Существует довольно много способов, позволяющих минимизировать передачу данных из памяти в блок ALU, сократив потребление энергии, но не стоит забывать, что вся структура сети по-прежнему базируется на архитектуре фон Неймана, что предоставляет более широкие возможности для снижения потребляемой мощности. Так, например, можно уменьшить энергию для выполнения MAC-операции со 100 пДж до долей пДж.
Устранение нежелательного эффекта путем аналоговых вычислений в памяти
Выполнение вычислений на граничном устройстве становится энергоэффективным только тогда, когда они осуществляются в самой памяти (In-Memory Computing). Использование этого метода сводит к минимуму объем данных, которые перемещаются из памяти в блок ALU, что, в свою очередь, исключает потерю энергии, прежде затрачиваемой на их перенос. Само хранение данных в памяти не требует больших энергозатрат, т.к. ячейки мало потребляют в активном режиме и почти не потребляют в режиме ожидания.
Ярким примером реализации метода In-Memory Computing является технология memBrain от Silicon Storage Technology (SST) – дочерней компании Microchip Technology. MemBrain основана на уже известной технологии SuperFlash от SST, которая фактически стала стандартом для решений, использующих в своем составе многоуровневую память. Устройства, построенные на основе memBrain, имеют архитектуру памяти, которая позволяет выполнять вычисления там же, где хранятся весовые коэффициенты нейронной сети. Такой подход устраняет «узкое горлышко» при выполнении MAC-операций, т.к. отсутствует необходимость в перемещении данных весовых коэффициентов: перемещению в массив памяти подлежат только данные, полученные от датчиков или других устройств на входе системы, к которым относятся камера или микрофон.
Концепция технологии memBrain основана на двух фундаментальных принципах: а) ток на выходе транзистора зависит от его порогового напряжения Vt и сигнала на входе; б) законе Кирхгофа, который гласит, что алгебраическая сумма токов ветвей, сходящихся в каждом узле любой цепи, равна нулю. Для понимания многоуровневой архитектуры memBrain также необходимо знать структуру ячейки энергонезависимой памяти (non-volatile memory, NVM). На рисунке 4 показано сечение двух битовых ячеек ESF3 (Embedded SuperFlash 3-го поколения) с общими стирающим затвором (Erase Gate, EG) и истоком (Source Line, SL).
Рис. 4. Ячейка памяти SuperFlash ESF3
Каждая ячейка имеет шесть составляющих: связывающий затвор (coupling gate, CG), управляющий затвор (worldline, WL), который подключается к линии слова в массиве ячеек, стирающий затвор (EG), исток (SL), подключаемый к линии истоков в массиве ячеек, сток (bite-line, BL), подключаемый к линии битов в массиве ячеек, и плавающий затвор (floating gate, FG). Операция стирания ячейки выполняется путем подачи высокого уровня напряжения на затвор EG. Программирование же выполняется путем подачи высокого/низкого уровня напряжения на WL, CG, BL и SL. Операция чтения осуществляется с подачей низкого уровня напряжения на WL, CG, BL и SL.
Благодаря такой архитектуре памяти можно программировать битовые ячейки памяти на разных уровнях Vt с помощью операции мелкомодульного программирования (fine-grained programming). В SuperFlash ESF3 используется специальный алгоритм настройки Vt плавающего затвора (FG) ячейки, обеспечивающий определенное значение тока в зависимости от входного напряжения. В зависимости от требований конечного приложения ячейки можно запрограммировать не только на работу в линейной области, но и в области со слабой инверсией (подпороговой области).
На рисунке 5 показан пример хранения и работы с несколькими уровнями Vt в ячейке памяти.
Рис. 5. Программирование уровней Vt в ячейке памяти SuperFlash ESF3
Допустим, мы пытаемся сохранить в ячейке 2-бит целое число. Для этого следует запрограммировать каждую ячейку в массиве памяти с одним из четырех возможных 2-бит целочисленных значений (00, 01, 10, 11). Четыре кривые на графике представляют собой ВАХ для каждого из четырех возможных состояний ячейки, из которых отчетливо видна зависимость тока ячейки от напряжения, приложенного к затвору CG.
MAC-операции при вычислениях в памяти
Каждую ячейку ESF3 можно представить в виде некоторого элемента с переменной проводимостью (gm). Проводимость ячейки ESF3 зависит от порогового напряжения Vt плавающего затвора. Весовой коэффициент из обученной модели нейронной сети программируется как Vt плавающего затвора ячейки памяти. Это значит, что проводимость ячейки (gm) представляет собой весовой коэффициент обученной модели. Когда к ячейке ESF3 приложено входное напряжение VIN, выходной ток IOUT определяется уравнением IOUT = gm ∙ VIN, которое является ни чем иным как операцией умножения входного напряжения и весового коэффициента, хранящегося в ячейке ESF3. На рисунке 6 показан пример выполнения операции умножения с накоплением в небольшом массиве ячеек ESF3 (массив 2×2).
Рис. 6. Пример MAC-операции в массиве ESF3 (2×2)
Операция накопления в данном случае выполняется путем сложения выходных токов из ячеек, подключенных к тому же столбцу (например, I1 = I11 + I21). В зависимости от приложения функция активации осуществляется либо в блоке АЦП, либо в цифровой реализации вне блока памяти.
Для демонстрации принципа выполнения MAC-операций на более высоком уровне представим, что все весовые коэффициенты из обученной модели запрограммированы как Vt плавающего затвора ячейки памяти. Следовательно, веса каждого уровня обученной модели можно запрограммировать в массиве памяти, который физически выглядит как некая матрица весов (см. рис. 7).
Рис. 7. Матрица весов для обработки данных
При вычислениях данные с входа (например, пикселы изображения) сначала преобразуются в аналоговый сигнал с помощью ЦАП и добавляются в массив памяти. Затем массив выполняет множество параллельных операций MAC и генерирует выходные данные, которые могут перейти на этап активации соответствующих нейронов и преобразоваться обратно в цифровые сигналы с помощью АЦП. Эти цифровые сигналы обрабатываются для объединения перед переходом на следующий уровень.
Предложенный тип архитектуры имеет высокую степень гибкости. Модули memBrain можно объединять для создания более сложных моделей нейронных сетей.
Рис. 8. Пример объединения модулей memBrain
На рисунке 8 показан пример объединения модулей memBrain и составления из них матрицы 3×4. После объединения аналоговой и цифровой структур модулей через общие шины данные могут беспрепятственно перемещаться с одного memBrain-модуля в другой.
Мы уже обсудили внутреннее устройство и принципы архитектуры memBrain. Однако стоит также упомянуть специальный пакет для разработки программного обеспечения SDK memBrain (см. рис. 9), который значительно упрощает развертывание локальных приложений.
Рис. 9. Последовательность действий при работе с SDK memBrain
Этот пакет не привязан к какой-либо модели обучения – пользователь может создать модель нейронной сети в любой из доступных сред, к которой относятся TensorFlow, PyTorch или др. Пакет SDK memBrain помогает квантовать обученную модель нейронной сети и сопоставить ее с массивом памяти, где производится локальная обработка данных, поступающих с внешнего датчика или ПК пользователя.
Преимущества использования многоуровневой памяти memBrain с In-Memory Computing.
- Экстремально низкое энергопотребление. Технология предназначена для приложений с низким энергопотреблением и имеет с этой точки зрения три следующих преимущества.
1) потребляемая мощность меньше за счет вычислений в самой памяти и отсутствия переноса данных из SRAM или DRAM в блок ALU и обратно;
2) поскольку ячейки памяти работают в подпороговом режиме с очень низкими значениями тока, потребляемая ими мощность имеет минимальное значение;
3) в режиме ожидания потребление энергии практически отсутствует, т.к. энергонезависимые ячейки не требуют питания для хранения информации.
Эта технология также имеет преимущества с точки зрения разряженности весов и входных данных: ячейка памяти не активируется, если входные данные или вес имеют нулевое значение.
- Компактные размеры. Технология использует архитектуру ячейки с разделенным затвором (1,5T), а ячейки SRAM в цифровой реализации базируются на шеститранзисторной архитектуре (6T). Кроме того, ESF3 представляет собой битовую ячейку гораздо меньшего размера по сравнению с ячейкой SRAM 6T. Ячейка ESF3 может хранить в себе все 4-бит целое число, в отличие от ячейки SRAM, которой для этого требуется 4 ∙ 6 = 24 транзистора. Все это позволяет значительно сократить занимаемую площадь ячейки на кристалле и, как следствие, уменьшить размеры всего блока памяти.
- Низкая стоимость разработки. Из-за наличия эффекта «узкого горлышка» и ограничений, связанных с архитектурой фон Неймана при создании специализированных устройств (например, Jetsen от Nvidia или TPU от Google), разработчики были вынуждены ограничить их геометрию в угоду более высокой производительности из расчета на 1 Вт, что является довольно дорогостоящим способом решения задачи пограничных вычислений. Использование архитектуры Analog In-Memory Computing позволяет осуществлять вычисления непосредственно в ячейках памяти, благодаря чему появилась возможность увеличить геометрию устройств, упростив разработку, а также сократить затраты на нанесение маски и ускорить сроки производства.
Приложения ИИ, использующие локальные механизмы обработки данных, являются многообещающим направлением. Однако прежде чем обработка данных на граничном устройстве станет повседневным делом, следует решить проблемы, связанные с энергопотреблением и стоимостью таких систем. Основная часть этих проблем решается за счет использования многоуровневой памяти, которая позволяет выполнять вычисления непосредственно в ячейках памяти на кристалле. Данная технология основана на проверенном и де-факто ставшим стандартным во многих сферах решении, которое специально оптимизировано под приложения машинного обучения и искусственного интеллекта.
MCA834