За последние месяцы я протестировал кучу локальных LLM, которые может потянуть моя техника и пришёл к выводу, который для многих уже очевиден: для задач на кодинг альтернатив моделям Qwen особо нет. Поэтому я решил удалить с диска все лишние модели, чтобы оставить только "рабочих лошадок".

В этот момент мне на глаза попалось видео c tier-list, в котором я узнал много знакомых моделей.

Gemma дура, Qwen — молодец.
Gemma дура, Qwen — молодец.

Но один момент меня удивил: RIDGE версия Qwen3.8-27B была записана в D-tier, а GSQ-RCO — в A-list, хотя мой субъективный опыт был диаметрально противоположным. RIDGE у меня была даже отмечена как "favorite model" для линейки Qwen3.8, в то время, как от GSQ-RCO мне не удалось с первой попытки добиться результата в стандартных тестах.

И тут я понял, что пришла пора эти тесты заменить.

Всё это время я тестировал модели двумя промптами от Ютубера: симулятор песка и dungeon-crawler. Оба они проверяют алгоритмические навыки LLM, занимают ~10-15 минут на генерацию и меньше минуты на "прокликивание" для проверки выполнения всех пунктов ТЗ.

Симулятор песка и воды в JS
Симулятор песка и воды в JS
Dungeon Crawler в JS
Dungeon Crawler в JS

В общем, для знакомства с моделями они подходят хорошо, но на этапе систематического тестирования нужно что-то, не требующее моего ручного вмешательства. Плюс большинство ютуберских тестов, что я видел, заточены под front-end, game-dev и работу с MCP, в то время, как моя предметная область — анализ данных, машинное обучение и прочий Data Science.

Поэтому мой выбор пал на DS1000 — бенчмарк, представленный на ICML 2023, и покрывающий ровно эти задачи.

DS1000: а судьи кто?

Датасет для бенчмарка собран из вопросов на StackOverflow по 7 библиотекам, связанным с DS (+ кол-во задач в датасете):

  • Pandas - 291

  • NumPy - 220

  • SciPy - 106

  • Sklearn - 115

  • Matplotlib - 155

  • PyTorch - 68

  • Tensorflow - 45

Для борьбы с "зубрёжкой", помимо оригинальных задач авторы добавили аугментации (назвав их perturbations), полученные следующими способами:

  • Surface — изменение формулировки без изменения кода ответа. Например, простой пересказ вопроса другими словами.

  • Semantic — изменение задачи, которую нужно решить. Например, в задаче на добавление колонки в pandas, попросить экспонировать значение исходной колонки, вместо инвертирования.

  • Difficult Rewrite — усложнение задачи. Например, объединив предыдущие две аугментации или задав дополнительный вопрос к уже имеющемуся.

Т.е. из 291 задачи на pandas из SO были взяты только 100, а остальные получены аугментацией. Из всех трёх её способов, Difficult Rewrite сильнее всего просаживал % правильных ответов: Codex002 из статьи потерял 33 п.п. (47,8% -> 14,8%) по сравнении с оригинальным вопросом с SO.

Модель оценивалась просто: сгенерированный ею код подставлялся в шаблон и выполнялся, а результат сравнивался с эталонным. С остальными деталями бенчмарка можно ознакомиться на его странице.

Сетап

Агентские задачи на кодинг я решаю но своём ПеКа с RTX 4070 Ti Super (16 Gb VRAM) + 32 Gb DDR5 RAM. Рантайм в llama.cpp.

Для контекстного окна я выбрал 64k. Во-первых, в Data Science кода не так много, как в классическом software development. Во-вторых, по словам Matt Pocock контекст начинает протухать уже после ~ 140k, поэтому больше 124k я в принципе не рассматриваю. В-третьих, я пока не определился с режимом для использования локальной LLM (агентский vs Ralph loops), поэтому хотелось иметь небольшой запас для первого, но быть готовым к режиму экономии токенов для второго. Особенно с учётом того, что в моих дальнейших планах работа с локальными LLM с диапазоном весов 2-7B.

Над процедурой первого прогона я задумываться не стал: просто закинул в агента ссылку на репозиторий бенчмарка с промптом "прогони это локально на модели %LLM-NAME%. Весь процесс у меня занял 11,7 GPU-часов. По-хорошему, его можно было бы значительно сократить, убрав из теста библиотеки, которыми я не пользуюсь (Pandas, Tensorflow, Matplotlib), т.к. тот же Pandas занял 36,1% всего времени. Но привычка сначала запустить и случае успеха разбираться, никуда не делась. Тем более, что библиотеки эти весьма популярные, поэтому для первого подхода к снаряду решил их оставить.

Результаты

По количеству решённых задач первое место разделили REAP20-28B и 35B-A3B. Этот результат можно считать с одной стороны закономерным, т.к. технология REAP (Router-weighted Expert Activation Pruning, arxiv) как раз и подразумевает сохранение способностей модели при сокращении весов, а с другой стороны — удивительным, т.к. в кои-то веки подобная магия из теория совпадала с практикой? Цифра 20 в названии модели указывает на то, что в ней были удалены 20% весов.

Третьей моделью, обошедшей бенчмарк Codex-002 в 38.8% оказалась та самая GSQ-RCO, с которой мне тяжело было найти общий язык. Т.е. tier-list, с которого всё началось, оказался адекватным.

Процент правильных ответах на полном наборе задач DS1000
Процент правильных ответах на полном наборе задач DS1000

Результаты скорости генерации тоже подтвердили теоретические предпосылки технологии REAP: при идентичной точности, укороченная версия оказалась на 42% быстрее исходной модели (при том, что из неё удалено 20% весов).

MoE — наше бедняцкое всё.
MoE — наше бедняцкое всё.

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

Токен экономика должна быть экономной
Токен экономика должна быть экономной

На следующем графике можно посмотреть разбивку % решённых задач по библиотекам. Наиболее простым почти для всех моделей оказался бесполезный для меня Matplotlib, в то время как в самой ходовой библиотеке — Sklearn — даже лидирующие модели не смогли решить половины задач. Чем это можно объяснить с учётом даты выхода бенчмарка — я не знаю. Видимо нужно будет плотно заняться этим вопросом, погоняв другие бенчмарки и посмотрев на корреляцию результатов.

Как графики рисовать, так все мастера.
Как графики рисовать, так все мастера.

Основной инсайт первого подхода для меня заключался в том, что LLM может работать в 2 смены (а я — нет):

  • В "дневную смену", когда я тоже работаю вместе с моделью, мне приоритетнее скорость, т.к. задачи в Data Science весьма итеративные и чем быстрее получаешь результаты экспериментов, тем лучше.

  • В "ночную смену", когда я сплю, мне приоритетно лишь количество и качество сна. Поэтому LLM может неспешно и вдумчиво выполнять что-то, не требующее моей постоянной вовлечённости, например code review. Т.е. для этого режима работы точность модели берёт приоритет над скоростью.

Данная схема неплохо ложится на другое вид разделения LLM:

  • Dense models — базовая полносвязная модель. При 27B параметров в 16Gb VRAM влезает редко и с трудом.

  • Mixture of Experts (MoE) — модификация, позволяющая разделить веса между VRAM и RAM, значительно ускорив процесс инференса.

Т.е. для совместной работы в дневную смену можно использовать MoE, а на ночь ставить dense модели. В идеале — из разных "семейств", дабы избежать непотизма и кумовства на code review. Это не шутка.

С учётом того, что в важных для меня библиотеках (Numpy и Sklearn) "урезанная версия" MoE Qwen3.6 превосходит, а в Scipy и Pytorch незначительно отстаёт, то кандидатом №1 в "дневную смену" меня оказалась REAP20-28B. Хитроумное же квантование Qwen3.8-27B, занявшее везде почётное третье место, имеет смысл погонять в "ночную смену". Ridge IQ2_M и Qwen3-Coder-30B по итогам данного тестирования я удалил, т.к. SSD у меня не резиновый и данный исход был одной из целей эксперимента.

Вот на этом я и планировал закончить данный текст.

Но один момент мне никак не давал покоя. А именно: превосходство Qwen3.6 над Qwen3.8 в точности. Результаты для Numpy, Sklearn и Pytorch смотрятся совсем жалко. Особенно с учётом того, что бенчмарк не первой свежести и имел все шансы просочиться в обучающие данные для последних моделей. В общем, если бы мне подобные результаты предъявил незнакомец из интернетов, поверить им было бы сложновато. Поэтому я решил немножко углубиться в вопрос.

А если подумать?

Самым очевидным параметром для изменения было включение 'thinking' mode. В первом эксперименте он был выключен, т.к. там хотелось "просто посмотреть" на результаты, причём поскорее. После их получения данное изменение было очевидным no brainer.

У REAP, 35B-A3B и 3.6-27B этот выбор является бинарным (on/off), для остальных моделей, поддерживающих градации усилий, был выбран 'medium', т.к. задачки в бенчмарке ходовые, а не олимпиадные, поэтому должны решаться моделью в "штатном" режиме.

Т.к. размышления очевидным образом удлиняют время ответа (что критично для "дневной смены"), решил немного скомпенсировать этот момент включением MTP для всех моделей, которые этот режим поддерживают и имели соответствующие "головы". У обеих MoE версий Qwen3.6 их не оказалось, но с ними мне всё было и так понятно, поэтому решил не заморачиваться и запустил их без спекулятивного декодинга.

Ещё одним способом сэкономить время было ограничение на выбор библиотек для прогона тестирования. Т.к. для моих задач критически важными являются Numpy, Scipy, Sklearn и Pytorch, то я оставил только их, сократив число задач почти в 2 раза (с 1000 до 509).

Параметром, над которым я напрасно поленился подумать, оказался лимит токенов на рассуждения. Посмотрев на среднее количество токенов на задачу я решил, что в 4096 токенах достаточно места для рассуждений. Это, как видно из результатов, оказалось большой ошибкой.

Результаты

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

Сомнительно, но...
Сомнительно, но...

... только для dense версии Qwen3.6. Скачок на 35 п.п. — это очень приятно. Но для меня бесполезно, т.к. даже MoE версия той же модели решила столько же задач вообще без размышлений и намного быстрее. Не говоря уже о результатах REAP20.

Если же говорить о них, то следующий шок — просадка REAP версии MoE Qwen3.6 более, чем в 2 раза. В то время как полная версия просела меньше, чем на 2 п.п. Ну и виновница торжества, Qwen3.8-27B, потеряла значительно меньше процентных пунктов, но это не повод для радости, т.к. данный прогон был затеян в первую очередь исходя из предположения об улучшении её результатов.

Что же привело к таким странным результатам?

Судя по всему, комбо из лени и жадности. Гуглить о том, как сильно "размышления" раздувают контекст и подумать над результатами я поленился, а повысить размер лимита на размышления до максимума — пожадничал.

В итоге, как мы видим на следующем графике, REAP в 2/3 случаев тупо отвалился из-за достижения лимита на длину рассуждений. Т.е. 19% правильных решений вызваны тем, что модели просто не дали додумать мысль до конца. Более того, там, где ей удалось это сделать, она решила 26 задач, которые не осилила в первом эксперименте. Что, в общем-то, не дисквалифицирует её с позиции основного кандидата в "дневную смену".

Доля finish_reason=length. Для 3.8 xhigh это первый прогон итерации 3, до продолжений.

% задач, которые не уложились в лимит max_tokens=4096
% задач, которые не уложились в лимит max_tokens=4096

Что касается "ночной смены", то по итогам этой итерации в лидеры выбился Qwen3.6-27B thinking=medium с 51% правильных ответов. Из семейства Qwen3.8 наилучший результат показала версия от GSQ-RCO с 37,9%. Базовая модель с thinking=medium оказалась ниже, но скорее по моей вине: из-за того, что я пожадничал с лимитом на размышления (max_tokens=4096 токенов), она не успела "дорешать" 36,9% задач.

Поэтому мне показалось справедливым исправить этот косяк и подойти к снаряду в 3-й раз, оставив только Qwen3.8-27B в режиме thinking='xhigh' c увеличенным контекстом на рассуждения. По слухам именно в этом режиме данная модель "раскрывается", как молочный улун при проливах в прогретой посуде с температурой воды 80–85°C.

А если хорошо подумать?

Хотите верьте, хотите нет, но в этой попытке исправить свою ошибку, вызванную ленью подумать и жадностью на токены, я ещё больше усугубил проблему. Задним умом теперь я понимаю, что стоило поступить согласно пословице "семь раз отмерь, один отрежь" и выставить лимит на рассуждения в 7/8 от контекстного окна. Но я почему-то решил поступить иначе, итеративно увеличивая лимит токенов на размышление.

Знал бы прикуп, постелил бы соломку.
Знал бы прикуп, постелил бы соломку.

То, что второй прогон с включённым thinking занял почти в 10 раз больше времени (107 часов против 12), меня ничему не научило. Поэтому манёвр, предпринятый в третьем прогоне обошёлся мне ещё дороже: в 153 часа. И это ещё с учётом того, что llama.cpp позволяла продолжать рассуждения в ответах, упёршихся в лимит на рассуждения, прямо с того же момента, не генерируя ответ заново. Без данной фукнции мой кривой дизайн считался бы неделями.

Конечно, можно было бы не позориться и умолчать об этом, но что сделано, то сделано и остаётся лишь извлечь из этого какой-нибудь урок.

Первый прогон с потолком 4096 дал 173/509 правильных ответах при 188 упёршихся в лимит размышлений. Дальше я итеративно поднимал этот порог удваиванием. На графике ниже присутствуют 2 странные подписи: "22 задачи" и "38 задач". Они означают, что в какой-то момент мне надоело и вместо очередного увеличения лимита я попросил модель сначала взяться за 22 задачи, которые не смогла решить ни одна модель. Из них была решена лишь одна (Numpy 325). "38 задач" — это очередной сабсет из задач, не решённых на предыдущих шагах.

Счёт на всех 509 после каждого шага можно увидеть на графике.

Более странного графика я придумать не мог
Более странного графика я придумать не мог

Чистый прирост от 173 к 252, т.е. 79 задач. Две отметки, 233 и 252, сдвигаются на единицу туда-сюда из-за задачу Numpy №325: один и тот же код в 133 символа то проходил тест, то нет. Новых решений в этих двух шагах не было.

Ещё одним уроком для меня стало двухкратное падение скорости по мере роста лимита на размышления. Судя по всему это объясняется ростом префилла но тут уже я вникать не стал, т.к. в будущем подобное повторять не планирую.

Мы жили бедно, а потом нас обокрали.
Мы жили бедно, а потом нас обокрали.

Если посмотреть прирост правильных ответов в разбивке по библиотекам, то видно, что thinking=medium практически идентичен thinking=off и весь прирост получен только за счёт максимально интенсивных рассуждений.

Думать нужно или очень хорошо или никак.
Думать нужно или очень хорошо или никак.

Стоило ли оно того?

Задним умом могу ответить твёрдо и чётко: нет. 150 часов ради того, чтобы получить точность на уровне Qwen3.6-MoE без thinking. Про разницу во времени и говорить нечего.

В общем, данная итерация отбила у меня всякое желание продолжать защиту чести семейства Qwen3.8 и я попросил знакомого запустить DS1000 целиком у себя на Nvidia RTX 6000 Pro с моделью Qwen3.8-Flash-Next-NVFP4.

Да. Но только тому, у кого есть RTX 6000 Pro
Да. Но только тому, у кого есть RTX 6000 Pro

Результат: 58,1% за 8,5 минут, т.е. уверенное первое место по точности и скорости. Что и требовалось доказать. Можно оправиться и разойтись.

Если бы к этому моменту я уже знал про Strata, то очевидным следующим шагом было бы переключиться на неё, т.к. она позволяет запустить ту самую модель Qwen3.8 в том числе и на игровых GPU.

Но про неё я узнал лишь пару недель назад, поэтому оставшееся время я прокрастинировал написание этого текста, подкидывая всё тот же сабсет из 509 задач в разные модели. Это занятие принесло мне ещё один любопытный результат.

"Размер имеет значение" (c), но "всё не так однозначно" (c).

Когда мне на глаза попалось семейство моделей Flint, я решил оптимизировать порядок тестирования. Я исходил из предположения о том, что увеличение кванта и включение режима размышлений должно приводить к улучшению результатов и поэтому после первого прогона с thinking=off решил для итерации с включённым мышлением отдавать не весь список задач, а только те, которые модель не смогла решить без размышлений.

Начал я с 2-битного кванта, т.к. он влезал целиком. Результат вышел средний (~39%), но скорость в ~130 ток/с приятно удивила, поэтому я решил продолжить тестировать разные кванты. В итоге я прогнал ещё один вариант Q2, а также Q3 и Q6. Результаты от этого улучшились (вплоть до 47% у Q6), но и скорость просела (до 80 ток/с у Q3 и 50 ток/с у Q6). Но удивило меня не это.

Моя предпосылка предполагала, что правильные ответы от кванта Q6 станут супермножеством для правильных ответов всех остальных квантов. Как минимум потому, что он в 2-3 раза больше их. Но не тут-то было:

Очень странные дела
Очень странные дела

Т.е. мы видим, что даже у Q2 есть в активе 32 задачи, которые не смогла осилить модель Q6. Не самые приятные результаты для тех, кому хочется сократить когнитивные затраты на выбор модели. Вооружившись этим знанием, остальные модели я стал "тупо" прогонять дважды на всём сабсете задач: сначала с thinking=off, а потом с thinking=on.

В результате появился следующий график:

Думать полезно
Думать полезно

~ 20% моделей ухудшили свои результаты после включения режима рассуждений. Пример Qwen3.6-MoE-REAP20 показал, что это может быть связано не с самим режимом, а с тем, что я пожадничал на лимиты для рассуждений. Но т.к. средний прирост точности от данного режима налицо, закапываться в причинах таких результатов я не стал.

GPT-OSS-20B

Эту "старушку" многие давно списали со счетов, включая сотрудников OpenAI. По крайней мере мой знакомый оттуда, не рекомендовал её мне для эксперимента, описанного в прошлом посте. Я её держу по одной простой причине: скорость. Что она и продемонстрировала в очередной раз в этом тесте: второе место по скорости и на 1 п.п. выше бездумного Qwen3.8-27B по точности.

Gemma MoE

Семейство моделей Gemma4 меня очень сильно разочаровало, когда я пытался найти ему применение на Macbook Air M2 24Gb. Главным образом по скорости генерации токенов, которую никак не удавалось поднять больше ~15 ток/с. Поэтому их версию MoE я запускал без особых ожиданий, просто для статистики. И оказался приятно удивлён соотношением скорости к точности. Также стоит отметить, что эта модель — "рекордсмен" по числу уникальных решённых задач, т.е. тех, что не смогла решить ни одна другая модель.

Окак!
Окак!

Nemotron 3.5 Bolt MoE

Главный сюрприз произошёл в самом конце, т.к. эту модель я запустил предпоследней. До этого с моделями от Nvidia сталкивался, но ничем примечательным они себя не проявили. А тут — MoE, поэтому решил попробовать. И не пожалел, т.к. до Qwen3.8-Flash-Next эта модель не дотянула всего 0.1 п.п. Скорость на моём железе, конечно, не блещет, но для "ночной смены" сойдёт. Тем более, что семейство отличается от дневного Qwen3.6-MoE-REAP20.

Qwen3.8-Brilliance xhigh

Последняя модель, которую я прогнал. Делать этого особо не планировал, но переобулся, когда увидел, что там есть вариант, основанный на GSQ-RCO. В дальнейших поисках наиболее быстрой версии Qwen3.8-27B я как раз планировал поближе рассмотреть эти модели, т.к. они успели неплохо показать себя в самом первом прогоне, а тут как раз зверь прибежал к ловцу. Поэтому третьему месту в общем зачёте по точности вкупе с более чем рабочей для "ночной смены" скоростью (~43 ток/с) я удивлён не был и со спокойной душой закончил эксперименты.

Итог

Финальные результаты всех моделей на сабсете из 509 задач можно посмотреть на графиках ниже. Мне к ним больше добавить особо нечего, т.к. прочие детали, включая ссылки на модели, можно посмотреть в моём репозитории.

Этой картинкой можно было бы заменить весь пост
Этой картинкой можно было бы заменить весь пост
"Семейство" моделей по цвету совпадает с предыдущей картинкой.
"Семейство" моделей по цвету совпадает с предыдущей картинкой.

Сокращённое имя модели

Имя модели на диске

% решённых задач thinking = off

% решённых задач thinking = on

средняя скорость tok/s

wall time thinking = off

wall time thinking = on

Qwen3.6-MoE-REAP20

Qwen3.6-28B-REAP20-A3B-Q4_K_M.gguf

53.8%

19.4%

99.8

12 мин

5.1 ч

Qwen3.6-MoE

Qwen3.6-35B-A3B-UD-Q4_K_M.gguf

51.1%

49.5%

72.1

15 мин

9.3 ч

Qwen3.8-GSQ-RCO

Qwen3.8-27B-GSQ-RCO-IQ3_S-mtp.gguf

37.9%

33.0%

15.4

43 мин

12.1 ч

Qwen3.8

Qwen3.8-27B-UD-Q4_K_M.gguf

28.1%

27.9%

10.5

1.6 ч

15.1 ч

Qwen3.8-xhigh

Qwen3.8-27B-UD-Q4_K_M.gguf

28.1%

49.5%

9.3

1.6 ч

152.6 ч

Qwen3.6

Qwen3.6-27B-UD-Q4_K_XL.gguf

16.5%

51.1%

10.8

1.6 ч

53.7 ч

Qwen3.8-Ridge

Qwen3.8-27B-Ridge-3.7bpw.gguf

13.6%

17.1%

27.2

36 мин

11.7 ч

Qwen3.8-Brilliance

Qwen3.8-27B-Turbo-Brilliance-50X-RI-GSQ-RCO-IQ3_S-mtp.gguf

36.3%

52.1%

43.4

23 мин

18.5 ч

Qwen3-Coder-MoE

Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf

9.8%

—

43.1

53 мин

—

GPT-OSS

gpt-oss-20b-Q8_0.gguf

29.1%

39.5%

153.2

9 мин

38 мин

Flint-IQ2_XXS

flint-UD-IQ2_XXS.gguf

—

38.7%

134.4

—

3.6 ч

Flint-Q2_K

flint-UD-Q2_K_XL.gguf

—

39.3%

133.8

—

3.1 ч

Flint-Q3_K

flint-UD-Q3_K_XL.gguf

—

45.2%

79.9

—

7.3 ч

Flint-Q6_K

flint-UD-Q6_K_XL.gguf

10.8%

47.0%

50.5

28 мин

8.2 ч

Gemma4-MoE

gemma-4-26B-A4B-it-UD-Q4_K_M.gguf

41.3%

35.2%

78.4

17 мин

9.2 ч

Saluki

Underdog-Saluki-27B-1.0-IQ2-mix.gguf

—

17.5%

56.0

—

2.0 ч

Tiel-Coder-MoE

Tiel-Coder-35B-A3B-MTP-UD-IQ3_S.gguf

29.7%

33.6%

137.2

6 мин

1.9 ч

Nemotron 3.5 Bolt MoE

NVIDIA-Nemotron-3.5-Bolt-74B-A9B-UD-Q3_K_XL.gguf

21.0%

58.0%

22.1

1.7 ч

14.4 ч

LFM2.5-MoE

LFM2.5-24B-A2B-UD-Q4_K_XL.gguf

9.4%

12.2%

182.4

10 мин

3.3 ч

Clover-MoE

Diffuspace-Clover-35B-A3B-Preview-Q4_K_M.gguf

13.6%

27.7%

69.2

19 мин

5.4 ч

Qwen2.5-Coder

Qwen2.5-Coder-7B-Instruct-Q8_0.gguf

0.2%

—

71.5

23 мин

—

Выводы

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

В практическом плане для собственной работы с LLM я попробую работать в "дневную смену" с выключенным thinking (у модели, не у меня), включая его на ночь, чтобы модель Code-Reviewer, могла сравнивать написанный код со спекой и тикетами, неспешно размышляя над увиденным.

С точки зрения конкретных моделей план пока такой:

  • "Дневная смена": Qwen3.6 MoE REAP20.

  • "Ночная смена": Nemotron

Если будут интересные результаты — отпишусь.

P.S. На вопрос "А не проще ли заплатить $ХХ за Cursor/Claude etc." отвечу парафразом Ольги Игоревны Бузовой: "Зачем платить, если можно не платить?"

UPD. Благодаря одному из комментариев понял, что недостаточно выпукло раскрыл тему Strata в следующих строках:

Если бы к этому моменту я уже знал про Strata, то очевидным следующим шагом было бы переключиться на неё, т.к. она позволяет запустить ту самую модель Qwen3.8 в том числе и на игровых GPU.

Исправляюсь. Я совершенно очевиднейшим образом планирую протестировать Strata Qwen3.8-Flash-Next Coder, т.к. видел многочисленные пруфы её скорости и качества, в том числе и тут. Просто не счёл её выход достаточным поводом для того, чтобы забросить черновик с описанием данных экспериментов на 80% готовности.

Комментарии (22)


  1. ToxaBes
    02.11.2026 13:08

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

    Там особо нечего разбираться, достаточно понимать 3 основных момента:

    1. Внутри модели разные слои вносят разный вклад в качество. Какие-то слои можно смело жать в Q2, какие-то не стоит сжимать ниже Q4.

    2. В современных методах квантования используют калибровочный датасет. На словах он мультиязычный, а на деле, зачастую, на каждые 100 примеров будет 90 на английском, 5 на китайском, 3 на арабском и 2 на русском. Такая калибровка хороша для тех кто общается с моделью на английском. Для сохранения качества общения и рассуждения модели на русском нужно собирать свой калибровочный датасет и калибровать. Ну или искать кто это уже сделал и выложил.

    3. Помимо квантования самой модели есть квантование KV-кеша в инференсе. И вот если там указать квантование K-части меньше FP8, то как бы удачно не была квантована сама модель, вы получите тупняк на среднем/большом контексте, в режиме рассуждения и периодическое зацикливание ответов.


    1. semenoffalex Автор
      02.11.2026 13:08

      Спасибо!

      Глянул строку запуска llama.cpp, там действительно k-часть КV-кэша сильно пожата. А я после экспериментов с TurboQuant как-то и не обратил на это внимания.
      C:\Users\user.unsloth\llama.cpp\build\bin\Release\llama-server.exe -m --alias -c 65536 --fit on -ctk q4_0 -ctv q4_0 --jinja --host 127.0.0.1 --port 8080 --reasoning off

      По поводу разного пожатия слоёв я в курсе. С учётом того, что у меня были кванты от Unsloth, которые вроде как умеют в это дело со своими UD, на эту часть я и не подумал.

      Что касается языка, то т.к. бенчмарк на английском, то тут бы я не стал волноваться.


    1. Rub_paul
      02.11.2026 13:08

      Я недавно игрался с GGUF-сборками, где разные тензоры пожаты с разным битрейтом, это реально дает лучший баланс между потреблением VRAM и качеством кода


      1. semenoffalex Автор
        02.11.2026 13:08

        Это ровно то, что делает упомянутая в тексте модификация GSQ-RCO.


  1. Syzd
    02.11.2026 13:08

    NVIDIA-Nemotron-3.5-Bolt-74B-A9B-UD-Q3_K_XL.gguf весит 36Гб? Как вы ее запустили на 16Гб видеокарточке?


    1. semenoffalex Автор
      02.11.2026 13:08

      Магия MoE =). Я это упоминал в тексте. В интернетах полно статей с деталями типа этой.


    1. Rub_paul
      02.11.2026 13:08

      Активные параметры весят около 9B, поэтому они спокойно влезают в 16 Гб VRAM


  1. Absamad
    02.11.2026 13:08

    Все эти модели обойдет квен 3.8 флеш Некст

    На вашем оборудовании можно запустить кодер модель, из которой вырезали половину экспертов

    С движком страта, это даст примерно 60 ток в сек, с контекстом 130к

    Цифры набросал ориентировочные

    Сам запускаю полноценную версию q3

    С 5080 + 64гб оперативки, даёт более 100 ток в сек

    Но если честно, в этом 0 смысла, если только не нужна версия без цензуры, или если есть запрет на облачные модели

    И.к. запуск кст электричество и уменьшает ресур железа, которое сейчас стоит недешево

    Поэтому проще купить даже подписку за 20 баксов на чат гпт и использовать их модели

    Причем это прям в разы выгоднее, если использовать условную луну

    У меня была задача, для которой нужно было обработать более триллиона токенов( по большей части на вход )

    Я посчитал, что на моем железе, это займет несколько лет

    А если использовать луну, то обойдется примерно в 1.5к баксов

    Если переводить их в лимит моей подписки за 200 баксов, то выйдет даже меньше недельного лимита

    Вот и думайте ...)


    1. semenoffalex Автор
      02.11.2026 13:08

      Все эти модели обойдет квен 3.8 флеш Некст

      Уже обошёл. За 8,5 минут. На RTX 6000 Pro. О чём и сказано в тексте.

      С движком страта, это даст примерно 60 ток в сек, с контекстом 130к

      Этот движок также упомянут в тексте.

      Поэтому проще купить даже подписку за 20 баксов на чат гпт и использовать их модели

      Не проще. О чём сказано в тексте.

      Кстати, а вы его вообще читали?


      1. Absamad
        02.11.2026 13:08

        Статью я прочитал. А вот вы мой комментарий, похоже, прочитали по ключевым словам. Вы тестировали Flash-Next на RTX 6000 Pro. Я предложил другую модель — Coder с половиной экспертов — непосредственно для вашей 4070 Ti Super через Strata. Это не тот эксперимент, который описан в статье. Потратить 150 часов на попытки «раскрыть» 27B, а в ответ на предложение проверить альтернативную связку сказать «эти слова уже есть в тексте» — это скорее техническая некромантия, чем поиск практичного инструмента. Поэтому перед вопросом «а вы вообще читали?» стоило разобраться, что именно вам предложили.


        1. semenoffalex Автор
          02.11.2026 13:08

          Я предложил другую модель — Coder с половиной экспертов — непосредственно для вашей 4070 Ti Super через Strata

          Спасибо. Про эту модель я узнал в начале октября. Практическое подтверждение того, что она работает на моей модели видеокарты я видел ещё неделю назад тут.
          Но материал для этого write-up'a у меня копился с начала сентября. Поэтому я и довёл его до публикации вместо продолжения бесконечного scope creep. Новая блестящая игрушка в виде Strata Qwen3.8-Flash-Next Coder от меня никуда не убежит. А если в процессе тестирования обнаружится что-нибудь любопытное, я не премину описать это здесь.

          в ответ на предложение проверить альтернативную связку

          С учётом написанного выше, а также в самом тексте, условная энтропия этой информации для меня равна 0.

          это скорее техническая некромантия, чем поиск практичного инструмента

          Практичный инструмент я уже нашёл. О чём и сообщил в тексте.


        1. ToxaBes
          02.11.2026 13:08

          Я предложил другую модель — Coder с половиной экспертов

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


  1. Druzd
    02.11.2026 13:08

    Адресовано комментаторам: квант 0 попробуйте, говорят вапще пушка))). Не понимаю почему у всех паранойя запихать в бюджетную видеокарту модели а-ля qwen 3.8 next flash и умиляться этому? Автор потратил честные часы на сравнение моделей в разных кванта, хирургии reap и. т. п. - респект 100%!

    ПЫСЫ на своей железке dgx spark игрался с reap - ну такое себе, Вырежая редких экспертов легко похерить и нужных экспертов,


    1. semenoffalex Автор
      02.11.2026 13:08

      Спасибо.

      Не понимаю почему у всех паранойя запихать в бюджетную видеокарту модели а-ля qwen 3.8 next flash и умиляться этому?

      Поговаривают, что делать это с помощью "ванильной" Strata небезопасно, т.к. она тутже начинает скачивать не пойми что. Автор ролика предлагает свою версию, откуда удалён код на Python и лишние поползновения в Интернет.

      на своей железке dgx spark игрался с reap - ну такое себе

      А что за модель была? Может её и вправду криворукий хирург лоботомировал. Я свою случайно нашёл, но потом в интернетах натыкался на восторженные отзывы о ней. Вот эта версия: barozp/Qwen3.6-28B-REAP20-A3B-GGUF


      1. ToxaBes
        02.11.2026 13:08

        Поговаривают, что делать это с помощью "ванильной" Strata небезопасно, т.к. она тутже начинает скачивать не пойми что

        Очередное "услышал звон и не знает где он". Есди посмотреть на код страты внимательнее, то увидете что там буквально вшиты предлагаемые репозитарии конкретных моделей и файлов с конкретными расширениями. Буквально вот пример из кода:

        DSV41_ISTA_REPO = "ISTA-DASLab/DeepSeek-V4.1-Flash-1017-GSQ-RCO-GGUF"
        DSV41_ISTA_ENGRAM = "DeepSeek-V4.1-Flash-Engram-IQ4_NL.gguf"
        DSV41_ISTA_SHARD = "DeepSeek-V4.1-Flash-1017-GSQ-RCO-{quant}-{i:05d}-of-00004.gguf"
        DSV41_DSPARK = "dspark-DeepSeek-V4.1-Flash-1017-Q8_0.gguf"
        DSV41_ISTA_FILES = {
           "DeepSeek-V4.1-Flash-1017-GSQ-RCO-IQ1_M-00001-of-00004.gguf": (39358830464, "6e3f0d5ff53d00428ec32c079db9e8255cb410ccaa435e5342aaa8a47fe1339d"),
           "DeepSeek-V4.1-Flash-1017-GSQ-RCO-IQ1_M-00002-of-00004.gguf": (39176113248, "34d68c99fdae9948f9f0af0dafe308e805ce0a78d2c48641b24cc57242fdc0af"),
           "DeepSeek-V4.1-Flash-1017-GSQ-RCO-IQ1_M-00003-of-00004.gguf": (39997334720, "a08468c83955e0c4d3a9eb3f7b86c45b7bbac55d99c4640039a296a8a4b327ea"),
           "DeepSeek-V4.1-Flash-1017-GSQ-RCO-IQ1_M-00004-of-00004.gguf": (2188841824, "b05f26a92325aa6845cebcb3ec1f93d2e65ebf89bdc3f805695960d2f0681832"),
           "DeepSeek-V4.1-Flash-1017-GSQ-RCO-IQ2_XS-00001-of-00004.gguf": (39535776992, "4c65307992ab586c527ca1f6f64062aa96a33b23c02b7fed103f45f75e854798"),
           "DeepSeek-V4.1-Flash-1017-GSQ-RCO-IQ2_XS-00002-of-00004.gguf": (39494617536, "933461a974fcccee741bf2f9798201e72ab4aa3f8a952be56f849896ca6ea30e"),
           "DeepSeek-V4.1-Flash-1017-GSQ-RCO-IQ2_XS-00003-of-00004.gguf": (39423838496, "bbf91fa346a85ebaf32dd4fd5c456b534d780d381e54f46ac90783a481373240"),
           "DeepSeek-V4.1-Flash-1017-GSQ-RCO-IQ2_XS-00004-of-00004.gguf": (36771591232, "e5b2f8781fab688cd4bc3bc7a69651b5dbb90ed94965657c6bead8bb4774f3cf"),
           "DeepSeek-V4.1-Flash-1017-GSQ-RCO-IQ2_XXS-00001-of-00004.gguf": (39075714624, "d46efb67ccffd8fb5d7f18b423896381b9e06d8491e161c370ddf3b05b07e050"),
           "DeepSeek-V4.1-Flash-1017-GSQ-RCO-IQ2_XXS-00002-of-00004.gguf": (39388449504, "cec1b2c3da429dc768b8bb9bc4dc4403d81f74d34db660a6a34ee3e555bf2c70"),
           "DeepSeek-V4.1-Flash-1017-GSQ-RCO-IQ2_XXS-00003-of-00004.gguf": (39246891616, "9d9c2140fcb134a0b9a74dedd0e5167e68077af6d08ce7f856bce112f0a35dd3"),
           "DeepSeek-V4.1-Flash-1017-GSQ-RCO-IQ2_XXS-00004-of-00004.gguf": (20527837312, "9b790a2297ed3cdede379fc984f4a52bb95f3b23724c797af11d1fa6a69db059"),
           "DeepSeek-V4.1-Flash-Engram-IQ4_NL.gguf": (110595290816, "eb19f30d368d393784e1fc54fdfaffc427ebb2110bf3762fdf5a8fbb9a2d740a"),
        }

        Разработчики моделей периодически обновляют их выкатывая модели лучшего качества, а т.к. они хостятся на HF, то эти обновления попадают в те же самые файлы. Вот их и обновляют. это касется всех моделей на HF, тот же Qwen официальный также обновляется внутри одной версии.

        Автор не разобрался в вопросе и напридумывал себе.


  1. Yamari
    02.11.2026 13:08

    Отлично! Статья понравилась. В работе локальных llm есть свое очарование и шарм, вне зависимости от практичности. Это само по себе увлекательное занятие. Пишите ещё!


  1. Rub_paul
    02.11.2026 13:08

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


    1. semenoffalex Автор
      02.11.2026 13:08

      Пост, который демонстрирует на практике ровно обратное, кажется мне не самым удачным местом для подобного комментария.


  1. teraferma_io
    02.11.2026 13:08

    Ускорение REAP20 на 42% при минус 20% весов, похоже, не про вычисления: активных параметров на токен у обеих около 3B. Скорее дело в памяти. 35B-A3B в Q4_K_M весит порядка 21 ГБ, урезанная около 17 ГБ. При 16 ГБ видеопамяти и контексте 64k целиком не влезает ни одна, но у урезанной в оперативку уходит заметно меньше экспертов. На карте с 24 ГБ разница, подозреваю, была бы куда скромнее.

    И про разброс. На 509 задачах при точности около 50% стандартная ошибка порядка 2,2 п.п. на каждую модель, а у разности двух моделей уже около 3,1, так что 53,8% против 51,1% пока в пределах шума. Сказать, что заметной просадки после вырезания экспертов нет, можно, а вот «лучше» без парного теста по тем же задачам (того же Макнемара) не показать. Numpy 325 показывает ещё один источник шума: если один и тот же код то проходит, то нет, нестабилен сам тест. Отсюда же может быть и часть из 32 задач, которые решил Q2, но не решил Q6. Какая стояла температура? Если не ноль, интересно прогнать тот же Q6 второй раз и посмотреть, сколько «уникальных» задач он найдёт сам у себя.


    1. semenoffalex Автор
      02.11.2026 13:08

      «лучше» без парного теста по тем же задачам (того же Макнемара) не показать. 

      Это слово прокралось от общего впечатления при сравнении точности и скорости. Но на будущее постараюсь не забыть, спасибо.

      Какая стояла температура?

      Рекомендованная производителем 1.0 (link).

      Если не ноль, интересно прогнать тот же Q6 второй раз и посмотреть, сколько «уникальных» задач он найдёт сам у себя.

      ~ 8.2 часа, конечно, не вызывают энтузиазма. Но в беклог добавлю. Тем более, что, судя по новым результатам, не грех будет и продолжение сделать. Ибо там очередной шок-контент. По крайней мере для меня.


  1. Dionisiy_eshe
    02.11.2026 13:08

    Да это правильно, попробовать. Например у 27 модели заметил разницу в продолжительности и качестве размышлений при смене размера батчей. А сборки от DavidAU радикально сокращают время решений одних и тех же задач + смена режима размышлений через чат (в начале сессии желательно). Кстати в strata последней версии касперский находит трояны в js при установке, видимо это только в харнесс и видимо поведенческий анализ срабатывает.


    1. semenoffalex Автор
      02.11.2026 13:08

      Вот тут хороший обзор настроек под каждое сочетание VRAM & RAM (YouTube).

      ЧиТД
      ЧиТД