Мне кажется по одному примеру еще более странно делать выводы про общее качество модели, тем более, что QwQ позицинируется как сильный компактный ризонер для решения задач по математике/логике/коду, требующих цепочек рассуждений. Никто и не обещал, что модель будет состязаться с DeepSeek-R1 в world knowledge, storytelling.
Полагаю, что в задачах, где требуется знание фактов, размер более принципиален, чем в построении логических цепочек.
А общий посыл статье верен - каждую модель надо оценивать соответственно целевому применению, и академические бенчмарки не очень показательны.
Еще пара примечаний по поводу памяти, требуемой для запуска моделей:
DeepSeek-R1 залит в специфичном fp8 формате и на картах более нового поколения (от Hopper/Lovelace) будет требовать ~650 Гигов
QwQ в половинной точности будет весить в районе 64 гигов VRAM, что далеко не пользовательский ПК. Но 4-битной квантизацией можно гонять на 3090 c не очень длинным контекстом.
Ряд современных подходов использует дистилляцию для обучения дифференцируемых параметров. AQLM и QuIP# оптимизируют L2 лосс между выходами исходной float модели и квантизованной после каждого блока трансформера, а затем минимизируют кросс-энтропию/kl-дивергенцию между выходами квантизованной модели и исходной. Довольно неплохо накидывает в качестве, и при этом сравнительно дешево. В этих подходах - векторная квантизация, когда квантуются веса не поодиночке, а группами (обычно по 8 подряд идущих весов).
В более классических подходах, рассмотренных в статье, можно обучать скейлы квантизации (своеобразный PEFT). И еще layernorm-ы, biasы, входные эмбеддинги и голова модели обычно держат в исходной точности.
А вы используете какие-то кастомные ядра, типа 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 - дистилляцию
Справедливости ради надо заметить, они с обучались дистилляцией с учителем, и разницу может делать именно этот факт.
А вообще, кажется что оптимальная архитектура бы брала лушчее из двух миров - свертки с сильным 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 или среднего поля, скажем)?
спасибо, про Poolformer не видел статью. Правда, навскидку сравнивая перформанс Poolformer и Swin на ImageNet, кажется, что Swin эффективне выходит (именно Swin а не Swin-Mixer). Про ResNet читал статью - действительно процедура обучения решает многое, и к моменту массового использования ViT у исследователей был большой опыт в подборе сильных процедур обучения. Но все же кажется, что если ViT-ы смогли составить сходу конкуренцию давно развиваемым сверточным сетям, то у них еще большой потенциал для дальнейшего развития.
Мне кажется по одному примеру еще более странно делать выводы про общее качество модели, тем более, что QwQ позицинируется как сильный компактный ризонер для решения задач по математике/логике/коду, требующих цепочек рассуждений. Никто и не обещал, что модель будет состязаться с DeepSeek-R1 в world knowledge, storytelling.
Полагаю, что в задачах, где требуется знание фактов, размер более принципиален, чем в построении логических цепочек.
А общий посыл статье верен - каждую модель надо оценивать соответственно целевому применению, и академические бенчмарки не очень показательны.
Еще пара примечаний по поводу памяти, требуемой для запуска моделей:
DeepSeek-R1 залит в специфичном fp8 формате и на картах более нового поколения (от Hopper/Lovelace) будет требовать ~650 Гигов
QwQ в половинной точности будет весить в районе 64 гигов VRAM, что далеко не пользовательский ПК. Но 4-битной квантизацией можно гонять на 3090 c не очень длинным контекстом.
Спасибо за интересную статью, захотелось сразу заботать наконец RL.
Кажется, что KL дивергенция должна быть вне знака матожидания в разделе про DPO, то есть минимизируемый функционал
.
Матожидание по
уже стоит по факту перед логарифмом в 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, то они выйдут круче обоих моделей.
Справедливости ради надо заметить, они с обучались дистилляцией с учителем, и разницу может делать именно этот факт.
А вообще, кажется что оптимальная архитектура бы брала лушчее из двух миров - свертки с сильным 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 или среднего поля, скажем)?
спасибо, про Poolformer не видел статью. Правда, навскидку сравнивая перформанс Poolformer и Swin на ImageNet, кажется, что Swin эффективне выходит (именно Swin а не Swin-Mixer). Про ResNet читал статью - действительно процедура обучения решает многое, и к моменту массового использования ViT у исследователей был большой опыт в подборе сильных процедур обучения. Но все же кажется, что если ViT-ы смогли составить сходу конкуренцию давно развиваемым сверточным сетям, то у них еще большой потенциал для дальнейшего развития.