| name | lighteval |
| description | All-in-one LLM evaluation toolkit (HuggingFace LightEval). 1000+ tasks with multi-backend support: Accelerate, vLLM, SGLang, Nanotron, TGI, LiteLLM, inference providers, and custom models. Sample-by-sample result exploration, custom task/metric creation. Used by HuggingFace's Leaderboard and Evals team. For pure GPT-style model eval, also consider 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 | Preferred, modern backend |
| Accelerate | lighteval accelerate | Single/multi-GPU local models |
| vLLM | lighteval vllm | Fast batched inference |
| SGLang | lighteval sglang | Structured generation evals |
| Nanotron | lighteval nanotron | Distributed training evaluation |
| TGI | lighteval endpoint tgi | Locally served models |
| LiteLLM | lighteval endpoint litellm | Any API (OpenAI, Anthropic, etc.) |
| HF Providers | lighteval endpoint inference-providers | HuggingFace's hosted API |
| Inference Endpoints | lighteval endpoint inference-endpoint | HF Dedicated Endpoints |
| Custom | lighteval custom | Anything with a Python API |
4. Task Domains
Knowledge Tasks:
lighteval accelerate "model-name" mmlu
lighteval accelerate "model-name" mmlu-pro
lighteval accelerate "model-name" gpqa
lighteval accelerate "model-name" triviaqa
lighteval accelerate "model-name" humanitys_last_exam
Math and Code:
lighteval accelerate "model-name" gsm8k
lighteval accelerate "model-name" math
lighteval accelerate "model-name" aime24
lighteval accelerate "model-name" lcb
Chat Model Evaluation:
lighteval accelerate "model-name" ifeval
lighteval accelerate "model-name" mt_bench
lighteval accelerate "model-name" musr
lighteval accelerate "model-name" ruler
Multilingual:
lighteval accelerate "model-name" mgsm
lighteval accelerate "model-name" flores200
lighteval accelerate "model-name" mmlu_arabic
lighteval accelerate "model-name" cmmlu
lighteval accelerate "model-name" russian_squad
5. Custom Tasks
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):
return output.strip()
def get_gold(self, sample):
return sample["answer"]
6. Custom Metrics
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):
scores = []
for gold, pred in zip(golds, predictions):
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. Multi-Backend Configuration
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. Pushing Results to HuggingFace Hub
lighteval accelerate "model-name" mmlu \
--push-to-hub \
--push-results-dir my-org/eval-results \
--results-org my-org
9. Task Discovery
lighteval list-tasks
lighteval list-tasks --domain math
lighteval list-tasks --domain multilingual
lighteval list-tasks --query mmlu
Open Benchmark Index (web UI):
10. Detailed Result Analysis
from lighteval.logging.evaluation_tracker import EvaluationTracker
tracker = EvaluationTracker(output_dir="./results")
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'])}")
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")
Key Patterns
- Use
lighteval eval as preferred entrypoint — inspect-ai backend is most modern
- vLLM for speed, Accelerate for simplicity, LiteLLM for API access
- Push to Hub for sharing results and comparing models
- Sample-level analysis for debugging eval failures
- Custom metrics are first-class — no need to fork the library
- Open Benchmark Index for discovering available tasks
References