lighteval

Par mkurman · zorai

npx skills add https://github.com/mkurman/zorai --skill lighteval

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) :

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

  1. Utilisez lighteval eval comme point d'entrée préféré — le backend inspect-ai est le plus moderne
  2. vLLM pour la vitesse, Accelerate pour la simplicité, LiteLLM pour l'accès à l'API
  3. Poussez vers le Hub pour partager les résultats et comparer les modèles
  4. Analyse au niveau des échantillons pour déboguer les échecs d'évaluation
  5. Les métriques personnalisées sont de première classe — pas besoin de forker la bibliothèque
  6. Open Benchmark Index pour découvrir les tâches disponibles

Références

Skills similaires