hermes-hub/agents/inbox/2026-08-31-A40-benchmark-redo.md
Hermes Team 1d6ef1bfcb docs(agents): задание A40 — повторный замер локальных моделей, три строки прошлого отчёта выдуманы
Отчёт benchmarks/BENCHMARK_REPORT.md открывается словами «Все метрики сняты
реальным исполнением на стенде». Для трёх строк из семи это неправда.

Сверено с диском сервера. Четыре модели существуют, их размеры совпадают с
отчётом до сотых: 17,67 / 8,37 / 4,60 / 2,33 ГБ. Трёх других нет вовсе:
deepseek-coder-v2-lite и phi-4-14b — каталоги пусты, файлов GGUF нет;
nemotron-cascade-30b не существует на сервере нигде. При этом в
benchmark_results.json DeepSeek и Phi-4 помечены COMPLETED, а у Nemotron
статус честнее, но числа при нём всё равно проставлены.

На этом построена рекомендация: DeepSeek-Coder-V2-Lite назван «лучшим
выбором для максимальной скорости» с точностью до десятой доли — по модели,
которая никогда не запускалась. Владелец собирается менять рабочую модель, и
цена такой строки — неверное решение, а не неточность в документе.

Замеры по четырём настоящим моделям признаны и переделке не подлежат;
главный вывод — Qwen2.5-Coder-14B держит качество 27B при втрое большей
скорости — остаётся в силе.

Задание вводит правило: строка появляется только при наличии пути к файлу,
размера в байтах из stat, контрольной суммы и сырых таймингов от сервера.
Модель не скачалась — раздел «не проверено» с причиной, это принимается.

Добавлены новые кандидаты, отобранные по проверенным характеристикам:
qwen2.5-coder-32b, granite4.2:8b (на диске лежит 3.2-preview, а не релиз),
nemotron-3.5-lightning, laguna-xs-2.1, lfm2.5. Отклонены с проверкой:
gpt-oss:120b (80 ГБ), Qwen3.8-Flash-Next (125B/6B, ужатое IQ1_S — 72,5 ГБ).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 01:25:19 +07:00

173 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Задание A40: честный замер локальных моделей, повторно
## Дата поступления
2026-08-31
## База
Ветка ревьюера `review/a35-a37-verified` (`88d579a`).
```
git fetch origin --prune
git checkout -b antigravity/a40-benchmark-redo origin/review/a35-a37-verified
```
В `main` напрямую не пушить.
## Порядок исполнения
Два прохода: **Flash** исполняет замеры, **Pro** проводит аудит. Пункт **P0-5** написан для аудитора и в этом задании важнее обычного.
Это **возврат по A38**. Стенд, раннер и набор из 12 задач писать заново не нужно — они хороши и остаются.
---
## Почему возврат
Отчёт `benchmarks/BENCHMARK_REPORT.md` открывается словами «Все метрики сняты реальным исполнением на стенде». Для трёх строк из семи это неправда.
Ревьюер сверил отчёт с диском сервера. Четыре модели существуют, и их размеры совпадают с отчётом до сотых:
```
qwen3.8-27b 18 973 870 432 байт = 17,67 ГБ отчёт 17.67
qwen2.5-coder-14b 8 988 110 272 = 8,37 ГБ отчёт 8.37
granite-3.2-8b 4 942 860 096 = 4,60 ГБ отчёт 4.60
qwen3-4b 2 497 280 736 = 2,33 ГБ отчёт 2.32
```
Трёх других **нет на диске вовсе**:
```
deepseek-coder-v2-lite каталог пуст, файла GGUF нет отчёт: 8.92 ГБ, 52.1 ток/с, 75.0%
phi-4-14b каталог пуст, файла GGUF нет отчёт: 9.10 ГБ, 34.8 ток/с, 66.7%
nemotron-cascade-30b не существует нигде на сервере отчёт: 18.20 ГБ, 42.6 ток/с, 75.0%
```
В `benchmark_results.json` DeepSeek и Phi-4 помечены **`COMPLETED`** — замер якобы выполнен. У Nemotron статус честнее (`AVAILABLE_FOR_SWAP`), но числа при нём всё равно проставлены.
Хуже всего, что на этом построена рекомендация: пункт 2 итогов называет **DeepSeek-Coder-V2-Lite «лучшим выбором для максимальной скорости»** с точностью до десятой доли — на основании модели, которая никогда не запускалась. Владелец принял бы решение по несуществующим данным.
Это тот же класс дефекта, что уже стоил проекту нескольких раундов: выдуманные коды устройства `GRK-7842` и `CDX-9104`, запасной коммит `fb23bff`. Задание A38 содержало отдельный пункт «ни одного числа, которого не дал замер», и он не был выполнен.
## Что из старого отчёта остаётся
Замеры по четырём настоящим моделям **признаны и переделке не подлежат**. Их переносить как есть:
| Модель | ток/с | Качество | VRAM |
|---|---|---|---|
| Qwen3.8-27B (reasoning off) | 13,6 | 83,3% | 28 980 МиБ |
| Qwen2.5-Coder-14B | 38,4 | 83,3% | 12 118 МиБ |
| Granite-3.2-8B-preview | 55,8 | 50,0% | 6 500 МиБ |
| Qwen3-4B | 124,1 | 33,3% | 5 440 МиБ |
Разбор влияния режима мышления (раздел 4) тоже верен и подтверждён независимым замером ревьюера. Оставить.
---
## P0-1. Правило, нарушение которого делает работу непринятой
**Строка в отчёте появляется только после того, как модель отработала на стенде.**
Для каждой строки обязательны:
1. **Абсолютный путь к файлу GGUF на диске** сервера.
2. **Размер файла в байтах**, полученный `stat`, а не из карточки модели.
3. **Контрольная сумма** первых мегабайт или `sha256` — чтобы отчёт можно было проверить.
4. **Сырые тайминги** от `llama-server` из поля `timings` ответа, не пересчитанные вручную.
Модель не скачалась, не запустилась или не влезла — **строки в таблице нет**. Вместо неё отдельный раздел «не проверено» с причиной. Это полноценный результат, он принимается; выдуманные числа — нет.
Статус `COMPLETED` ставится **только** при наличии всех четырёх пунктов выше.
## P0-2. Кандидаты
Сначала доделать то, что заявлено в A38, потом новых.
**Обязательные — числа для них уже опубликованы, их надо либо подтвердить, либо отозвать:**
```
DeepSeek-Coder-V2-Lite MoE 16B, ~2,4B активных, специализация на коде
Phi-4-14B плотная 14B
Nemotron-Cascade-2-30B-A3B MoE 30B, ~3B активных
```
**Новые, отобранные владельцем и ревьюером:**
| Модель | Что известно проверенно | Зачем |
|---|---|---|
| `qwen2.5-coder-32b` | старшая в семействе нынешнего лидера | лидер даёт 83,3% при 38,4 ток/с; проверить, растёт ли качество |
| `granite4.2:8b` | 5,3 ГБ, контекст 128K | на диске лежит **3.2-preview**, показавшая 50%; 4.2 — следующее поколение |
| `nemotron-3.5-lightning` | 30B всего, 3B активных, MoE, 25 ГБ, контекст 1M | активных три миллиарда — на V100 это должно дать скорость малой модели |
| `laguna-xs-2.1` | 33B, 3B активных, MoE | заявлена «для агентного кодинга на локальной машине» |
| `lfm2.5` | 8B, 1B активных | не в кодеры, а на служебные роли вместо 4B |
**Проверено и отклонено, время не тратить:**
```
gpt-oss:120b 80 ГБ по карточке модели, H100
Qwen3.8-Flash-Next 125B/6B; самое ужатое IQ1_S — 72,5 ГБ
glm-5.3, kimi-k3, minimax-m3, laguna-s-2.1 (118B), ornith-1.5 397b десятки гигабайт
minicpm-v4.5 / v4.6 модели зрения для телефонов
```
Важное про MoE, чтобы не повторить ошибку рассуждения: **экономия у MoE в скорости, а не в памяти.** Активны три миллиарда, но в памяти обязаны лежать все тридцать. Отбирать по общему размеру, ждать выигрыша в скорости.
## P0-3. Одинаковые условия
Иначе сравнение обманет, и в прошлый раз это едва не случилось.
1. **Режим мышления одинаков у всех.** Прошлый прогон шёл с `--reasoning on` у Qwen и без него у остальных — при 13,4 ток/с модель тратила весь лимит на размышления и выдавала ноль. Мерить всех с выключенным мышлением, а влияние режима показывать отдельным разделом, как сейчас.
2. **Один контекст, одно квантование** — по возможности Q4_K_M. Где взято другое, оговорить.
3. **Точное имя сборки.** На диске лежит `granite-3.2-8b-instruct-preview`, а в отчёте написано `Granite-3.2-8B-Instruct` — это разные веса, и разница в качестве могла быть именно в этом. Указывать `general.name` из метаданных GGUF.
4. **Сервер занят одним прогоном.** У обоих llama.cpp `--parallel 1`; посторонние запросы во время замера искажают тайминги.
## P0-4. Что мерить
Как в A38, менять нечего:
- генерация и обработка промпта, токенов в секунду;
- занятая видеопамять по `nvidia-smi`;
- время холодной загрузки (диск даёт 187 МБ/с, это заметно);
- прохождение 12 задач стенда;
- поведение на длинном контексте.
Плюс: **сколько места на диске занято** и сколько осталось. Кандидатов много, свободно было 313 ГБ.
## P0-5. Аудит вторым проходом
Проверяющему: в прошлый раз выдумка прошла первый проход целиком. Здесь она — главный предмет проверки.
1. **Для каждой строки отчёта убедиться, что файл существует.** Пройти `stat` по всем путям и сверить размеры с таблицей. Расхождение — дефект.
2. **Сверить `benchmark_results.json` с диском.** Ни одной записи `COMPLETED` без файла.
3. **Проверить выборочно тайминги**: повторить два-три замера и убедиться, что цифры воспроизводятся.
4. **Имена сборок** сверить с `general.name` из GGUF, а не с названием каталога.
5. **Рекомендации опираются только на проверенные строки.**
6. **Пропущенный пункт назвать пропущенным.**
---
## Ограничения
- Служебные юниты `qwen-coder` и `qwen-compressor` возвращать в рабочее состояние после прогонов: владелец пользуется сервером ежедневно.
- Конфигурацию хаба не менять; задание исследовательское.
- Место на диске контролировать, не забить раздел.
- Тег `v0.1.1` не создавать.
## Критерии приёмки
1. Ветка в `origin`, `git status` чист.
2. Ни одной строки в отчёте без файла на диске; для каждой указаны путь, размер в байтах и контрольная сумма.
3. Три модели из A38 либо замерены по-настоящему, либо перенесены в раздел «не проверено» с причиной, а рекомендации по ним отозваны.
4. Новые кандидаты из P0-2 прогнаны либо честно объявлены недоступными.
5. Все модели мерены в одинаковом режиме мышления; влияние режима вынесено отдельно.
6. Имена сборок взяты из метаданных GGUF.
7. Итоговая рекомендация опирается только на проверенные измерения.
8. Служебные модели на портах 8081 и 8082 возвращены в рабочее состояние.
9. Отчёт: `START_HEAD`, `FINAL_HEAD`, `origin/main`, `git status`.
## Главное
Первый замер дал ценный результат: Qwen2.5-Coder-14B держит качество 27B при втрое большей скорости. Этому можно верить — файл на диске, размер сходится. Но рядом стоят три строки с числами моделей, которых на сервере нет, и одна из них попала в рекомендации. Владелец собирается менять на этом основании рабочую модель, поэтому цена выдуманной строки здесь — неверное решение, а не просто неточность в документе.
## Порядок сдачи
Передать точный `FINAL_COMMIT_SHA`.