Как стать автором
Обновить
25
0
Денис Кузнеделев @19blackadder97

Сжимаю нейросети я ради забавы

Отправить сообщение

Спасибо за статью, довольно интересный результат!

Пара замечаний по содержанию:

  • в течение 200.000 эпох - по всей видимости, имело в виду шагов обучения (если только обучающая выборка не совсем крошечная). Иначе не представляю, как можно даже для маленькой GPT-2 прогнать столько итераций за 12 часов на 1 A100.

  • На рисунке с 4-мя графиками (Давайте разберем получившиеся графики по одному. ) на графике (a) в легенде оба графика зеленые. Наверное, предполагалось, что сплошные графики отвечают оригинальной модели, а пунктирные - грокнутой. Зеленый цвет - train по всей видимости, а синий - test.

Мне кажется по одному примеру еще более странно делать выводы про общее качество модели, тем более, что QwQ позицинируется как сильный компактный ризонер для решения задач по математике/логике/коду, требующих цепочек рассуждений. Никто и не обещал, что модель будет состязаться с DeepSeek-R1 в world knowledge, storytelling.

Полагаю, что в задачах, где требуется знание фактов, размер более принципиален, чем в построении логических цепочек.

А общий посыл статье верен - каждую модель надо оценивать соответственно целевому применению, и академические бенчмарки не очень показательны.

Еще пара примечаний по поводу памяти, требуемой для запуска моделей:

  • DeepSeek-R1 залит в специфичном fp8 формате и на картах более нового поколения (от Hopper/Lovelace) будет требовать ~650 Гигов

  • QwQ в половинной точности будет весить в районе 64 гигов VRAM, что далеко не пользовательский ПК. Но 4-битной квантизацией можно гонять на 3090 c не очень длинным контекстом.

Спасибо за интересную статью, захотелось сразу заботать наконец RL.

Кажется, что KL дивергенция должна быть вне знака матожидания в разделе про DPO, то есть минимизируемый функционал \mathbb{E}_{\pi_{\theta}(s|a)} \Vert r_{\psi}(s|a) \Vert - \beta KL (\pi_{\theta}(s|a) | \pi_{SFT}(s|a)).

Матожидание по (\pi_{\theta}(s|a) уже стоит по факту перед логарифмом в KL-дивергенции.

проблема есть - поиск оптимальной подсети, даже для одного линейного слоя - NP-сложная задача

Ряд современных подходов использует дистилляцию для обучения дифференцируемых параметров. AQLM и QuIP# оптимизируют L2 лосс между выходами исходной float модели и квантизованной после каждого блока трансформера, а затем минимизируют кросс-энтропию/kl-дивергенцию между выходами квантизованной модели и исходной. Довольно неплохо накидывает в качестве, и при этом сравнительно дешево. В этих подходах - векторная квантизация, когда квантуются веса не поодиночке, а группами (обычно по 8 подряд идущих весов).

В более классических подходах, рассмотренных в статье, можно обучать скейлы квантизации (своеобразный PEFT). И еще layernorm-ы, biasы, входные эмбеддинги и голова модели обычно держат в исходной точности.

Спасибо за статью - довольно подробный и интересный разбор с описанием функционала различной сложности.

В плане производительности существует ряд других альтернатив с быстрым препроцессингом изображений:

  • FFCV

  • DALI Интересно было бы видеть сравнение kornia c данными библиотеками. Правда, функционал kornia значительно шире, чем у приведенных альтернатив.

А вы используете какие-то кастомные ядра, типа Sputnik, SparTA, или nmSparse? Произвольный паттерн прореживания ускоряется не очень хорошо. 2:4 sparsity можно ускорить на Nvidia GPU, начиная с Ampere, но там ускорение порядка 20-30% обычно.

Большие языковые модели дают новое дыхание прунингу, так как многие вычисления memory, а не compute bound, за счет меньшего количества операций с памятью.

Структурированный прунинг дает действительно ускорение почти автоматически, но сжимать целые каналы и размерности обычно куда тяжелее. 30-40% ускорения при сохранении качества не реальной задаче - это хороший результат, и требует обычно серьезного дообучения.

В разделе, посвященном первой статье, возникает где-то посередине картинка (блок-схема) с комментариямии на английском. Это не фича, а баг, в редактируемой версии ее просто не существует.

Однако есть такой момент, что загружаемые модели по сути обертка над pickle, который в свою очередь может исполнять любой код, начиная от рикроллинга до более серьезных пакостей.

У знаменитого AI блогера Янника Килхера есть про это даже видео.

Здесь неплохой туториал по эффективному по времени и памяти. Рассказывается про стандарнтый способы уменьшить расход памяти - переход в half precision, gradient checkpointing, gradient accumulation и т.д.

Спасибо за статью. Есть пара вопросов.

А вы проводили ablation study? Типа что будет, если убирать по отдельности CE1, CE2, CE3, CE4?

Мне кажется, что конкатенация трех эмбеддингов возможно грубоватый метод. Можно было бы попробовать что-нибудь в духе Perceiver - иметь изначально какие-то обученные токены, и делать cross-attetion между этими токенами и эмбеддингами картинки и текста, а затем уже поверх них ставить ArcFace.

Да, похоже , пространство параметров в архитектурах еще мало исследовано. Здесь, правда замечу, что разница все же не так велика в производительности Swin и их ConvNext, более того, если сравнивать с XCiT, то они выйдут круче обоих моделей.

Стрелочка вверх означает разрешение 384x384, а \Ipsilon - дистилляцию
Стрелочка вверх означает разрешение 384x384, а \Ipsilon - дистилляцию

Справедливости ради надо заметить, они с обучались дистилляцией с учителем, и разницу может делать именно этот факт.

А вообще, кажется что оптимальная архитектура бы брала лушчее из двух миров - свертки с сильным inductive bias и attention со свойством улавливания глобального контекста.

Справедливо, спасибо за замечание. Похоже, что реальная польза будет в массовых применениях, если каким-то образом железо на моблильных устройствах сможет поддерживать и эффективно обрабатывать разреженные тензоры.

Спасибо! Кажется, где-то мелькало мимо меня, но пристально не изучал. Стоит присмотреться)

Я бы сказал, что религия была лишь видимой причиной и оправданием Гугенотских войн, да и вообще всех конфликтов католиков и протестантов в Новое время. Протестантизм появился в это время, не потому, что всех достали католики и роскошь в образе жизни каноников, а как конфликт буржуазии (чьи доходы и имущество были получены за счет торговли) с родовой Средневековой аристократией.

В целом да, выигрыш от использования прунинга обычно не так велик, как можно было бы наивно думать.

Но все же можно добиться заметной пользы. Есть стартап neural magic и для некоторых моделей они добиваются серьезного ускорения за счет прунинга + квантования. На классификации и детекции ускорение серьезное (если верить цифрам).

Идея сделать предобучение, как BERT, выглядит естественно, но вот главный вопрос был в том к поставить задачу, чтобы представить картинку как слово. Авторы BeiT придумали хорошее решение с подачей патчей в дискретный автоэнкодер, и, как я понял, их решение достаточно быстро файнтьюнится на ImageNet и сегментации. Работает даже немного лучше, чем DINO, судя по табличкам в их статье.

Еще есть свежий результат в этом направлении - Masked Autoencoders Are Scalable Vision Learners. Тут авторы маскируют большой процент (75% токенов) прогоняют через энкодер незамаскированные патчи и декодером восстанавливают картинку на предобучении. На файнтьюнинге используется только энкодер со всей (незамаксированной картинкой).

Ух, куда же я смотрел в этот момент) Действительно, EfficientNet выходит круче. Интересно, что в плане throughput таблица наиболее выигрышная для них, хотя, казалось бы, что он должен напрямую зависеть от FLOPs.

С квантизацией не доводилось особо работать. Могу предположить, что причина падения качества - более резкие оптимумы по сравнению с сверточными сетями (большая кривизна босс-поверхности). Вероятно, если брать модели, обученные с помощью SAM, они будут лучше квантоваться. Возможно ли дообучение квантованных моделей в низкой точности?

По личному опыту еще могу сказать, что visual transformer плохо прунится. Если ResNet можно запрунить без потери качества достаточно сильно, EfficientNet и NFNet не так хорошо, в силу их оптимизированности, до 70-80% обычно качество не проседает, а при небольшом прореживании качество слегка растет даже на валидации, то для ViT (DeiT, Swin) я наблюдал монотонное ухудшение качества и модель c 50% весов уже теряет пару процентов на ImageNet.

Очень познавательно! Действительно, интересные работы. Кажется, что практика сильно убежала вперед теории. Интересно, смогут ли когда нибудь теоретики приблизиться к сколько либо точному предсказанию поведения нейронной сети на реальном датасете при условиях, близких к реальным нейронным сетям (то есть не в пределе NTK или среднего поля, скажем)?

1

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность