name: lm-evaluation-harness
description: Framework d'évaluation LLM (lm-evaluation-harness EleutherAI). Évaluation unifiée de benchmarks pour modèles de langage avec 200+ tâches, support pour HuggingFace transformers, vLLM, SGLang, OpenAI API, GGUF, et modèles personnalisés. Utilisé par HuggingFace Open LLM Leaderboard. Couvre MMLU, HellaSwag, ARC, GSM8K, HumanEval, BBH, TruthfulQA, et plus.
license: MIT license
tags: [llm-evaluation, benchmark-suite, leaderboard-eval, few-shot-eval, lm-evaluation-harness]
metadata:
skill-author: K-Dense Inc.
---|
| leaderboard | MMLU, ARC, HellaSwag, TruthfulQA, Winogrande, GSM8K | Suite Open LLM Leaderboard |
| mmlu | 57 sujets (STEM, sciences humaines, sciences sociales) | Connaissances générales + raisonnement |
| gsm8k | Problèmes mathématiques d'école primaire | Raisonnement mathématique |
| hellaswag | NLI sens commun | Raisonnement du sens commun |
| arc_challenge | Questions d'examen scientifique | Raisonnement scientifique |
| truthfulqa | Questions adversariales | Véracité/hallucination |
| humaneval | Génération de code Python | Capacité de programmation |
| bigbench | 200+ tâches BIG-Bench | Évaluation large des capacités |
| ifeval | Suivi d'instructions | Respect des instructions |
Exécuter la suite leaderboard :
lm-eval run \
--model hf \
--model_args pretrained=your-model \
--tasks leaderboard \
--device cuda:0 \
--batch_size auto
4. API Python
from lm_eval import simple_evaluate
results = simple_evaluate(
model="hf",
model_args={"pretrained": "meta-llama/Llama-3.2-1B"},
tasks=["mmlu", "hellaswag", "gsm8k"],
device="cuda:0",
batch_size="auto",
limit=100, # Optionnel : limiter les échantillons par tâche
)
# Accéder aux résultats
for task, metrics in results["results"].items():
print(f"{task}: {metrics}")
# Tableau formaté
print(results["configs"])
print(results["samples"]) # Sorties par échantillon
5. Évaluer des adaptateurs LoRA / PEFT
lm-eval run \
--model hf \
--model_args pretrained=meta-llama/Llama-3.2-1B,peft=/path/to/lora_adapter \
--tasks mmlu \
--device cuda:0
En Python :
from lm_eval import simple_evaluate
results = simple_evaluate(
model="hf",
model_args={
"pretrained": "meta-llama/Llama-3.2-1B",
"peft": "/path/to/lora_adapter",
},
tasks=["mmlu"],
)
6. Évaluation multi-GPU
Data-parallel (modèle tient sur un seul GPU) :
accelerate launch -m lm_eval \
--model hf \
--model_args pretrained=model-name \
--tasks lambada_openai,arc_easy \
--batch_size 16
Model-parallel (modèle trop volumineux pour un GPU) :
lm-eval run \
--model hf \
--model_args pretrained=model-name,parallelize=True \
--tasks mmlu \
--batch_size 8
Les deux (data + model parallel) :
accelerate launch --multi_gpu --num_processes 4 \
-m lm_eval \
--model hf \
--model_args pretrained=model-name,parallelize=True \
--tasks mmlu \
--batch_size 8
7. Évaluation de modèles API
API compatible OpenAI :
export OPENAI_API_KEY=your-key
lm-eval run \
--model openai-completions \
--model_args model=gpt-4o,base_url=https://api.openai.com/v1/completions \
--tasks mmlu \
--batch_size 32
Serveur local (vLLM déployé) :
lm-eval run \
--model local-completions \
--model_args model=local-model,base_url=http://localhost:8000/v1/completions \
--tasks mmlu
8. Tâches personnalisées (config YAML)
Créer une tâche personnalisée à lm_eval/tasks/my_task/my_task.yaml :
task: my_custom_task
dataset_path: my-dataset
dataset_name: default
output_type: multiple_choice
training_split: train
validation_split: validation
doc_to_text: "Question: {{question}}\nA. {{choices[0]}}\nB. {{choices[1]}}\nC. {{choices[2]}}\nD. {{choices[3]}}\nAnswer:"
doc_to_target: "{{answer}}"
doc_to_choice: "{{choices}}"
metric_list:
- metric: acc
L'exécuter :
lm-eval run --model hf --model_args pretrained=model-name --tasks my_custom_task
9. Configuration few-shot
lm-eval run \
--model hf \
--model_args pretrained=model-name \
--tasks mmlu \
--num_fewshot 5 \
--fewshot_random_seed 42
10. Formats de journalisation et de sortie
# Sortie JSON
lm-eval run --model hf --model_args pretrained=model-name \
--tasks mmlu --output_path results/
# Journalisation W&B
lm-eval run --model hf --model_args pretrained=model-name \
--tasks mmlu --wandb_args project=eval-runs
Conseils clés pour l'évaluation
- Utiliser
--batch_size auto— détection automatique de la taille du batch maximise le débit - Toujours définir un
--seedpour la reproductibilité entre les exécutions d'évaluation - Préférer le backend vLLM pour les modèles >7B — 5-10x plus rapide que HF
- Utiliser
--limit 100durant le développement pour tester rapidement la configuration des tâches - mmlu utilise 5-shot par défaut, tandis que la plupart des tâches sont 0-shot
- Installer les backends de modèles séparément — le package de base est volontairement léger
- L'évaluation GGUF nécessite un chemin tokenizer explicite — l'omettre et le chargement risque de se bloquer