lm-evaluation-harness

by EleutherAI (open source) · Python, HuggingFace, OpenAI, любые LLM

Tool Dev Tools Open Source v0.4.12 · 11.05.2026 активный

Стандартный фреймворк для оценки и бенчмаркинга LLM. Используется исследователями для сравнения моделей — 400+ датасетов из коробки, единый интерфейс. Возможности: - 400+ встроенных задач: MMLU, HellaSwag, TruthfulQA, HumanEval... - Поддержка HuggingFace, OpenAI, Anthropic, vLLM, Ollama - Few-shot и zero-shot оценка - Кастомные задачи через YAML - Параллельный запуск на нескольких GPU - JSON-отчёты для сравнения моделей - Является основой Open LLM Leaderboard на HF

v0.4.12
11.05.2026 current
Добавлен 18.06.2026 · Обновлён 18.06.2026 · Dev Tools
Установка
# pip:
pip install lm-eval

# Запуск оценки (HuggingFace модель):
lm_eval --model hf \
  --model_args pretrained=mistralai/Mistral-7B-v0.1 \
  --tasks mmlu,hellaswag \
  --device cuda:0 \
  --batch_size 8

# OpenAI:
lm_eval --model openai-completions \
  --model_args model=gpt-4o \
  --tasks gsm8k

# Результаты сохраняются в results.json
переведено ИИ

Инструмент Оценки Языковых Моделей

DOI


Последние Новости 📣

  • [2025/12] CLI рефакторинг с подкомандами (run, ls, validate) и поддержкой конфигурационных YAML-файлов через --config. См. Справочник по CLI) и Руководство по Конфигурации).
  • [2025/12] Более легкая установка: Базовый пакет больше не включает transformers/torch. Устанавливайте бэкенды моделей отдельно: pip install lm_eval[hf], lm_eval[vllm] и т.д.
  • [2025/07] Добавлен аргумент think_end_token для hf (токен/строка), vllm и sglang (строка) для удаления следов рассуждений CoT у моделей, которые их поддерживают.
  • [2025/03] Добавлена поддержка навигации (steering) для моделей HuggingFace!
  • [2025/02] Добавлена поддержка SGLang!
  • [2024/09] Мы создаем прототип, позволяющий пользователям LM Evaluation Harness создавать и оценивать задачи с текстовыми+изображениями (мультимодальные входы) и текстовыми выходами. Только что добавлены типы моделей hf-multimodal и vllm-vlm, а также задача mmmu в качестве прототипа. Мы приглашаем пользователей попробовать эту дорабатываемую функцию и провести ее собственное стресс-тестирование, а также рекомендуем ознакомиться с lmms-eval, замечательным проектом, первоначально форкнувшим lm-evaluation-harness, для более широкого набора мультимодальных задач, моделей и возможностей.
  • [2024/07] Поддержка API моделей) была обновлена и отрефакторена, внедрена поддержка пакетных и асинхронных запросов, что значительно упростило ее настройку и использование для ваших целей. Для запуска Llama 405B мы рекомендуем использовать OpenAI-совместимый API vLLM для хостинга модели, а для оценки модели использовать тип модели local-completions.
  • [2024/07] Добавлены новые задачи для Open LLM Leaderboard! Вы можете найти их в группе задач leaderboard).

Объявление

Доступен новый релиз v0.4.0 lm-evaluation-harness!

Новые обновления и возможности включают:

  • Добавлены новые задачи для Open LLM Leaderboard! Вы можете найти их в группе задач leaderboard).
  • Внутренний рефакторинг
  • Создание и конфигурация задач на основе конфигурационных файлов
  • Более простой импорт и обмен внешними YAML-конфигурациями задач
  • Поддержка проектирования промптов с помощью Jinja2, легкое изменение промптов + импорт промптов из Promptsource
  • Более продвинутые параметры конфигурации, включая постобработку вывода, извлечение ответов, несколько генераций LM на документ, настраиваемые параметры fewshot и многое другое
  • Ускорение и поддержка новых библиотек для моделей, включая: более быстрое использование моделей HF в режиме данных-параллелизма, поддержку vLLM, поддержку MPS с HuggingFace и многое другое
  • Изменения в логировании и удобстве использования
  • Новые задачи, включая CoT BIG-Bench-Hard, Belebele, пользовательские группировки задач и другое

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

Разработка будет продолжаться на ветке main, и мы приглашаем вас делиться с нами обратной связью о том, какие функции желательны и как further улучшить библиотеку, а также задавать вопросы либо в issues или PR на GitHub, либо в EleutherAI discord!


Обзор

Этот проект предоставляет единую фреймворк для тестирования генеративных языковых моделей на большом количестве различных задач оценки.

Возможности:

  • Более 60 стандартных академических бенчмарков для LLM, с реализацией сотен подзадач и вариантов.
  • Поддержка моделей, загруженных через transformers (включая квантизацию через GPTQModel и AutoGPTQ), GPT-NeoX и Megatron-DeepSpeed, с гибким интерфейсом, независимым от токенизатора.
  • Поддержка быстрого и экономящего память вывода с vLLM.
  • Поддержка коммерческих API, включая OpenAI и TextSynth.
  • Поддержка оценки на адаптерах (например, LoRA), поддерживаемых в библиотеке PEFT от HuggingFace.
  • Поддержка локальных моделей и бенчмарков.
  • Оценка с использованием общедоступных промптов обеспечивает воспроизводимость и сопоставимость между статьями.
  • Простая поддержка пользовательских промптов и метрик оценки.

Инструмент Оценки Языковых Моделей является бэкендом для популярного Open LLM Leaderboard от 🤗 Hugging Face, был использован в сотнях статей и используется внутренне десятками организаций, включая NVIDIA, Cohere, BigScience, BigCode, Nous Research и Mosaic ML.

Установка

Чтобы установить пакет lm-eval из репозитория github, выполните:

git clone --depth 1 https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
pip install -e .

Установка Бэкендов Моделей

Базовая установка предоставляет основной фреймворк оценки. Бэкенды моделей должны быть установлены отдельно с использованием необязательных дополнений:

Для моделей HuggingFace transformers:

pip install "lm_eval[hf]"

Для вывода с vLLM:

pip install "lm_eval[vllm]"

Для моделей на основе API (OpenAI, Anthropic и т.д.):

pip install "lm_eval[api]"

Несколько бэкендов могут быть установлены вместе:

pip install "lm_eval[hf,vllm,api]"

Подробная таблица всех необязательных дополнений приведена в конце этого документа.

Базовое Использование

Документация

Руководство Описание
Справочник по CLI) Аргументы командной строки и подкоманды
Руководство по Конфигурации) Формат YAML-конфигурационных файлов и примеры
Python API) Программное использование через simple_evaluate()
Руководство по Задачам) Доступные задачи и конфигурация задач

Используйте lm-eval -h для просмотра доступных опций или lm-eval run -h для опций оценки.

Просмотрите доступные задачи с помощью:

lm-eval ls tasks

Hugging Face transformers

[!Important] Для использования бэкенда HuggingFace сначала установите: pip install "lm_eval[hf]"

Чтобы оценить модель, размещенную на HuggingFace Hub (например, GPT-J-6B), на задаче hellaswag, вы можете использовать следующую команду (предполагается, что вы используете GPU совместимый с CUDA):

lm_eval --model hf \
    --model_args pretrained=EleutherAI/gpt-j-6B \
    --tasks hellaswag \
    --device cuda:0 \
    --batch_size 8

Дополнительные аргументы могут быть переданы конструктору модели с помощью флага --model_args. Наиболее примечательно, это поддерживает общую практику использования функции revisions на Hub для хранения частично обученных контрольных точек или для указания типа данных для запуска модели:

lm_eval --model hf \
    --model_args pretrained=EleutherAI/pythia-160m,revision=step100000,dtype="float" \
    --tasks lambada_openai,hellaswag \
    --device cuda:0 \
    --batch_size 8

Поддерживаются модели, загруженные как через transformers.AutoModelForCausalLM (авторегрессионные, декодерные модели в стиле GPT), так и через transformers.AutoModelForSeq2SeqLM (такие как encoder-decoder модели, такие как T5) в Huggingface.

Выбор размера партии может быть автоматизирован путем установки флага --batch_size в значение auto. Это выполнит автоматическое определение максимального размера партии, который поместится на вашем устройстве. На задачах, где существует большое различие между самыми длинными и самыми короткими примерами, может быть полезно периодически пересчитывать максимальный размер партии для получения дополнительного ускорения. Для этого добавьте :N к вышеуказанному флагу для автоматического пересчета максимального размера партии N раз. Например, чтобы пересчитать размер партии 4 раза, команда была бы:

lm_eval --model hf \
    --model_args pretrained=EleutherAI/pythia-160m,revision=step100000,dtype="float" \
    --tasks lambada_openai,hellaswag \
    --device cuda:0 \
    --batch_size auto:4

[!Note] Так же, как вы можете предоставить локальный путь к transformers.AutoModel, вы также можете предоставить локальный путь к lm_eval через --model_args pretrained=/path/to/model

Оценка Моделей в Формате GGUF

lm-eval поддерживает оценку моделей в формате GGUF, используя бэкенд Hugging Face (hf). Это позволяет вам использовать квантизованные модели, совместимые с transformers, AutoModel и конвертациями llama.cpp.

Для оценки модели GGUF передайте путь к каталогу, содержащему веса модели, gguf_file, и опционально отдельный путь к tokenizer, используя флаг --model_args.

🚨 Важное Примечание:
Если отдельный токенизатор не указан, Hugging Face попытается реконструировать токенизатор из GGUF-файла — это может занять часы или даже зависнуть навсегда. Передача отдельного токенизатора избегает этой проблемы и может сократить время загрузки токенизатора с часов до секунд.

✅ Рекомендуемое использование:

lm_eval --model hf \
    --model_args pretrained=/path/to/gguf_folder,gguf_file=model-name.gguf,tokenizer=/path/to/tokenizer \
    --tasks hellaswag \
    --device cuda:0 \
    --batch_size 8

[!Tip] Убедитесь, что путь к токенизатору указывает на действительный каталог токенизатора Hugging Face (например, содержащий tokenizer_config.json, vocab.json и т.д.).

Мульти-GPU Оценка с Hugging Face accelerate

Мы поддерживаем три основных способа использования библиотеки accelerate 🚀 от Hugging Face для мульти-GPU оценки.

Для выполнения оценки данных-параллелизма (где каждый GPU загружает отдельную полную копию модели) мы используем запуск accelerate следующим образом:

accelerate launch -m lm_eval --model hf \
    --tasks lambada_openai,arc_easy \
    --batch_size 16

(или через accelerate launch --no-python lm_eval).

В случаях, когда ваша модель помещается на один GPU, это позволяет вам оценивать на K GPU в K раз быстрее, чем на одном.

ПРЕДУПРЕЖДЕНИЕ: Эта конфигурация не работает с FSDP-распределением моделей, поэтому в accelerate config FSDP должен быть отключен, или должен использоваться вариант NO_SHARD FSDP.

Второй способ использования accelerate для мульти-GPU оценки — когда ваша модель слишком велика, чтобы поместиться на одном GPU.

В этой конфигурации запускайте библиотеку вне запуска accelerate, но передавая parallelize=True в --model_args следующим образом:

lm_eval --model hf \
    --tasks lambada_openai,arc_easy \
    --model_args parallelize=True \
    --batch_size 16

Это означает, что веса вашей модели будут распределены между всеми доступными GPU.

Для более продвинутых пользователей или еще более крупных моделей мы разрешаем следующие аргументы при parallelize=True также:

  • device_map_option: Как распределять веса модели по доступным GPU. По умолчанию "auto".
  • max_memory_per_gpu: максимальный объем памяти GPU для использования на GPU при загрузке модели.
  • max_cpu_memory: максимальный объем памяти CPU для использования при выгрузке весов модели в ОЗУ.
  • offload_folder: папка, куда веса модели будут выгружены на диск при необходимости.

Третий вариант — использовать оба способа одновременно. Это позволит вам использовать преимущества как данных-параллелизма, так и распределения модели, и особенно полезно для моделей, которые слишком велики, чтобы поместиться на одном GPU.

accelerate launch --multi_gpu --num_processes {nb_of_copies_of_your_model} \
    -m lm_eval --model hf \
    --tasks lambada_openai,arc_easy \
    --model_args parallelize=True \
    --batch_size 16

Чтобы узнать больше о параллелизме моделей и о том, как использовать его с библиотекой accelerate, см. документацию accelerate

Предупреждение: Мы не поддерживаем нативную многоузловую оценку с использованием типа модели hf! Пожалуйста, обратитесь к нашей интеграции с библиотекой GPT-NeoX для примера кода, в котором написан пользовательский скрипт многоузловой оценки.

Примечание: мы в настоящее время не поддерживаем многоузловые оценки нативно и рекомендуем либо использовать внешний сервер для запуска запросов на вывод, либо создавать пользовательскую интеграцию с вашим распределенным фреймворком как это сделано для библиотеки GPT-NeoX.

Тензорный Параллелизм (нативный PyTorch)

Для моделей, поддерживающих нативный Тензорный Параллелизм PyTorch (через DTensor), вы можете распределять веса модели по GPU без device-map из accelerate, передавая tp_plan=auto в --model_args. Запустите с torchrun или accelerate launch:

torchrun --nproc-per-node=4 -m lm_eval \
    --model hf \
    --model_args pretrained=google/gemma-4-31B-it,tp_plan=auto \
    --tasks lambada_openai,arc_easy \
    --batch_size 16

Ограничения:

  • tp_plan и parallelize=True взаимно исключают друг друга — используйте только один из них.
  • Количество ключевых-головок (key-value heads) в модели должно быть кратно --nproc-per-node (степень TP).
  • Требуется PyTorch >= 2.4 и версия transformers, которая предоставляет TP-план для модели (v4.47+).

Направленные (Steered) Модели Hugging Face transformers

Чтобы оценить модель Hugging Face transformers с применением векторов навигации (steering vectors), укажите тип модели как steered и предоставьте путь к либо PyTorch-файлу, содержащему предопределенные векторы навигации, либо CSV-файлу, который определяет, как выводить векторы навигации из предобученных моделей sparsify или sae_lens (вам придется установить соответствующую необязательную зависимость для этого метода).

Укажите предопределенные векторы навигации:

import torch

steer_config = {
    "layers.3": {
        "steering_vector": torch.randn(1, 768),
        "bias": torch.randn(1, 768),
        "steering_coefficient": 1,
        "action": "add"
    },
}
torch.save(steer_config, "steer_config.pt")

Укажите выводимые векторы навигации:

import pandas as pd

pd.DataFrame({
    "loader": ["sparsify"],
    "action": ["add"],
    "sparse_model": ["EleutherAI/sae-pythia-70m-32k"],
    "hookpoint": ["layers.3"],
    "feature_index": [30],
    "steering_coefficient": [10.0],
}).to_csv("steer_config.csv", index=False)

Запустите инструмент оценки с применением векторов навигации:

lm_eval --model steered \
    --model_args pretrained=EleutherAI/pythia-160m,steer_path=steer_config.pt \
    --tasks lambada_openai,hellaswag \
    --device cuda:0 \
    --batch_size 8

Модели NVIDIA nemo

NVIDIA NeMo Framework — это фреймворк для генеративного ИИ, созданный для исследователей и разработчиков pytorch, работающих над языковыми моделями.

Для оценки модели nemo начните с установки NeMo, следуя документации. Мы настоятельно рекомендуем использовать контейнер NVIDIA PyTorch или NeMo, особенно если возникают проблемы с установкой Apex или других зависимостей (см. последние выпущенные контейнеры). Пожалуйста, также установите библиотеку lm evaluation harness, следуя инструкциям в разделе Установки.

Модели NeMo можно получить через Каталог NVIDIA NGC или на странице Hugging Face NVIDIA. В NVIDIA NeMo Framework есть скрипты конвертации для преобразования контрольных точек hf популярных моделей, таких как llama, falcon, mixtral или mpt, в формат nemo.

Запустите модель nemo на одном GPU:

lm_eval --model nemo_lm \
    --model_args path=<path_to_nemo_model> \
    --tasks hellaswag \
    --batch_size 32

Рекомендуется распаковать модель nemo, чтобы избежать распаковки внутри docker-контейнера - это может переполнить дисковое пространство. Для этого вы можете выполнить:

mkdir MY_MODEL
tar -xvf MY_MODEL.nemo -c MY_MODEL

Мульти-GPU Оценка с моделями NVIDIA nemo

По умолчанию используется только один GPU. Но мы поддерживаем либо репликацию данных, либо тензорный/конвейерный параллелизм во время оценки, на одном узле.

1) Чтобы включить репликацию данных, установите model_args для devices на количество реплик данных для запуска. Например, команда для запуска 8 реплик данных на 8 GPU:

torchrun --nproc-per-node=8 --no-python lm_eval \
    --model nemo_lm \
    --model_args path=<path_to_nemo_model>,devices=8 \
    --tasks hellaswag \
    --batch_size 32

1) Чтобы включить тензорный и/или конвейерный параллелизм, установите model_args для tensor_model_parallel_size и/или pipeline_model_parallel_size. Кроме того, вы также должны установить devices равным произведению tensor_model_parallel_size и/или pipeline_model_parallel_size. Например, команда для использования одного узла из 4 GPU с тензорным параллелизмом 2 и конвейерным параллелизмом 2:

torchrun --nproc-per-node=4 --no-python lm_eval \
    --model nemo_lm \
    --model_args path=<path_to_nemo_model>,devices=4,tensor_model_parallel_size=2,pipeline_model_parallel_size=2 \
    --tasks hellaswag \
    --batch_size 32

Обратите внимание, что рекомендуется заменить команду python на torchrun --nproc-per-node=<количество устройств> --no-python для упрощения загрузки модели в GPU. Это особенно важно для больших контрольных точек, загружаемых на несколько GPU.

Не поддерживается: многоузловая оценка и комбинации репликации данных с тензорным или конвейерным параллелизмом.

Модели Megatron-LM

Megatron-LM — это фреймворк обучения трансформеров от NVIDIA масштабе. Этот бэкенд позволяет напрямую оценивать контрольные точки Megatron-LM без конвертации.

Требования: - Megatron-LM должен быть установлен или доступен через переменную окружения MEGATRON_PATH - PyTorch с поддержкой CUDA

Настройка:

# Установите переменную окружения, указывающую на установку Megatron-LM
export MEGATRON_PATH=/path/to/Megatron-LM

Базовое использование (один GPU):

lm_eval --model megatron_lm \
    --model_args load=/path/to/checkpoint,tokenizer_type=HuggingFaceTokenizer,tokenizer_model=/path/to/tokenizer \
    --tasks hellaswag \
    --batch_size 1

Поддерживаемые форматы контрольных точек: - Стандартные контрольные точки Megatron (model_optim_rng.pt) - Распределенные контрольные точки (формат .distcp, определяется автоматически)

Режимы Параллелизма

Бэкенд Megatron-LM поддерживает следующие режимы параллелизма:

Режим Конфигурация Описание
Один GPU devices=1 (по умолчанию) Стандартная оценка на одном GPU
Данные-параллелизм devices>1, TP=1 Каждый GPU имеет полную копию модели, данные распределяются
Тензорный параллелизм TP == devices Слои модели разделены по GPU
Экспертный параллелизм EP == devices, TP=1 Для моделей MoE, эксперты распределяются по GPU

[!Note] - Конвейерный параллелизм (PP > 1) в настоящее время не поддерживается. - Экспертный параллелизм (EP) не может быть скомбинирован с Тензорным параллелизмом (TP).

Данные-параллелизм (4 GPU, каждый с полной копией модели):

torchrun --nproc-per-node=4 -m lm_eval --model megatron_lm \
    --model_args load=/path/to/checkpoint,tokenizer_model=/path/to/tokenizer,devices=4 \
    --tasks hellaswag

Тензорный параллелизм (TP=2):

torchrun --nproc-per-node=2 -m lm_eval --model megatron_lm \
    --model_args load=/path/to/checkpoint,tokenizer_model=/path/to/tokenizer,devices=2,tensor_model_parallel_size=2 \
    --tasks hellaswag

Экспертный параллелизм для моделей MoE (EP=4):

torchrun --nproc-per-node=4 -m lm_eval --model megatron_lm \
    --model_args load=/path/to/moe_checkpoint,tokenizer_model=/path/to/tokenizer,devices=4,expert_model_parallel_size=4 \
    --tasks hellaswag

Использование extra_args для дополнительных опций Megatron:

lm_eval --model megatron_lm \
    --model_args load=/path/to/checkpoint,tokenizer_model=/path/to/tokenizer,extra_args="--no-rope-fusion --trust-remote-code" \
    --tasks hellaswag

[!Note] Флаг --use-checkpoint-args включен по умолчанию, который загружает параметры архитектуры модели из контрольной точки. Для контрольных точек, конвертированных через Megatron-Bridge, это обычно включает все необходимые конфигурации модели.

Мульти-GPU Оценка с моделями OpenVINO

Конвейерный параллелизм во время оценки поддерживается с моделями OpenVINO.

Для включения конвейерного параллелизма установите model_args для pipeline_parallel. Кроме того, вы также должны установить device в значение HETERO:<индекс GPU1>,<индекс GPU2>, например HETERO:GPU.1,GPU.0. Например, команда для использования конвейерного параллелизма 2:

lm_eval --model openvino \
    --tasks wikitext \
    --model_args pretrained=<path_to_ov_model>,pipeline_parallel=True \
    --device HETERO:GPU.1,GPU.0

Тензор + Данные Параллелизм и Оптимизированный Вывод с vLLM

Мы также поддерживаем vLLM для более быстрого вывода на поддерживаемых типах моделей, особенно быстрее при разделении модели между несколькими GPU. Для вывода на одном или нескольких GPU — тензорный параллелизм, данные-параллелизм или их комбинация — например:

lm_eval --model vllm \
    --model_args pretrained={model_name},tensor_parallel_size={GPUs_per_model},dtype=auto,gpu_memory_utilization=0.8,data_parallel_size={model_replicas} \
    --tasks lambada_openai \
    --batch_size auto

Для использования vllm выполните pip install "lm_eval[vllm]". Полный список поддерживаемых конфигураций vLLM см. в нашей интеграции vLLM и документации vLLM.

[!Note] data_parallel_size>1 dispatches каждую реплику как отдельного ray актора и требует pip install ray. Каждый актор резервирует tensor_parallel_size

Комментарии
Войдите, чтобы оставить комментарий