Разреженные техники для 100-кратного ускорения инференса больших языковых моделей. Узнайте, как разреженные компиляторы революционизируют инференс LLM, открывая беспрецедентную эффективность и скорость. В предыдущем обсуждении «Как LLM ускоряют инференс с помощью разреженности» мы рассмотрели вторую часть: «Ускорение инференса с помощью активационной разреженности». Нажмите сюда, чтобы ознакомиться с первой частью: «Как LLM выполняют прунинг». В этой части мы углубимся в третью тему: «Влияние разреженных компиляторов на инференс LLM».
Зачем нужны компиляторы
Последние разработки показывают, что вычисления в глубоком обучении становятся всё более разреженными, то есть операции выполняются над тензорами с множеством нулей. Помимо разреженных весов модели (обычно статических и известных заранее), были обнаружены более разреженные паттерны, зависящие от входных данных и известные только во время выполнения, — так называемая динамическая разреженность. Например, большие языковые модели (LLM), такие как GPT и OPT, демонстрируют различные типы динамической разреженности. Во-первых, модели Transformer (и другие типы моделей) показывают inherent динамическую разреженность во входных данных, активациях и градиентах. В графах активаций лишь очень немногие элементы отличны от нуля (например, 3.0% для T5-Base, 6.3% для ViT-B/16). Во-вторых, динамическая разреженность используется для дальнейшего масштабирования моделей DNN. Большинство существующих моделей с числом параметров более триллиона используют архитектуру смеси экспертов (MoE), которая динамически активирует экспертов на основе разреженных входных данных. Кроме того, обучение с динамической разреженностью динамически обрезает менее важные связи в модели во время обучения, привлекая всё больше внимания благодаря своей вычислительной эффективности.
Динамическая разреженность, при которой разреженные паттерны неизвестны до времени выполнения, создаёт серьёзные проблемы для глубокого обучения. Современные решения, учитывающие разреженность, ограничены предопределёнными статическими паттернами из-за значительных накладных расходов, связанных с предварительной обработкой. Эффективное выполнение динамически разреженных вычислений часто сталкивается с несоответствием между конфигурациями тензорных блоков, дружественных к GPU для эффективного выполнения, и минимизацией пустого покрытия (ненулевых значений в тензорах) в разреженных формах блоков. Разреженность LLM требует использования разреженных операторов, а традиционные библиотеки, такие как cuSPARSE или Sputnik, из-за своей универсальной, а не оптимальной конструкции, либо поддерживают только статически скомпилированные ядра с учётом разреженности, либо требуют динамического преобразования разреженных матриц в плотный формат, что приводит к значительным накладным расходам производительности в сценариях динамической разреженности.
Сравнение основных компиляторов
Основные современные компиляторы для разреженных вычислений включают cuSPARSE, Sputnik, OpenAI Block Sparse, SparTA и PIT, как указано в [11]. Ниже представлена таблица сравнения данных ускорения: Сценарий: умножение матриц размером 4096 × 4096 × 4096 Метрика: задержка (мс)
Стоит отметить, что PIT превосходит современные методы разреженной оптимизации, достигая ускорения до 88.7x, 5.8x, 17.5x и 5.7x по сравнению с cuSPARSE, Sputnik, OpenAI Block Sparse и SparTA соответственно.
Влияние компиляторов на инференс LLM
OPT
В эксперименте [11] оценивается PIT на наборе данных Alpaca для двух версий модели OPT: OPT13B и 30B, с использованием восьми GPU V100–32GB. PIT применяет две оптимизации динамической разреженности для OPT: (1) устранение накладных расходов на дополнение предложений разной длины в одном пакете; (2) использование мелкозернистой разреженности (до 99%), создаваемой активациями ReLU в слоях FFN. Размер пакета установлен на 32, а PyTorch-S использует Triton в качестве бэкенда.
Сквозная задержка на пакет и объём памяти OPT
Производительность PIT превосходит PyTorch, PyTorchS и DeepSpeed в 2.1x ∼ 2.3x, 2.5x ∼ 3.0x и 2.0x ∼ 2.2x соответственно. Избегание дополнения в динамических последовательностях даёт PIT ускорение в 1.6x ∼ 1.7x относительно базового уровня. За счёт дальнейшего использования динамической разреженности в активациях ReLU слоёв FFN, PIT дополнительно увеличивает производительность в 1.3x ∼ 1.4x. По сравнению с PyTorch-S, использующим блочно-разреженные ядра Triton с размером блока 32x32, PIT использует меньшие микроблоки (т.е. 1x32) и эффективные вычисления с SRead и SWrite, избегая вычислительных потерь. Кроме того, на PyTorch-S влияют накладные расходы на преобразование разреженного формата, поэтому он показывает самую высокую задержку. Что касается потребления памяти, DeepSpeed имеет наименьшее использование памяти, так как объединяет весь слой энкодера в один оператор, экономя память активаций.
MOE
В экспериментах [11] на SwinMoE, большой модели зрения с энкодером и структурой MoE, производительность PIT оценивалась на A100 с использованием точности float16. Для визуальных трансформеров входные изображения в одном пакете масштабировались до одинакового разрешения, чтобы обеспечить одинаковую длину последовательности. В экспериментах мы сравнили сквозную задержку инференса и использование памяти Swin-MoE при разных размерах пакета и количестве экспертов. MegaBlocks превосходит другие базовые методы, выполняя всех экспертов одновременно, эффективно используя разреженные ядра для избежания вычислительных потерь. PIT дополнительно улучшает производительность за счёт поддержки перестановки данных при перемещении данных между уровнями памяти по сравнению с MegaBlocks.
Сквозная задержка и объём памяти SwinMoE на A100
По сравнению с PyTorch, PyTorchS, Tutel, DeepSpeed и MegaBlocks, PIT достиг ускорения в 1.5x ∼ 6.3x, 1.5x ∼ 2.9x, 1.1x ∼ 1.8x, 1.2x ∼ 1.6x и 1.1x ∼ 1.4x соответственно. Прирост производительности PIT на Swin-MoE меньше, чем на Switch Transformer, так как Swin-MoE имеет значительно меньше экспертов, чем Switch Transformer. Поэтому при увеличении числа экспертов с 8 до 32 слой MoE вносит только 23.6% ~ 61.2% сквозной задержки. При сравнении задержки только слоя MoE, PIT примерно в 1.2x ∼ 1.7x быстрее MegaBlocks. Вот сводные данные сравнения для PIT:

Наконец, давайте обсудим необходимую аппаратную поддержку для ускорения.
GPU
NVIDIA A100
A100 использует новую архитектуру Ampere, имеет до 6912 ядер CUDA и 40 ГБ высокоскоростной памяти HBM2. Он также поддерживает технологию NVLink второго поколения, обеспечивающую быструю связь GPU с GPU и ускоряющую обучение больших моделей. A100 представляет мощные новые тензорные ядра третьего поколения с полной поддержкой типов данных DL и HPC, а также новые возможности разреженности для дальнейшего удвоения пропускной способности. Операции TF32 Tensor Core в A100 обеспечивают простой путь для ускорения данных FP32 ввода/вывода в DL-фреймворках и HPC, работая в 10 раз быстрее, чем операции FP32 FMA на V100, или в 20 раз быстрее в случае разреженности. Для смешанной точности FP16/FP32 производительность A100 в 2.5 раза выше, чем у V100, и увеличивается до 5 раз при использовании разреженности. При запуске AI-моделей с фреймворком PyTorch по сравнению с предыдущим поколением V100, A100 показывает шестикратное улучшение производительности при обучении BERT и семикратное улучшение при инференсе BERT.
Intel Max Series GPU
Согласно [18], недавние реализации двух операций с разреженными матрицами на GPU NVIDIA V100 показали прирост производительности до 10 раз по сравнению с эталонной реализацией на V100.
Заключение
Таким образом, можно сделать три вывода относительно ускорения инференса LLM с помощью разреженности:
- Разреженность весов (50%), разреженность активаций (90%) и разреженность MOE (например, Mistral 8x7B с 75% динамической разреженности) являются ортогональными факторами (эффекты могут накапливаться, но производительность модели может пострадать). В сочетании с эффектом ускорения в 2–3 раза от компилятора PIT на разреженных моделях, по сравнению с современными основными фреймворками инференса (TGI/vLLM и др.), теоретический предел ускорения составляет 5–30 раз.
- Задержка является основным фокусом современных методов разреженности (разреженность имеет определённую эффективность; чем больше размер пакета, тем хуже эффект разреженности). Направление пропускной способности станет новым направлением оптимизации, поскольку разреженность активаций демонстрирует определённое степенное распределение, что даёт значительный потенциал для инженерной оптимизации.
- Преобразование не-ReLU активаций в ReLU активации в LLM требует относительно низких затрат (около 3% затрат на дообучение; качество данных относительно важно). Кроме того, обучение предикторов в DejaVu требует меньших затрат (быстрое обучение и не зависит от данных). В сочетании со снижением затрат за счёт увеличения скорости инференса, это инициатива с высокой окупаемостью и коммерчески жизнеспособна.
Справочные статьи
[11] Pit: Optimization of dynamic sparse deep learning models via permutation invariant transformation
[18] Performance Optimization of Deep Learning Sparse Matrix Kernels on Intel Max Series GPU
novita.ai предоставляет API Stable Diffusion и сотни быстрых и дешёвых API для генерации AI-изображений с 10 000 моделей. 🎯 Самая быстрая генерация всего за 2 секунды, оплата по мере использования, минимум $0.0015 за каждое стандартное изображение. Вы можете добавлять свои собственные модели и избежать обслуживания GPU. Бесплатно делитесь расширениями с открытым исходным кодом.
Рекомендуем к прочтению: Unveiling LLM-Pruner Techniques: Doubling Inference Speed
