🏠 Главная › user guide › mlops evaluation lm evaluation harness
{/ Эта страница автоматически создается на основе файла SKILL.md навыка с помощью сайта site/scripts/generate-skill-docs.py. Редактируйте исходный код SKILL.md, а не эту страницу. /}
Оценка ремня Llms
lm-eval-harness: эталонные LLM (MMLU, GSM8K и т. д.).
Ниже приведено полное определение навыка, которое Гермес загружает при активации этого навыка. Это то, что агент видит в качестве инструкций, когда навык активен.
lm-evaluation-harness - Бенчмаркинг LLM
Что внутри
Оценивает LLM по более чем 60 академическим критериям (MMLU, HumanEval, GSM8K, TruthfulQA, HellaSwag). Используйте при сравнительном анализе качества модели, сравнении моделей, составлении отчетов об академических результатах или отслеживании прогресса обучения. Отраслевой стандарт, используемый EleutherAI, HuggingFace и крупными лабораториями. Поддерживает HuggingFace, vLLM, API.
Быстрый старт
lm-evaluation-harness оценивает LLM по более чем 60 академическим критериям, используя стандартизированные подсказки и показатели.
Основные критерии рассуждения:
- MMLU (Массовое многозадачное понимание языка) - 57 предметов, множественный выбор
- GSM8K - Задачи по математике в начальной школе
- HellaSwag - Рассуждения, основанные на здравом смысле
- TruthfulQA - Правдивость и достоверность
- ARC (Задание на рассуждение AI2) – Научные вопросы
Бенчмарки кода:
- HumanEval — генерация кода Python (164 задачи)
- MBPP (в основном базовые проблемы Python) - Кодирование на Python
# Full MMLU evaluation (57 subjects)
lm_eval--modelhf\--model_argspretrained=meta-llama/Llama-2-7b-hf\--tasksmmlu\--num_fewshot5\ # 5-shot evaluation (standard)--batch_size8\--output_pathresults/\--log_samples# Save individual predictions# Multiple benchmarks at once
lm_eval--modelhf\--model_argspretrained=meta-llama/Llama-2-7b-hf\--tasksmmlu,gsm8k,hellaswag,truthfulqa,arc_challenge\--num_fewshot5\--batch_size8\--output_pathresults/llama2-7b-eval.json
Шаг 4. Анализ результатов
Результаты сохранены в файлеresults/llama2-7b-eval.json:
#!/bin/bash# eval_checkpoint.shCHECKPOINT_DIR=$1STEP=$2
lm_eval--modelhf\--model_argspretrained=$CHECKPOINT_DIR/checkpoint-$STEP\--tasksgsm8k,hellaswag\--num_fewshot0\ # 0-shot for speed--batch_size16\--output_pathresults/step-$STEP.json
Шаг 2. Выберите быстрые тесты
Быстрые тесты для частой оценки:
- HellaSwag: ~10 минут на 1 графическом процессоре.
- GSM8K: ~5 минут
- ПИКА: ~2 минуты.
Избегайте частой оценки (слишком медленно):
- MMLU: ~2 часа (57 субъектов)
- HumanEval: требует выполнения кода.
Шаг 3. Автоматизируйте оценку
Интеграция со сценарием обучения:
# In training loopifstep%eval_interval==0:model.save_pretrained(f"checkpoints/step-{step}")# Run evaluationos.system(f"./eval_checkpoint.sh checkpoints step-{step}")
Или используйте обратные вызовы PyTorch Lightning:
frompytorch_lightningimportCallbackclassEvalHarnessCallback(Callback):defon_validation_epoch_end(self,trainer,pl_module):step=trainer.global_stepcheckpoint_path=f"checkpoints/step-{step}"# Save checkpointtrainer.save_checkpoint(checkpoint_path)# Run lm-evalos.system(f"lm_eval --model hf --model_args pretrained={checkpoint_path}...")
Шаг 4. Постройте кривые обучения
importjsonimportmatplotlib.pyplotasplt# Load all resultssteps=[]mmlu_scores=[]forfileinsorted(glob.glob("results/step-*.json")):withopen(file)asf:data=json.load(f)step=int(file.split("-")[1].split(".")[0])steps.append(step)mmlu_scores.append(data["results"]["mmlu"]["acc"])# Plotplt.plot(steps,mmlu_scores)plt.xlabel("Training Step")plt.ylabel("MMLU Accuracy")plt.title("Training Progress")plt.savefig("training_curve.png")
Рабочий процесс 3: сравнение нескольких моделей
Пакет тестов для сравнения моделей.
Model Comparison:
- [ ] Step 1: Define model list
- [ ] Step 2: Run evaluations
- [ ] Step 3: Generate comparison table
#!/bin/bash# eval_all_models.shTASKS="mmlu,gsm8k,hellaswag,truthfulqa"whilereadmodel;doecho"Evaluating $model"# Extract model name for output filemodel_name=$(echo$model|sed's/\//-/g')lm_eval--modelhf\--model_argspretrained=$model,dtype=bfloat16\--tasks$TASKS\--num_fewshot5\--batch_sizeauto\--output_pathresults/$model_name.json
done<models.txt
Шаг 3. Создайте сравнительную таблицу
importjsonimportpandasaspdmodels=["meta-llama-Llama-2-7b-hf","meta-llama-Llama-2-13b-hf","mistralai-Mistral-7B-v0.1","microsoft-phi-2"]tasks=["mmlu","gsm8k","hellaswag","truthfulqa"]results=[]formodelinmodels:withopen(f"results/{model}.json")asf:data=json.load(f)row={"Model":model.replace("-","/")}fortaskintasks:# Get primary metric for each taskmetrics=data["results"][task]if"acc"inmetrics:row[task.upper()]=f"{metrics['acc']:.3f}"elif"exact_match"inmetrics:row[task.upper()]=f"{metrics['exact_match']:.3f}"results.append(row)df=pd.DataFrame(results)print(df.to_markdown(index=False))
# Standard HF: ~2 hours for MMLU on 7B model
lm_eval--modelhf\--model_argspretrained=meta-llama/Llama-2-7b-hf\--tasksmmlu\--batch_size8# vLLM: ~15-20 minutes for MMLU on 7B model
lm_eval--modelvllm\--model_argspretrained=meta-llama/Llama-2-7b-hf,tensor_parallel_size=2\--tasksmmlu\--batch_sizeauto
Когда использовать альтернативы
Используйте lm-evaluation-harness, когда:
- Модели сравнительного анализа научных работ.
- Сравнение качества модели в стандартных задачах.
- Отслеживание прогресса обучения
- Отчетность по стандартизированным показателям (все используют одни и те же подсказки)
- Нужна воспроизводимая оценка
Вместо этого используйте альтернативы:
- HELM (Стэнфорд): более широкая оценка (справедливость, эффективность, калибровка)
- AlpacaEval: оценка после выполнения инструкций судьями LLM.
- MT-Bench: многоходовая диалоговая оценка.
- Пользовательские сценарии: оценка для конкретного домена.
Стратегии с несколькими графическими процессорами: см. references/distributed-eval.md для параллельной обработки данных и тензорной параллельной оценки.
Требования к оборудованию
ГП: NVIDIA (CUDA 11.8+), работает на ЦП (очень медленно)
ВОЗУ:
Модель 7B: 16 ГБ (bf16) или 8 ГБ (8-разрядная версия)
Модель 13B: 28 ГБ (bf16) или 14 ГБ (8-бит)
Модель 70B: требуется несколько графических процессоров или квантование.