Если вы когда либо интересовались техническими характеристиками современных ускорителей NVIDIA, наверняка замечали, что компания часто указывает два значения производительности: стандартное и с учётом структурной разреженности. Например, в описании новых GPU можно наткнуться на формулировки с пометками, вроде: «400 TFLOPS (sparse)».
Что скрывается за этими цифрами? Почему в одних случаях производительность указывается в два раза выше, чем в других? И главное, как на практике достигается такой прирост, и что вообще означает "структурная разреженность" для работы нейросетей и искусственного интеллекта?
В этой статье я попытаюсь простыми словами разъяснить, что такое структурная разреженность, почему она важна для современных GPU, и как это помогает ускорять вычисления и экономить ресурсы.
Что такое разреженность в нейросетях
Современные нейронные сети состоят из огромного количества весов — параметров, которые определяют, как именно сеть обрабатывает информацию. Однако исследования и практика показали: для высокой точности работы далеко не все эти веса действительно нужны. После сжатия и оптимизации значительная часть из них превращается в нули, то есть просто не участвует в вычислениях.
Такое свойство называется разреженностью (sparsity), а сами веса — разреженными матрицами.
Чем больше нулей в матрице весов, тем меньше реальных операций умножения и сложения нужно выполнять — а значит, вычисления становятся быстрее и экономичнее.
Различают два основных типа разреженности, давайте познакомимся с каждым из них.
Произвольная разреженность (unstructured)
Нули появляются где угодно в матрице: случайным или малопредсказуемым образом. Это позволяет добиться высокого процента обнулённых весов, но эффективно ускорить такие вычисления на современных ускорителях сложно, поскольку аппаратное обеспечение плохо справляется с беспорядочными пропусками.
Наглядная схема произвольной разреженности.
Структурная разреженность (structured)
Нули располагаются по строгим, повторяющимся шаблонам: например, в каждом блоке из четырёх значений два всегда обнуляются. Такой предсказуемый порядок позволяет GPU и другим ускорителям пропускать целые блоки вычислений, что и обеспечивает обещанный рост производительности. Именно такой вид разреженности использует NVIDIA.
Наглядная схема структурной разреженности.
Что такое структурная разреженность в исполнении NVIDIA
Начиная с архитектуры Ampere, компания NVIDIA реализовала в своих ускорителях специальную поддержку структурированной разреженности на уровне аппаратных блоков, так называемых Tensor Cores.
Как это работает?
Если в каждом блоке из четырёх элементов матрицы (например, весов нейросети) два значения равны нулю, то Tensor Cores способны «пропускать» вычисления для этих нулей и одновременно обрабатывать больше информации. Благодаря такому подходу, пропускная способность этих ядер фактически удваивается — то есть за то же время можно выполнить в два раза больше вычислений, по сравнению с обычным случаем.
Важная оговорка:
Чтобы реально получить такой прирост, сама модель и используемый фреймворк (например, PyTorch, TensorFlow) должны поддерживать и использовать именно такую структурированную разреженность. В реальной практике удвоение производительности возможно только в «идеальном» сценарии, если большая часть весов модели соответствует этому шаблону разреженности.
Что это даёт?
GPU действительно может выдавать, например, не 200, а 400 TFLOPS (sparse), если конечно соблюдены все условия. Именно поэтому NVIDIA в спецификациях часто указывает значения производительности с пометкой (sparse).
Почему NVIDIA использует разреженность в бенчмарках
В спецификациях и презентациях NVIDIA часто приводит показатели производительности своих GPU не только для обычных моделей, но и для моделей с учётом структурной разреженности (sparse). Зачем? — это позволяет указывать вдвое завышенные характеристики в спецификациях и промо материалах.
Модель VGG-16 до и после прореживания в качестве примера
Показатели с учётом разреженности — это лишь теоретически возможный максимум, который достижим только при идеальных условиях:
Используется специально подготовленная sparse-модель
Например, такие модели, как "обрезанный" BERT, в которых значительная часть весов заранее обнулена по определённому шаблону.
Тот самый "обрезанный" BERT до и после прореживания.
Вычисления организованы с учётом оптимизированной структуры
Все операции и данные заранее адаптированы так, чтобы аппаратное ускорение разреженности реально работало.
Поддержка реализована в используемом фреймворке
Для максимального эффекта применяются такие инструменты, как cuDNN, TensorRT и другие специализированные библиотеки от NVIDIA, которые умеют работать с разреженными моделями.
Необходимо осознавать:
В реальных задачах не каждая нейросеть может быть эффективно преобразована в разреженную структуру, и не каждый фреймворк или модель поддерживает эту самую структурную разреженность. Поэтому удвоенная производительность это оптимистичный максимум, а не гарантированный результат для всех сценариев. На практике прирост будет зависеть от конкретной задачи, используемой модели и уровня поддержки разреженности.
Заключение
Структурная разреженность — это весьма эффективный способ уменьшить количество реальных вычислений в нейросетях без потери точности, если правильно подобрать структуру модели. NVIDIA активно использует этот подход в своих технологиях и маркетинговых материалах, потому что поддержка разреженности позволяет в теории удвоить производительность современных GPU.
Однако при оценке бенчмарков и технических характеристик важно помнить: такие показатели достижимы только для специально оптимизированных моделей и при наличии поддержки структурной разреженности в используемом фреймворке. В реальных задачах не всегда удаётся реализовать эти идеальные условия, поэтому заявленная "удвоенная" производительность — это максимальный, но не всегда реальный результат.
Продолжная использовать наш сайт, вы даете согласие на использование файлов Cookie, пользовательских данных (IP-адрес, вид операционной системы, тип браузера, сведения о местоположении, источник, откуда пришел на сайт пользователь, с какого сайта или по какой рекламе, какие страницы
открывает и на какие страницы нажимает пользователь) в целях функционирования сайта, проведения статистических исследований и обзоров. Если вы не хотите, чтобы ваши данные обрабатывались, покиньте сайт.