tgoop.com/quant_prune_distill/283
Last Update:
Accelerating Neural Network Training with Semi-Structured (2:4) Sparsity
[Блог]
Торч недавно выкатил блог, где показывает, что 2:4 sparsity паттерн может быть полезен не только для инференса, но и на стадии обучения модели.
Напомню, что 2:4 sparsity - это когда из 4 подряд идущих весов 2-нулевые. Начиная с Ampere нвидиевские GPU имеют поддержку такого формата. Веса хранятся в виде сжатого вдвое тензора и еще есть тензор индексов элементов.
Ранее было показано, что такой паттерн выдает ускорение 10-30% по сравнению с fp16 на инференсе, но чтобы добиться эффективного обучения необходимо учесть еще ряд нюансов.
Обучение с фиксированной маской работает не очень, и нужно ее обновлять по ходу дела чтобы не просесть по качеству. Наивный kernel слишком медленный и по порядку величины близок к времени forward пасса. И заслуга авторов в разработке эффективной процедуры прореживания.
1️⃣ На обратном проходе при подсчете градиента участвует не W, W.T, которая вообще говоря не 2:4. Авторы ограничивают паттерн прореживания так, что 2:4 паттерн имеет место как для W, так и для W.T (прореживая блоки 4x4). Еще есть нюанс в том, что на уровне железа реализовано умножение sparse матриц на dense, но не наоборот. Потому предлагается считать транспонированное умножение, а затем его транспонировать. В cuSPARSELt есть опция выбирать индексирование в памяти как по колонкам, так и по столбцам, что позволяет иметь непрерывное расположение элементов в обоих случаях.
2️⃣ Потоки CUDA считывают за раз по 128 байт, и чтобы отпимизировать операции чтения/записи каждый поток берет на себя по 4 блока 4x4 (4x4x4x2 (fp16) = 128 байт).
3️⃣ if/else операции, когда разные потоки в группе (warp) попадают в разные условные ветви - работают сильно неэффективно на GPU. Используется sorting network для определения важных/неважных элементов без условных операторов.
4️⃣ Сжатые матрицы и метаданные (индексы ненулевых элементов) хранятся в column-major для оптимизации операций записи.
Эксперименты
Обучают DINOv2 (ViT-L) c разными пропорциями sparse/dense обучения. Сначала идет sparse обучение, а затем dense. Для оценки качества смотрят на точность лог-регрессии на ImageNet-1k поверх признаков обученной модели.
Обучение в sparse режиме на протяжении 40-70% обучения не просаживается по качеству по сути по сравнению с dense обучением.
Всегда sparse - теряет полпроцента качества.
Ускорение времени обучения при 70% sparse обучения порядка 6% (на А100).
Вывод
2:4 паттерн не дает какого-то впечатляющего ускорения, но может слегка повысить эффективность. Интересно 🤔, насколько полученные результаты масштабируются на LLMки с миллиардами параметров. Будет ли выигрыш от 2:4 компенсироваться более медленной сходимостью?
BY КПД
Share with your friend now:
tgoop.com/quant_prune_distill/283