lm-evaluation-harness

Par mkurman · zorai

npx skills add https://github.com/mkurman/zorai --skill lm-evaluation-harness

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

  1. Utiliser --batch_size auto — détection automatique de la taille du batch maximise le débit
  2. Toujours définir un --seed pour la reproductibilité entre les exécutions d'évaluation
  3. Préférer le backend vLLM pour les modèles >7B — 5-10x plus rapide que HF
  4. Utiliser --limit 100 durant le développement pour tester rapidement la configuration des tâches
  5. mmlu utilise 5-shot par défaut, tandis que la plupart des tâches sont 0-shot
  6. Installer les backends de modèles séparément — le package de base est volontairement léger
  7. L'évaluation GGUF nécessite un chemin tokenizer explicite — l'omettre et le chargement risque de se bloquer

Références

Skills similaires