в течение 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 не очень длинным контекстом.
Ряд современных подходов использует дистилляцию для обучения дифференцируемых параметров. 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 или среднего поля, скажем)?
Спасибо за статью, довольно интересный результат!
Пара замечаний по содержанию:
в течение 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, то есть минимизируемый функционал
.
Матожидание по
уже стоит по факту перед логарифмом в 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 или среднего поля, скажем)?