Когда все врут: проблема чёрного ящика в оценке LLM
Вы читаете статью про новую модель. Там красивые графики, впечатляющие цифры: «превосходит GPT-4 на 5% по MMLU», «лидер в категории 3B параметров». Вы скачиваете модель, запускаете свой тест. И получаете результат на 20% хуже. Знакомая история? Добро пожаловать в мир невоспроизводимых бенчмарков — главную головную боль 2025 года.
Компании публикуют результаты, но не публикуют промпты, параметры генерации, версии датасетов. Это как если бы фармацевты хвастались эффективностью лекарства, но не говорили дозировку. NVIDIA решила сломать эту традицию, выпустив Open Evaluation Standard и инструмент NeMo Evaluator. Суть проста: если заявляешь результат — предоставь полный «рецепт» его проверки. Сегодня мы разберём, как этим рецептом воспользоваться на примере Nemotron 3 Nano.
Внимание: если вы думаете, что воспроизвести бенчмарк — это просто запустить скрипт, вас ждёт сюрприз. Разница в одном параметре температуры (temperature) может изменить результат на 10%. Мы будем разбирать не только шаги, но и подводные камни.
NeMo Evaluator: не просто скрипт, а конвейер прозрачности
NeMo Evaluator — это не очередная библиотека для оценки. Это система, которая заставляет вас (и разработчиков моделей) следовать строгому протоколу. Всё фиксируется: промпты, параметры генерации, версии метрик, даже seed для случайных чисел. Результат — любой человек может повторить оценку и получить те же цифры. Для Nemotron 3 Nano NVIDIA выложила полный конфиг — так называемый «рецепт оценки» (evaluation recipe).
1Готовим окружение: не наступайте на эти грабли
Первая ошибка — попытаться установить NeMo Evaluator в глобальное окружение Python. Не делайте так. Вы получите конфликты версий, особенно с пакетами от PyTorch. Создавайте виртуальное окружение. Вторая ошибка — думать, что хватит GPU с 8 ГБ памяти. Для некоторых тестов (например, HellaSwag с большим контекстом) Nemotron 3 Nano в FP16 потребует 12-16 ГБ. Проверьте свою видеокарту.
| Компонент | Рекомендуемая версия | Что будет, если поставить другую |
|---|---|---|
| Python | 3.10 - 3.11 | 3.12 может не поддерживаться некоторыми зависимостями |
| PyTorch | 2.3.0+ с CUDA 12.1 | Более старые версии приведут к ошибкам совместимости с ядрами NVIDIA |
| NeMo Evaluator | Последняя из репозитория (не с PyPI!) | Версия из PyPI часто отстаёт и не содержит актуальных рецептов оценки |
Установка выглядит просто: клонируете репозиторий, ставите зависимости. Но секрет в том, чтобы поставить именно те версии, которые указаны в файле pyproject.toml рецепта для Nemotron 3 Nano. Иначе метрики могут считать неправильно. (Я видел, как из-за другой версии библиотеки evaluate результат MMLU плавал на 3%).
2Загружаем рецепт оценки: где искать конфиги
Рецепты оценки лежат не в NeMo Evaluator, а в репозитории модели на Hugging Face. Для Nemotron 3 Nano ищите папку nemo_eval в официальном репозитории. Внутри — конфиги в формате YAML для каждого бенчмарка: MMLU, HellaSwag, TruthfulQA и других. Это ключевой момент. Раньше вам пришлось бы гадать, какие промпты использовались. Теперь они перед вами.
Скопируйте эти YAML-файлы к себе в проект. Но не меняйте в них ничего, если хотите точного воспроизведения. Особенно обратите внимание на секцию inference. Там указаны параметры генерации: temperature=0.0, top_p=0.95, max_new_tokens=512. Если вы поставите temperature=0.7 (как часто делают по привычке), результаты поплывут. В этом весь смысл стандарта — фиксация всех переменных.
Осторожно: некоторые рецепты могут ссылаться на датасеты, которые загружаются автоматически. Проверьте, что у вас есть интернет-соединение при первом запуске. Или заранее скачайте датасеты в локальную директорию, указав путь в конфиге.
3Запускаем оценку: команда, которая всё меняет
Основная команда выглядит просто: nemo-eval run --config path/to/config.yaml. Но дьявол в деталях. Во-первых, убедитесь, что модель загружена в том же формате, что и в конфиге. Если там указано dtype: bfloat16, а вы загрузили в float16, возможны расхождения. Во-вторых, если вы оцениваете квантованную версию модели (например, с помощью ReAP квантования), вам нужно создать отдельный конфиг с изменённым путём к модели и, возможно, параметрами.
Запуск одного бенчмарка на GPU средней мощности займёт от 30 минут до нескольких часов. NeMo Evaluator использует многопроцессорную обработку, чтобы ускорить оценку. Но если у вас мало памяти, уменьшите параметр batch_size в конфиге. Только запомните, что вы его изменили! Для воспроизводимости нужно фиксировать все изменения.
4Анализируем результаты: не верьте среднему баллу
После запуска вы получите JSON-файл с результатами. Там будет не только итоговый score, но и разбивка по категориям, по примерам. Вот здесь начинается самое интересное. Сравните свои результаты с заявленными NVIDIA. Если есть расхождения более чем на 1-2%, ищите причину.
- Совпадает ли seed? В конфиге должен быть указан seed для детерминизма. Убедитесь, что он одинаковый.
- Та же версия датасета? Некоторые датасеты обновляются. В конфиге указана точная версия (например, MMLU version 0.2.0). Проверьте.
- Тот же препроцессинг? Промпты в конфиге включают конкретные форматирования. Модель Nemotron 3 Nano обучена с определёнными токенами-разделителями. Их изменение сломает результат.
Допустим, по MMLU вы получили 75%, а NVIDIA заявляет 76.5%. Посмотрите, в каких именно категориях разница. Может быть, модель хуже справляется с «философией» из-за другого контекста. Это уже полезная информация для вашего применения.
Типичные ошибки, которые сведут на нет все усилия
Я собрал топ-3 ошибки, которые совершают 90% людей, пытаясь воспроизвести бенчмарки.
- Использование модели в режиме чата без учёта системного промпта. Nemotron 3 Nano — инструктивная модель. В рецепте оценки чётко прописан системный промпт (например, «You are a helpful assistant...»). Если вы его опустите, результаты рухнут. Это не та проблема с «мышлением» в LM Studio, но тоже критично.
- Оценка на CPU для скорости. Да, можно запустить оценку на CPU, если нет GPU. Но операции с плавающей точкой на CPU могут давать небольшие численные расхождения. Этого достаточно, чтобы изменились сгенерированные токены, особенно при temperature > 0. Всегда используйте GPU, если хотите точного воспроизведения.
- Параллельные запуски нескольких оценок на одном GPU. NeMo Evaluator использует всю память GPU. Если вы запустите два процесса одновременно, они начнут конкурировать за память, что приведёт к ошибкам или падению производительности. Очередь — ваше всё.
Зачем всё это? И что будет дальше
Воспроизведение бенчмарков — это не академическое упражнение. Это способ проверить честность игроков рынка. NVIDIA своим Open Evaluation Standard задаёт высокую планку. Ожидаю, что другие крупные компании (Google, Meta) будут вынуждены последовать примеру. Иначе их результаты перестанут воспринимать всерьёз.
Что это даёт вам как инженеру? Во-первых, вы можете объективно сравнивать модели, как в нашей LLM-лотерее. Во-вторых, вы можете улучшать модели, точно зная, на каких задачах они ошибаются. В-третьих, вы можете создавать свои рецепты оценки для внутренних нужд, обеспечивая воспроизводимость внутри команды.
Мой прогноз: через год открытые рецепты оценки станут таким же стандартом, как публикация весов моделей на Hugging Face. А инструменты вроде NeMo Evaluator будут встроены в популярные фреймворки, например, в NeMo Agent Toolkit. Начинайте осваивать сейчас — будете на шаг впереди.
И последний совет: после того как вы воспроизвели официальные бенчмарки, попробуйте провести свой стресс-тест. Например, оцените согласованность персонажей, как в сравнении Nano Banana и Gemini 2.5 Flash. Открытые стандарты — это инструмент, а как его использовать — зависит от вашей фантазии.