evaluating-llms-harness
60以上の学術ベンチマーク(MMLU、HumanEval、GSM8K、TruthfulQAなど)でLLMを評価できます。モデルの品質測定、複数モデルの比較、学術結果の報告、トレーニング進捗の追跡に活用できます。EleutherAIやHuggingFaceなど業界の主要機関が採用する標準的なツールです。HuggingFace、vLLM、各種APIに対応しています。
description の原文を見る
Evaluates LLMs across 60+ academic benchmarks (MMLU, HumanEval, GSM8K, TruthfulQA, HellaSwag). Use when benchmarking model quality, comparing models, reporting academic results, or tracking training progress. Industry standard used by EleutherAI, HuggingFace, and major labs. Supports HuggingFace, vLLM, APIs.
SKILL.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)でモデルを評価します。
このチェックリストをコピーしてください:
ベンチマーク評価:
- [ ] ステップ1: ベンチマークスイートの選択
- [ ] ステップ2: モデルの構成
- [ ] ステップ3: 評価の実行
- [ ] ステップ4: 結果の分析
ステップ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 # 最適なバッチサイズを自動検出
量子化モデル(4ビット/8ビット):
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: 評価の実行
# 完全なMMLA評価(57科目)
lm_eval --model hf \
--model_args pretrained=meta-llama/Llama-2-7b-hf \
--tasks mmlu \
--num_fewshot 5 \ # 5ショット評価(標準)
--batch_size 8 \
--output_path results/ \
--log_samples # 個別の予測を保存
# 複数のベンチマークを同時に実行
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: トレーニング進捗の追跡
トレーニング中のチェックポイントを評価します。
トレーニング進捗追跡:
- [ ] ステップ1: 定期的な評価の設定
- [ ] ステップ2: 高速ベンチマークの選択
- [ ] ステップ3: 評価の自動化
- [ ] ステップ4: 学習曲線のプロット
ステップ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ショット
--batch_size 16 \
--output_path results/step-$STEP.json
ステップ2: 高速ベンチマークの選択
頻繁な評価のための高速ベンチマーク:
- HellaSwag: 1つのGPUで約10分
- GSM8K: 約5分
- PIQA: 約2分
頻繁な評価には避けるべき(遅い):
- MMLU: 約2時間(57科目)
- HumanEval: コード実行が必要
ステップ3: 評価の自動化
トレーニングスクリプトに統合します:
# トレーニングループ内
if step % eval_interval == 0:
model.save_pretrained(f"checkpoints/step-{step}")
# 評価を実行
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}"
# チェックポイントを保存
trainer.save_checkpoint(checkpoint_path)
# lm-evalを実行
os.system(f"lm_eval --model hf --model_args pretrained={checkpoint_path} ...")
ステップ4: 学習曲線のプロット
import json
import matplotlib.pyplot as plt
# すべての結果を読み込み
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"])
# プロット
plt.plot(steps, mmlu_scores)
plt.xlabel("Training Step")
plt.ylabel("MMLU Accuracy")
plt.title("Training Progress")
plt.savefig("training_curve.png")
ワークフロー3: 複数のモデルを比較
モデル比較のためのベンチマークスイート。
モデル比較:
- [ ] ステップ1: モデルリストの定義
- [ ] ステップ2: 評価の実行
- [ ] ステップ3: 比較表の生成
ステップ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"
# 出力ファイル用のモデル名を抽出
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:
# 各タスクの主要メトリクスを取得
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評価:
- [ ] ステップ1: vLLMのインストール
- [ ] ステップ2: vLLMバックエンドの構成
- [ ] ステップ3: 評価の実行
ステップ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倍高速です:
# 標準HF: 7Bモデルで約2時間のMMLA
lm_eval --model hf \
--model_args pretrained=meta-llama/Llama-2-7b-hf \
--tasks mmlu \
--batch_size 8
# vLLM: 7Bモデルで約15~20分のMMLA
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: 会話型マルチターン評価
- カスタムスクリプト: ドメイン固有の評価
一般的な問題
問題: 評価が遅い
vLLMバックエンドを使用します:
lm_eval --model vllm \
--model_args pretrained=model-name,tensor_parallel_size=2
またはフューショット例を削減:
--num_fewshot 0 # 5ではなく
またはMMLA部分集合を評価:
--tasks mmlu_stem # STEM科目のみ
問題: メモリ不足
バッチサイズを削減:
--batch_size 1 # または --batch_size auto
量子化を使用:
--model_args pretrained=model-name,load_in_8bit=True
CPUオフロードを有効化:
--model_args pretrained=model-name,device_map=auto,offload_folder=offload
問題: 報告された結果と異なる結果
フューショット数を確認:
--num_fewshot 5 # ほとんどの論文は5ショットを使用
正確なタスク名を確認:
--tasks mmlu # mmlu_directやmmlu_fewshotではなく
モデルとトークナイザーが一致することを確認:
--model_args pretrained=model-name,tokenizer=same-model-name
問題: HumanEvalがコードを実行しない
実行依存関係をインストール:
pip install human-eval
コード実行を有効化:
lm_eval --model hf \
--model_args pretrained=model-name \
--tasks humaneval \
--allow_code_execution # HumanEvalに必須
高度なトピック
ベンチマークの説明: すべての60以上のタスク、それらが測定するもの、および解釈の詳細な説明は、references/benchmark-guide.mdを参照してください。
カスタムタスク: ドメイン固有の評価タスク作成については、references/custom-tasks.mdを参照してください。
API評価: OpenAI、Anthropic、およびその他のAPIモデルの評価については、references/api-evaluation.mdを参照してください。
マルチGPU戦略: データ並列とテンソル並列評価については、references/distributed-eval.mdを参照してください。
ハードウェア要件
- GPU: NVIDIA(CUDA 11.8以上)、CPU上でも動作(非常に遅い)
- VRAM:
- 7Bモデル: 16GB(bf16)または8GB(8ビット)
- 13Bモデル: 28GB(bf16)または14GB(8ビット)
- 70Bモデル: マルチGPUまたは量子化が必要
- 時間(7Bモデル、単一A100):
- HellaSwag: 10分
- GSM8K: 5分
- MMLU(完全): 2時間
- HumanEval: 20分
リソース
- GitHub: https://github.com/EleutherAI/lm-evaluation-harness
- ドキュメント: https://github.com/EleutherAI/lm-evaluation-harness/tree/main/docs
- タスクライブラリ: MMLU、GSM8K、HumanEval、TruthfulQA、HellaSwag、ARC、WinoGrandeなど60以上のタスク
- リーダーボード: https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard (このハーネスを使用)
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- daeha76
- リポジトリ
- daeha76/RianFriends
- ライセンス
- MIT
- 最終更新
- 2026/4/6
Source: https://github.com/daeha76/RianFriends / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。