name: lighteval
description: "Kit d'évaluation LLM tout-en-un (HuggingFace LightEval). 1000+ tâches avec support multi-backend : Accelerate, vLLM, SGLang, Nanotron, TGI, LiteLLM, fournisseurs d'inférence et modèles personnalisés. Exploration des résultats échantillon par échantillon, création de tâches/métriques personnalisées. Utilisé par l'équipe Leaderboard et Evals de HuggingFace. Pour l'évaluation pure de modèles de style GPT, considérez aussi lm-evaluation-harness."
license: MIT license
tags: [multilingual-benchmarks, backend-flexible-eval, sample-level-analysis, custom-metrics, lighteval]
metadata:
skill-author: K-Dense Inc.
------|---------|----------|
| inspect-ai | lighteval eval | Backend préféré, moderne |
| Accelerate | lighteval accelerate | Modèles locaux single/multi-GPU |
| vLLM | lighteval vllm | Inférence par batch rapide |
| SGLang | lighteval sglang | Evals de génération structurée |
| Nanotron | lighteval nanotron | Évaluation d'entraînement distribué |
| TGI | lighteval endpoint tgi | Modèles servis localement |
| LiteLLM | lighteval endpoint litellm | Toute API (OpenAI, Anthropic, etc.) |
| HF Providers | lighteval endpoint inference-providers | API hébergée HuggingFace |
| Inference Endpoints | lighteval endpoint inference-endpoint | HF Dedicated Endpoints |
| Custom | lighteval custom | Tout avec une API Python |
4. Domaines de tâches
Tâches de connaissance :
lighteval accelerate "model-name" mmlu # Connaissance 57 sujets
lighteval accelerate "model-name" mmlu-pro # MMLU plus difficile
lighteval accelerate "model-name" gpqa # Science niveau doctorat
lighteval accelerate "model-name" triviaqa # Trivia QA
lighteval accelerate "model-name" humanitys_last_exam # Questions très difficiles
Mathématiques et code :
lighteval accelerate "model-name" gsm8k # Math école primaire
lighteval accelerate "model-name" math # Maths de compétition
lighteval accelerate "model-name" aime24 # AIME 2024
lighteval accelerate "model-name" lcb # LiveCodeBench
Évaluation de modèles de chat :
lighteval accelerate "model-name" ifeval # Suivi d'instructions
lighteval accelerate "model-name" mt_bench # Dialogue multi-tour
lighteval accelerate "model-name" musr # Raisonnement multi-étapes
lighteval accelerate "model-name" ruler # Long context
Multilingue :
lighteval accelerate "model-name" mgsm # Maths en 10+ langues
lighteval accelerate "model-name" flores200 # Traduction 200 langues
lighteval accelerate "model-name" mmlu_arabic # MMLU arabe
lighteval accelerate "model-name" cmmlu # MMLU chinois
lighteval accelerate "model-name" russian_squad # QA russe
5. Tâches personnalisées
from lighteval.tasks.lighteval_task import LightevalTask
from lighteval.metrics.metrics import SampleLevelMetric
class MyCustomTask(LightevalTask):
def __init__(self, *args, **kwargs):
super().__init__(
name="my_custom_task",
version=0,
metrics=["my_metric"],
*args, **kwargs
)
def get_prompt(self, sample):
return f"Question: {sample['question']}\nAnswer:"
def process_output(self, output, sample):
# Extract answer from model output
return output.strip()
def get_gold(self, sample):
return sample["answer"]
6. Métriques personnalisées
from lighteval.metrics.metrics import SampleLevelMetric
import numpy as np
class F1Metric(SampleLevelMetric):
def __init__(self, *args, **kwargs):
super().__init__(metric_name="f1", *args, **kwargs)
def compute(self, golds, predictions, **kwargs):
# golds and predictions are lists
scores = []
for gold, pred in zip(golds, predictions):
# Compute per-sample F1
gold_tokens = set(gold.lower().split())
pred_tokens = set(pred.lower().split())
tp = len(gold_tokens & pred_tokens)
fp = len(pred_tokens - gold_tokens)
fn = len(gold_tokens - pred_tokens)
precision = tp / (tp + fp + 1e-10)
recall = tp / (tp + fn + 1e-10)
f1 = 2 * precision * recall / (precision + recall + 1e-10)
scores.append(f1)
return np.mean(scores)
7. Configuration multi-backend
# Evaluate same tasks across backends
backends = {
"vllm": "lighteval vllm",
"sglang": "lighteval sglang",
"accelerate": "lighteval accelerate",
}
for backend, cmd in backends.items():
print(f"Running {backend}...")
subprocess.run(f"{cmd} meta-llama/Meta-Llama-3-8B-Instruct mmlu gsm8k", shell=True)
8. Pousser les résultats vers le Hub HuggingFace
lighteval accelerate "model-name" mmlu \
--push-to-hub \
--push-results-dir my-org/eval-results \
--results-org my-org
# Results appear at: https://huggingface.co/my-org/eval-results
9. Découverte de tâches
# List all tasks
lighteval list-tasks
# Filter by domain
lighteval list-tasks --domain math
lighteval list-tasks --domain multilingual
# Search
lighteval list-tasks --query mmlu
Open Benchmark Index (interface web) :
- Parcourir : https://huggingface.co/spaces/OpenEvals/open_benchmark_index
- Trouver des tâches par domaine, langue, difficulté
10. Analyse détaillée des résultats
from lighteval.logging.evaluation_tracker import EvaluationTracker
tracker = EvaluationTracker(output_dir="./results")
# After evaluation:
for task_name, task_results in tracker.results.items():
print(f"\n=== {task_name} ===")
print(f" Score: {task_results['score']:.3f}")
print(f" Samples: {len(task_results['samples'])}")
# Inspect failures
failures = [s for s in task_results['samples'] if not s['correct']]
for f in failures[:5]:
print(f" Q: {f['input']}")
print(f" Predicted: {f['prediction']}")
print(f" Expected: {f['gold']}\n")
Motifs clés
- Utilisez
lighteval evalcomme point d'entrée préféré — le backend inspect-ai est le plus moderne - vLLM pour la vitesse, Accelerate pour la simplicité, LiteLLM pour l'accès à l'API
- Poussez vers le Hub pour partager les résultats et comparer les modèles
- Analyse au niveau des échantillons pour déboguer les échecs d'évaluation
- Les métriques personnalisées sont de première classe — pas besoin de forker la bibliothèque
- Open Benchmark Index pour découvrir les tâches disponibles