mcpField
E
evaluating-llms-harness

evaluating-llms-harness

github.com/kalarislabsテスト・品質7746 回インストール4 日前に更新
リポジトリ

evaluating-llms-harness について

evaluating-llms-harness スキルは、標準化されたプロンプトと指標で LLM を評価する lm-evaluation-harness の使い方を、研究者やモデル開発者向けに説明します。ベンチマーク実行、学習状況の追跡、モデル比較を扱います。

主な機能

  1. 0160 以上の学術ベンチマーク
  2. 02標準化されたプロンプトと指標
  3. 03HuggingFace と vLLM のバックエンド
  4. 04カスタム評価タスク
  5. 05複数モデルの結果比較

活用シーン

  1. 01標準タスクでモデルを比較する
  2. 02学習チェックポイントごとの評価を追跡する
  3. 03ベンチマーク結果を再現して報告する

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill evaluating-llms-harness

インストール後、Claude Code で/evaluating-llms-harnessを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
api-evaluation.md
benchmark-guide.md
common-issues.md
custom-tasks.md
distributed-eval.md
hardware-requirements.md

詳細

lm-evaluation-harness - LLM ベンチマーク

クイックスタート

lm-evaluation-harness は、標準化されたプロンプトと評価指標を使用して、60 以上の学術ベンチマークで LLM を評価します。

インストール:

pip install lm-eval

任意の HuggingFace モデルを評価する:

lm_eval --model hf \
  --model_args pretrained=meta-llama/Llama-2-7b-hf \
  --tasks mmlu,gsm8k,hellaswag \
  --device cuda:0 \
  --batch_size 8

利用可能なタスクを表示する:

lm_eval --tasks list

一般的なワークフロー

ワークフロー 1:標準ベンチマーク評価

主要なベンチマーク(MMLU、GSM8K、HumanEval)でモデルを評価します。

このチェックリストをコピーします。

Benchmark Evaluation:
- [ ] Step 1: Choose benchmark suite
- [ ] Step 2: Configure model
- [ ] Step 3: Run evaluation
- [ ] Step 4: Analyze results

ステップ 1:ベンチマークスイートを選択する

主要な推論ベンチマーク:

  • MMLU(Massive Multitask Language Understanding)- 57 分野、選択式問題
  • GSM8K - 小学校レベルの数学文章題
  • HellaSwag - 常識推論
  • TruthfulQA - 真実性と事実性
  • ARC(AI2 Reasoning Challenge)- 科学に関する問題

コードベンチマーク:

  • HumanEval - Python コード生成(164 問)
  • MBPP(Mostly Basic Python Problems)- Python コーディング

標準スイート(モデルのリリースに推奨):

--tasks mmlu,gsm8k,hellaswag,truthfulqa,arc_challenge

ステップ 2:モデルを設定する

HuggingFace モデル:

lm_eval --model hf \
  --model_args pretrained=meta-llama/Llama-2-7b-hf,dtype=bfloat16 \
  --tasks mmlu \
  --device cuda:0 \
  --batch_size auto  # Auto-detect optimal batch size

量子化モデル(4-bit/8-bit):

lm_eval --model hf \
  --model_args pretrained=meta-llama/Llama-2-7b-hf,load_in_4bit=True \
  --tasks mmlu \
  --device cuda:0

カスタムチェックポイント:

lm_eval --model hf \
  --model_args pretrained=/path/to/my-model,tokenizer=/path/to/tokenizer \
  --tasks mmlu \
  --device cuda:0

ステップ 3:評価を実行する

# Full MMLU evaluation (57 subjects)
lm_eval --model hf \
  --model_args pretrained=meta-llama/Llama-2-7b-hf \
  --tasks mmlu \
  --num_fewshot 5 \  # 5-shot evaluation (standard)
  --batch_size 8 \
  --output_path results/ \
  --log_samples  # Save individual predictions

# Multiple benchmarks at once
lm_eval --model hf \
  --model_args pretrained=meta-llama/Llama-2-7b-hf \
  --tasks mmlu,gsm8k,hellaswag,truthfulqa,arc_challenge \
  --num_fewshot 5 \
  --batch_size 8 \
  --output_path results/llama2-7b-eval.json

ステップ 4:結果を分析する

結果は results/llama2-7b-eval.json に保存されます。

{
  "results": {
    "mmlu": {
      "acc": 0.459,
      "acc_stderr": 0.004
    },
    "gsm8k": {
      "exact_match": 0.142,
      "exact_match_stderr": 0.006
    },
    "hellaswag": {
      "acc_norm": 0.765,
      "acc_norm_stderr": 0.004
    }
  },
  "config": {
    "model": "hf",
    "model_args": "pretrained=meta-llama/Llama-2-7b-hf",
    "num_fewshot": 5
  }
}
ワークフロー 2:トレーニングの進捗を追跡する

トレーニング中にチェックポイントを評価します。

Training Progress Tracking:
- [ ] Step 1: Set up periodic evaluation
- [ ] Step 2: Choose quick benchmarks
- [ ] Step 3: Automate evaluation
- [ ] Step 4: Plot learning curves

ステップ 1:定期評価を設定する

N トレーニングステップごとに評価します。

#!/bin/bash
# eval_checkpoint.sh

CHECKPOINT_DIR=$1
STEP=$2

lm_eval --model hf \
  --model_args pretrained=$CHECKPOINT_DIR/checkpoint-$STEP \
  --tasks gsm8k,hellaswag \
  --num_fewshot 0 \  # 0-shot for speed
  --batch_size 16 \
  --output_path results/step-$STEP.json

ステップ 2:高速なベンチマークを選択する

頻繁な評価に適した高速なベンチマーク:

  • HellaSwag:1 GPU で約 10 分
  • GSM8K:約 5 分
  • PIQA:約 2 分

頻繁な評価には時間がかかりすぎるため、次のベンチマークは避けてください。

  • MMLU:約 2 時間(57 分野)
  • HumanEval:コード実行が必要

ステップ 3:評価を自動化する

トレーニングスクリプトに統合します。

# In training loop
if step % eval_interval == 0:
    model.save_pretrained(f"checkpoints/step-{step}")

    # Run evaluation
    os.system(f"./eval_checkpoint.sh checkpoints step-{step}")

または、PyTorch Lightning のコールバックを使用します。

from pytorch_lightning import Callback

class EvalHarnessCallback(Callback):
    def on_validation_epoch_end(self, trainer, pl_module):
        step = trainer.global_step
        checkpoint_path = f"checkpoints/step-{step}"

        # Save checkpoint
        trainer.save_checkpoint(checkpoint_path)

        # Run lm-eval
        os.system(f"lm_eval --model hf --model_args pretrained={checkpoint_path} ...")

ステップ 4:学習曲線をプロットする

import json
import matplotlib.pyplot as plt

# Load all results
steps = []
mmlu_scores = []

for file in sorted(glob.glob("results/step-*.json")):
    with open(file) as f:
        data = json.load(f)
        step = int(file.split("-")[1].split(".")[0])
        steps.append(step)
        mmlu_scores.append(data["results"]["mmlu"]["acc"])

# Plot
plt.plot(steps, mmlu_scores)
plt.xlabel("Training Step")
plt.ylabel("MMLU Accuracy")
plt.title("Training Progress")
plt.savefig("training_curve.png")
ワークフロー 3:複数のモデルを比較する

モデル比較用のベンチマークスイートです。

Model Comparison:
- [ ] Step 1: Define model list
- [ ] Step 2: Run evaluations
- [ ] Step 3: Generate comparison table

ステップ 1:モデルのリストを定義する

# models.txt
meta-llama/Llama-2-7b-hf
meta-llama/Llama-2-13b-hf
mistralai/Mistral-7B-v0.1
microsoft/phi-2

ステップ 2:評価を実行する

#!/bin/bash
# eval_all_models.sh

TASKS="mmlu,gsm8k,hellaswag,truthfulqa"

while read model; do
    echo "Evaluating $model"

    # Extract model name for output file
    model_name=$(echo $model | sed 's/\//-/g')

    lm_eval --model hf \
      --model_args pretrained=$model,dtype=bfloat16 \
      --tasks $TASKS \
      --num_fewshot 5 \
      --batch_size auto \
      --output_path results/$model_name.json

done < models.txt

ステップ 3:比較表を生成する

import json
import pandas as pd

models = [
    "meta-llama-Llama-2-7b-hf",
    "meta-llama-Llama-2-13b-hf",
    "mistralai-Mistral-7B-v0.1",
    "microsoft-phi-2"
]

tasks = ["mmlu", "gsm8k", "hellaswag", "truthfulqa"]

results = []
for model in models:
    with open(f"results/{model}.json") as f:
        data = json.load(f)
        row = {"Model": model.replace("-", "/")}
        for task in tasks:
            # Get primary metric for each task
            metrics = data["results"][task]
            if "acc" in metrics:
                row[task.upper()] = f"{metrics['acc']:.3f}"
            elif "exact_match" in metrics:
                row[task.upper()] = f"{metrics['exact_match']:.3f}"
        results.append(row)

df = pd.DataFrame(results)
print(df.to_markdown(index=False))

出力:

| Model                  | MMLU  | GSM8K | HELLASWAG | TRUTHFULQA |
|------------------------|-------|-------|-----------|------------|
| meta-llama/Llama-2-7b  | 0.459 | 0.142 | 0.765     | 0.391      |
| meta-llama/Llama-2-13b | 0.549 | 0.287 | 0.801     | 0.430      |
| mistralai/Mistral-7B   | 0.626 | 0.395 | 0.812     | 0.428      |
| microsoft/phi-2        | 0.560 | 0.613 | 0.682     | 0.447      |
ワークフロー 4:vLLM で評価する(推論の高速化)

vLLM バックエンドを使用すると、評価を 5~10 倍高速化できます。

vLLM Evaluation:
- [ ] Step 1: Install vLLM
- [ ] Step 2: Configure vLLM backend
- [ ] Step 3: Run evaluation

ステップ 1:vLLM をインストールする

pip install vllm

ステップ 2:vLLM バックエンドを設定する

lm_eval --model vllm \
  --model_args pretrained=meta-llama/Llama-2-7b-hf,tensor_parallel_size=1,dtype=auto,gpu_memory_utilization=0.8 \
  --tasks mmlu \
  --batch_size auto

ステップ 3:評価を実行する

vLLM は標準的な HuggingFace より 5~10 倍高速です。

# Standard HF: ~2 hours for MMLU on 7B model
lm_eval --model hf \
  --model_args pretrained=meta-llama/Llama-2-7b-hf \
  --tasks mmlu \
  --batch_size 8

# vLLM: ~15-20 minutes for MMLU on 7B model
lm_eval --model vllm \
  --model_args pretrained=meta-llama/Llama-2-7b-hf,tensor_parallel_size=2 \
  --tasks mmlu \
  --batch_size auto

どのような場合に使うか、代替手段との比較

次の場合は lm-evaluation-harness を使用します:

  • 学術論文向けにモデルのベンチマークを行う
  • 標準タスクでモデルの品質を比較する
  • トレーニングの進捗を追跡する
  • 標準化された評価指標を報告する(全員が同じプロンプトを使用します)
  • 再現可能な評価が必要である

代わりに次のツールを使用します:

  • HELM(Stanford):より幅広い評価(公平性、効率性、キャリブレーション)
  • AlpacaEval:LLM の評価者を使った指示追従評価
  • MT-Bench:会話形式の複数ターン評価
  • カスタムスクリプト:ドメイン固有の評価

よくある問題

詳細、コード例、パラメータ表については、references/common-issues.md を参照してください。このステップに該当する場合に読んでください。

高度なトピック

ベンチマークの説明:references/benchmark-guide.md では、60 以上のタスクすべてについて、測定内容と結果の解釈を詳しく説明しています。

カスタムタスク:ドメイン固有の評価タスクの作成については、references/custom-tasks.md を参照してください。

API の評価:OpenAI、Anthropic などの API モデルの評価については、references/api-evaluation.md を参照してください。

マルチ GPU 戦略:データ並列およびテンソル並列での評価については、references/distributed-eval.md を参照してください。

ハードウェア要件

詳細、コード例、パラメータ表については、references/hardware-requirements.md を参照してください。このステップに該当する場合に読んでください。

リソース

エージェントの作業手順

  1. 環境を確認します。 モデル、チェックポイント、ベンチマークのバージョン、評価ハーネスのバージョンを確認します。
  2. 入力を確定します。 データまたはユーザーから、形式、識別子、パラメーターを確認します。結果に影響する値は推測せず、質問してください。
  3. まず小規模に実行します。 小さなサブセットで評価し、プロンプト、解析、スコアリングを検証します。
  4. 上記の手順と参考資料を使用して、タスク全体を実行します。
  5. 結果を検証します。 ベンチマークの公式な分割と評価指標を使用し、データ汚染がないか確認して、シードまたはプロンプト間の分散を報告します。
  6. 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未確定の点を記載します。
このような場合対応
スコアが公開済みの数値と異なる結論を出す前に、プロンプト形式、フューショット設定、ハーネスのバージョンを確認します。
これらの手順に記載されている関数、フラグ、エンドポイントがインストール済みのバージョンにないインストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認し、適宜対応してユーザーに伝えます。API をでっち上げてはいけません。
必須の入力、識別子、パラメーターが曖昧ユーザーに質問するか、実行前に仮定を明示します。

誠実性に関するルール

  • 結果、パラメーター、識別子、引用、統計を捏造してはいけません。実行または検証できない場合は、その旨を明確に伝えます。
  • 評価設定をすべて報告します。プロンプト、シード、サブセットを都合よく選んではいけません。
  • ここに記載されているバージョン固有の情報は古くなっている可能性があるものとして扱い、インストール済みバージョンの公式ドキュメントで確認します。
  • 費用が発生する操作、共有 GPU またはクラウドのクォータを消費する操作、個人データまたは患者データを扱う操作、取り消せない操作を行う前に、許可を求めます。

関連スキル

  • evaluating-code-models: pass@k 指標を使用して、HumanEval、MBPP、MultiPL-E、および 15 件以上のベンチマークでコード生成モデルを評価します。
  • nemo-evaluator-sdk: 複数のバックエンドで実行し、18 種類以上のハーネスの 100 件以上のベンチマーク(MMLU、HumanEval、GSM8K、安全性、VLM)で LLM を評価します。
  • hqq-quantization: キャリブレーションデータを使用せずに LLM を半二次量子化します。

コメント