# Задание A45: три новых кандидата в локальные кодеры ## Дата поступления 2026-08-31 ## База `origin/main` (`ff303b5`). ``` git fetch origin --prune git checkout -b antigravity/a45-moe-candidates origin/main ``` В `main` напрямую не пушить. ## Порядок исполнения Два прохода: **Flash** исполняет замеры, **Pro** проводит аудит. Пункт **P0-5** написан для аудитора. **Выполнять после A44.** Причина не в приоритетах, а в железе: видеокарта одна, и оба задания её занимают. A44 первым делом останавливает ручной процесс на 8081 и возвращает кодер под systemd — начинать замеры до этого значит мешать друг другу и получить искажённые тайминги. **Файлы A44 не трогать.** `benchmarks/BENCHMARK_REPORT.md` и `benchmarks/benchmark_results.json` правит A44; здесь пишется отдельный отчёт (см. P0-4). Стенд `benchmarks/benchmark_suite.py` используется как есть, без правок. --- ## Задача Владелец нашёл на huggingface.co новые модели и спрашивает, есть ли что-то интересное. Ревьюер отобрал три кандидата и проверил их пригодность к этому железу. Нужно измерить. ## Что проверено ревьюером — заново не выяснять Размеры получены через API репозиториев HuggingFace, а не из карточек моделей. | Порядок | Репозиторий | Файл | Размер | |---|---|---|---| | 1 | `unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF` | `Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf` | 17,28 ГиБ | | 2 | `bartowski/Qwen2.5-Coder-32B-Instruct-GGUF` | `Qwen2.5-Coder-32B-Instruct-Q4_K_M.gguf` | 18,49 ГиБ | | 3 | `peculiar-ragdoll/Tiel-Coder-35B-A3B-GGUF` | `Tiel-Coder-35B-A3B-UD-Q4_K_S.gguf` | 19,46 ГиБ | Пересобирать llama.cpp не нужно: ``` сборка на сервере: build 10597, commit 95b8e33e1 libllama.so содержит: qwen3moe, qwen35moe, deepseek2, granite ``` Место: свободно 256 ГБ, три модели занимают 55 ГиБ. ## Почему именно эти три и в этом порядке **Qwen3-Coder-30B-A3B — главная.** MoE: 30 миллиардов всего, **3 миллиарда активных**. На V100 производительность упирается в пропускную способность памяти, поэтому скорость определяется активными параметрами, а память — общими. Ожидается скорость малой модели при качестве тридцатимиллиардного кодера. Это ровно та гипотеза, ради которой A38 брала Nemotron и до замера не довела. 12,8 млн скачиваний, 933 отметки — сборка обкатанная. По размеру садится на место нынешнего кодера: 17,28 ГиБ против 17,67 у Qwen3.8-27B, то есть под контекст остаётся столько же. **Qwen2.5-Coder-32B — про потолок качества.** Плотная, старшая в семействе нынешнего лидера. Числилась кандидатом ещё в A40 и до замера не дошла. Скорости от неё не ждут: плотные 32B на этом железе должны идти примерно вдвое медленнее 14B. Вопрос к ней один — покупается ли за потерю скорости реальный прирост качества. 14B даёт 75% на стенде. **Tiel-Coder-35B-A3B — третья, и только после двух первых.** Тоже MoE с тремя активными, первое место в трендах среди кодеров. Но выложена 31 августа, автор незнакомый, 145 отметок против 933 у Qwen. Не обкатана. ## Ожидания ревьюера — это не измерения Всё, что выше сказано про ожидаемую скорость, выведено из замеренных свойств железа и **числами в отчёт не переносится**. В таблице стоят только измеренные значения. --- ## P0-1. Правило из A40 действует без изменений **Строка в отчёте появляется только после того, как модель отработала на стенде.** Для каждой строки обязательны: 1. **Абсолютный путь к файлу GGUF** на сервере. 2. **Размер файла в байтах** из `stat`, а не из карточки модели. 3. **Контрольная сумма** первых мегабайт или `sha256`. 4. **Сырые тайминги** из поля `timings` ответа `llama-server`, не пересчитанные вручную. 5. **Имя сборки** из `general.name` метаданных GGUF, а не из названия каталога. Модель не скачалась, не запустилась или не влезла — **строки в таблице нет**, вместо неё раздел «не проверено» с причиной. Это полноценный результат, он принимается; выдуманные числа — нет. ## P0-2. Замер на 64К обязателен Это главное отличие от A40 и главная причина, по которой задание вообще нужно. 1. **Мерить на 64К контекста**, а не только на 32К. Это порог отбора у Hermes: модель, не держащая 64К, в работу не идёт, и замер на 32К на вопрос владельца не отвечает. 2. Если модель на 64К не помещается или деградирует — **так и записать**, с числами. 3. **Длинный контекст у MoE под особым подозрением.** DeepSeek-Coder-V2-Lite, тоже MoE с малым числом активных, по замеру A40 на 32К проваливается до 3,35 ток/с и уходит в таймаут. Проверить целенаправленно, не повторяется ли это у Qwen3-Coder и Tiel: если повторяется, вся привлекательность MoE на этом железе иллюзорна, и это важнейший вывод задания. 4. Дополнительно снять 32К — для сопоставимости с таблицей A40. ## P0-3. Одинаковые условия 1. **Режим мышления выключен у всех**, как в A40. 2. Квантование Q4_K_M, где доступно; у Tiel его нет — взят `UD-Q4_K_S`, и это **оговорить в отчёте** отдельной строкой. 3. `--parallel 1`, посторонних запросов во время замера нет. 4. **Размер контекста указывать при каждом числе.** В A40 его забыли указать вовсе, и числа оказалось не с чем соотнести. 5. **VRAM мерить по процессу**: `nvidia-smi --query-compute-apps=pid,used_memory`, а не общую занятость карты. В A40 столбец собрал занятость вместе с соседней резидентной моделью и стал бесполезен. ## P0-4. Что измерять и куда писать Как в A40: генерация и обработка промпта в токенах в секунду, видеопамять по процессу, время холодной загрузки, прохождение 12 задач стенда, поведение на длинном контексте. Отчёт — **новый файл** `benchmarks/BENCHMARK_MOE_CANDIDATES.md` и отдельный файл результатов. `BENCHMARK_REPORT.md` и `benchmark_results.json` не трогать: их правит A44, и одновременная запись даст конфликт. Вывод в одну строку на каждую модель: годится ли она заменой нынешнему кодеру и почему. **Ничего в конфигурации владельца не менять** — задание исследовательское, решение принимает он. ## P0-5. Аудит вторым проходом В A38 выдумка прошла первый проход целиком. Здесь она — главный предмет проверки. 1. **Для каждой строки убедиться, что файл существует**: пройти `stat` по всем путям и сверить размеры с таблицей. 2. **Ни одной записи `COMPLETED` без файла** в результатах. 3. **Проверить выборочно тайминги**: повторить два-три замера и убедиться, что цифры воспроизводятся. 4. **Убедиться, что замер на 64К действительно сделан**, а не подменён замером на 32К. 5. **Проверить, что при каждом числе указан контекст**, и что VRAM снята по процессу. 6. **Убедиться, что файлы A44 не тронуты.** 7. **Побочные изменения** объяснить. 8. **Пропущенный пункт назвать пропущенным.** --- ## Ограничения - **Выполнять после A44**: видеокарта одна. - Служебные юниты `qwen-coder` и `qwen-compressor` после прогонов вернуть в рабочее состояние: владелец пользуется сервером ежедневно. - Конфигурацию хаба не менять. - Учётные данные и `~/.hermes/agy_profiles/` не трогать. - Место на диске контролировать, раздел не забить. - Версию `0.1.1` не поднимать, тег не создавать. - Правило честности без исключений. ## Критерии приёмки 1. Ветка в `origin`, `git status` чист. 2. Три кандидата прогнаны либо честно объявлены недоступными с причиной. 3. Для каждой строки: путь, размер в байтах, контрольная сумма, `general.name`, сырые тайминги. 4. **Для каждой модели есть замер на 64К контекста**; где не влезло или деградировало — с числами. 5. Проверено, повторяется ли у MoE провал на длинном контексте, замеченный у DeepSeek. 6. При каждом числе указан размер контекста; VRAM снята по процессу. 7. Отклонение по квантованию у Tiel оговорено. 8. Отчёт в отдельном файле; `BENCHMARK_REPORT.md` и `benchmark_results.json` не изменены. 9. Служебные модели на портах 8081 и 8082 возвращены в рабочее состояние. 10. Конфигурация владельца не изменена. 11. `ruff check .` чисто; релизный гейт не ухудшен. 12. Отчёт: `START_HEAD`, `FINAL_HEAD`, `origin/main`, `git status`, `X passed / Y skipped / Z failed`. На `origin/main` сейчас **491 passed**. ## Главное Нынешний лидер по замерам — Qwen2.5-Coder-14B: 75% качества при 55,9 ток/с. Вопрос владельца в том, есть ли что-то заметно лучше. Qwen3-Coder-30B-A3B — самый обоснованный ответ, какой можно дать не запуская: три активных миллиарда на памяти-узком-месте должны дать скорость малой модели при качестве большой. Но ровно это же обещал DeepSeek, а на длинном контексте провалился до 3,35 ток/с. Поэтому замер на 64К здесь важнее самой таблицы скоростей. ## Порядок сдачи Передать точный `FINAL_COMMIT_SHA`.