by EleutherAI (open source) Python, HuggingFace, OpenAI, любые LLM
Стандартный фреймворк для оценки и бенчмаркинга LLM. Используется исследователями для сравнения моделей — 400+ датасетов из коробки, единый интерфейс. Возможности: - 400+ встроенных задач: MMLU, HellaSwag, TruthfulQA, HumanEval... - Поддержка HuggingFace, OpenAI, Anthropic, vLLM, Ollama - Few-shot и zero-shot оценка - Кастомные задачи через YAML - Параллельный запуск на нескольких GPU - JSON-отчёты для сравнения моделей - Является основой Open LLM Leaderboard на HF
# 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
run, ls, validate) и поддержкой конфигурационных YAML-файлов через --config. См. Справочник по CLI) и Руководство по Конфигурации).transformers/torch. Устанавливайте бэкенды моделей отдельно: pip install lm_eval[hf], lm_eval[vllm] и т.д.think_end_token для hf (токен/строка), vllm и sglang (строка) для удаления следов рассуждений CoT у моделей, которые их поддерживают.hf-multimodal и vllm-vlm, а также задача mmmu в качестве прототипа. Мы приглашаем пользователей попробовать эту дорабатываемую функцию и провести ее собственное стресс-тестирование, а также рекомендуем ознакомиться с lmms-eval, замечательным проектом, первоначально форкнувшим lm-evaluation-harness, для более широкого набора мультимодальных задач, моделей и возможностей.local-completions.Доступен новый релиз v0.4.0 lm-evaluation-harness!
Новые обновления и возможности включают:
Пожалуйста, ознакомьтесь с нашими обновленными страницами документации в docs/ для получения более подробной информации.
Разработка будет продолжаться на ветке main, и мы приглашаем вас делиться с нами обратной связью о том, какие функции желательны и как further улучшить библиотеку, а также задавать вопросы либо в issues или PR на GitHub, либо в EleutherAI discord!
Этот проект предоставляет единую фреймворк для тестирования генеративных языковых моделей на большом количестве различных задач оценки.
Возможности:
Инструмент Оценки Языковых Моделей является бэкендом для популярного 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
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
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 и т.д.).
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 (через 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 взаимно исключают друг друга — используйте только один из них.--nproc-per-node (степень TP).transformers, которая предоставляет TP-план для модели (v4.47+).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
nemoNVIDIA 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
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 — это фреймворк обучения трансформеров от 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, это обычно включает все необходимые конфигурации модели.
Конвейерный параллелизм во время оценки поддерживается с моделями 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>1dispatches каждую реплику как отдельного ray актора и требуетpip install ray. Каждый актор резервируетtensor_parallel_size