この記事のポイント
pip install lm_evalだけで EleutherAI の評価フレームワークが入る(lm_eval 0.4.12 を確認)- HuggingFace モデルを使う場合は
pip install accelerateも必要 - GPT-2 (124M) を 4 タスクで実際に評価した結果を掲載(hellaswag 50%、piqa 58% など)
--limitはテスト専用。公開用の正式な評価はフルデータセット(--limitなし)で実行すること- 14,225 種類のタスクが利用でき、モデルを変えるだけで比較できる
LLM のスコアを比較した記事や論文で「Hellaswag 75.3%」「MMLU 68.1%」といった数字を見かけることがあります。これらは lm-evaluation-harness(lm-eval) と呼ばれる評価フレームワークで計測されたものです。
このツールは EleutherAI が開発したオープンソースで、Ubuntu に pip install するだけで使えます。GPT-2 のような小さなモデルから Llama 3 のような大きなモデルまで、同じ条件でフェアに評価できるのが強みです。
本記事では Ubuntu 22.04 に lm_eval 0.4.12 を実際にインストールし、GPT-2 で 4 つのベンチマークタスクを走らせた結果を載せています。数字の読み方も含めて解説するので、LLM 評価の仕組みをハンズオンで掴むのに役立ててください。
注意
本記事のコマンドは Ubuntu 22.04.5 LTS(Python 3.10.12)で確認しています。Ubuntu 24.04 でも同じ手順で動作しますが、Python のバージョンが 3.12 になります。
前提環境
lm-evaluation-harness を使うために必要な環境は次のとおりです。
| 項目 | 最低要件 | 推奨 |
|---|---|---|
| OS | Ubuntu 20.04+ | Ubuntu 22.04 / 24.04 LTS |
| Python | 3.8+ | 3.10 / 3.12(Ubuntu 標準) |
| メモリ | 4GB(CPU評価時) | 16GB+(大きなモデルの場合) |
| GPU | 不要(小さなモデルはCPUで動く) | VRAM 8GB+(評価速度が大幅向上) |
| ディスク | 5GB(GPT-2程度) | 100GB+(大規模モデルのキャッシュ) |
GPT-2(124M パラメータ)程度であれば CPU だけでも評価できます。ただし速度は遅く、1,000 問のベンチを回すのに数時間かかる場合があります。GPU があると同じ評価が数分で終わります。
インストール手順
手順1:Python と pip を確認する
Python 3.10.12
$ pip3 –version
pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)
pip がない場合は sudo apt install python3-pip でインストールしてください。
手順2:lm_eval をインストールする
Collecting lm_eval
Downloading lm_eval-0.4.12-py3-none-any.whl (696 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 696.3/696.3 kB 4.1 MB/s
Collecting datasets>=2.14.0
Collecting evaluate>=0.4.0
Collecting sacrebleu>=2.0
…
Successfully installed lm_eval-0.4.12 datasets-5.0.0 evaluate-0.4.6

インストールが終わったらバージョンを確認します。
0.4.12
手順3:HuggingFace モデル用に accelerate を入れる
--model hf(HuggingFace のモデルを直接ロードする方法)を使う場合は accelerate も必要です。入れ忘れると後で ModuleNotFoundError: No module named 'accelerate' が出ます。
Successfully installed accelerate-1.14.0

基本的な使い方
コマンド体系を把握する
lm_eval 0.4.12 では lm-eval コマンドにサブコマンドが付きます。
Language Model Evaluation Harness
positional arguments:
COMMAND Available commands
run Run the evaluation harness on specified tasks
ls List available tasks, groups, subtasks, or tags
validate Validate task configurations
よく使うコマンドは次の 2 つです。
lm-eval run— モデルを指定してベンチマークを実行lm-eval ls tasks— 利用可能なタスク一覧を表示
利用可能なタスクを確認する
lm_eval 0.4.12 には 14,225 種類のタスクが収録されています。日本語(JA-Bench 等)、英語(MMLU・Hellaswag・ARC)、多言語タスクなど多岐にわたります。
14225
$ lm-eval ls tasks | grep hellaswag
|hellaswag |lm_eval/tasks/hellaswag/hellaswag.yaml |multiple_choice|
$ lm-eval ls tasks | grep “^|arc”
|arc_challenge |lm_eval/tasks/arc/arc_challenge.yaml |multiple_choice|
|arc_easy |lm_eval/tasks/arc/arc_easy.yaml |multiple_choice|

上の図にある代表的なタスクは LLM のリーダーボードで頻繁に登場します。
- hellaswag:文章の続きを 4 択で選ぶ常識推論。文章の自然さを測る
- arc_easy / arc_challenge:小学校理科の問題。easy は易問、challenge は難問
- mmlu:大学レベルの 57 分野(数学・法律・医学など)の知識を問う
- piqa:物理的な常識(「水で濡れた手を拭くにはどうする?」など)
- winogrande:代名詞が何を指しているかを問う語用論タスク
GPT-2 で実際にベンチマークを走らせる
基本的なコマンド構成
lm-eval run の主なオプションは次のとおりです。
| オプション | 説明 | 例 |
|---|---|---|
--model |
使用するモデルバックエンド | hf(HuggingFace), vllm, openai |
--model_args |
モデルの引数 | pretrained=gpt2 |
--tasks |
評価するタスク名(カンマ区切りで複数可) | hellaswag,arc_easy |
--num_fewshot |
Few-shot の例示数 | 0(0-shot), 5(5-shot) |
--limit |
評価するサンプル数(テスト用のみ) | 50, 100 |
--batch_size |
バッチサイズ(大きいほど速い・VRAM を使う) | 8, auto |
--output_path |
結果を JSON で保存するディレクトリ | ./results |
注意: –limit はテスト専用
--limit 50 は動作確認や手順の練習用です。論文や公開スコアの計測には使わず、フルデータセット(--limit なし)で実行してください。ツール自体もこの点について明確に警告を出します。
GPT-2 で 4 タスクを評価する(実測)
GPT-2(124M パラメータ)を使って 4 つのタスクを各 50 問で評価しました。実行コマンドは次のとおりです。
–model hf \
–model_args pretrained=gpt2 \
–tasks hellaswag,arc_easy,piqa,winogrande \
–limit 50 \
–num_fewshot 0 \
–batch_size 8 \
–device cuda \
–output_path ./lme_results
WARNING –limit SHOULD ONLY BE USED FOR TESTING.
INFO Selected Tasks: [‘hellaswag’, ‘arc_easy’, ‘piqa’, ‘winogrande’]
INFO Initializing hf model, with arguments: {‘pretrained’: ‘gpt2’}
INFO Using device ‘cuda’
Loading weights: 100%|██████████| 148/148 [00:00<00:00, 393.44it/s]
Running loglikelihood requests: 100%|██████████| 600/600 [00:21<00:00, 28.18it/s]
GPT-2 のモデルウェイト(約 500MB)は初回実行時に自動でダウンロードされます。2 回目以降はキャッシュから読み込むので高速です。
実行が終わると、端末に結果テーブルが表示されます。
| Tasks |Ver|Filter|n-shot| Metric | |Value| |Stderr|
|———-|–:|——|—–:|———|–|—-:|–|—–:|
|arc_easy | 1|none | 0|acc |↑ | 0.32|± |0.0666|
| | |none | 0|acc_norm |↑ | 0.36|± |0.0686|
|hellaswag | 1|none | 0|acc |↑ | 0.36|± |0.0686|
| | |none | 0|acc_norm |↑ | 0.50|± |0.0714|
|piqa | 1|none | 0|acc |↑ | 0.56|± |0.0709|
| | |none | 0|acc_norm |↑ | 0.58|± |0.0705|
|winogrande| 1|none | 0|acc |↑ | 0.60|± |0.0700|


結果の読み方
各カラムの意味
結果テーブルの各カラムを説明します。
- Metric:評価指標。
accは精度、acc_normは長さ正規化後の精度 - Value:スコア(0〜1.0。1.0 = 100%正解)
- Stderr:標準誤差。サンプル数が少ないほど大きくなる
- ↑:スコアが高いほど良い指標(ほとんどのタスクがこれ)
今回の GPT-2 実測値をパーセントに直すと次のとおりです。
- hellaswag(4択):acc_norm = 50.0%(チャンス率 25%)
- arc_easy(4択):acc_norm = 36.0%(チャンス率 25%)
- piqa(2択):acc_norm = 58.0%(チャンス率 50%)
- winogrande(2択):acc = 60.0%(チャンス率 50%)
正直、GPT-2 のスコアは現代の LLM と比べると低いです。それでも全タスクでチャンス率を上回っていて、「なんとなく正解を選べる」能力は持っています。現代の 70B クラスのモデルは hellaswag で 85〜90%、MMLU で 70〜80% に達しますが、今回の評価環境でそのスコアを測りたい場合は GPU VRAM が 40GB 以上のマシンが必要です。
acc と acc_norm の違い
多くのタスクには acc(生の精度)と acc_norm(長さ正規化精度)の 2 種類が出ます。
LLM は長い選択肢のほうを選びやすい傾向があります。acc_norm は各選択肢の長さで対数尤度を割り算することでこのバイアスを補正しています。通常は acc_norm のほうが公平な比較になります。
結果を JSON で保存する
--output_path を指定すると、結果が JSON ファイルとして保存されます。
results_2026-06-21T16-34-01.715087.json
$ cat ./lme_results/gpt2/results_*.json | python3 -m json.tool | head -30
{
“results”: {
“hellaswag”: {
“acc,none”: 0.36,
“acc_norm,none”: 0.5,
…
}
}
}
JSON に保存しておけば、モデルを変えるたびに結果を比較できます。複数のモデルを評価して同じディレクトリに入れれば、自前のリーダーボードを作ることも可能です。
モデルを変えて比較する
lm-evaluation-harness の本来の使い道は複数モデルの横断比較です。モデルを変えるには --model_args pretrained= の後ろを変えるだけです。
$ lm-eval run \
–model hf \
–model_args pretrained=gpt2-large \
–tasks hellaswag,arc_easy \
–num_fewshot 0 \
–batch_size 4
# Llama 3.2 1B(量子化版)を評価
$ lm-eval run \
–model hf \
–model_args pretrained=meta-llama/Llama-3.2-1B,dtype=float16 \
–tasks hellaswag,arc_easy,piqa \
–num_fewshot 0
GPT-2 より大きなモデルを動かすには VRAM に余裕が必要です。GPU VRAM が少ない場合は dtype=float16 を指定して半精度で動かすか、量子化済みモデルを使います。VRAM 不足で難しい場合はクラウド GPUを借りるのが現実的です。
よくあるエラーと解決策
ModuleNotFoundError: No module named ‘accelerate’
HuggingFace モデル(--model hf)を使う際に出るエラーです。accelerate が lm_eval の依存に自動で入らないため、別途インストールが必要です。
Successfully installed accelerate-1.14.0
TypeError: HFLM() got multiple values for keyword argument ‘device’
--model_args pretrained=gpt2,device=cuda と --device cuda を同時に指定したときに出ます。device はどちらか一方で指定してください。
$ lm-eval run –model hf –model_args pretrained=gpt2,device=cuda –device cuda
# OK: –device だけで指定
$ lm-eval run –model hf –model_args pretrained=gpt2 –device cuda
CUDA out of memory
GPU VRAM が足りない場合に出ます。次の対処を試してください。
--batch_sizeを小さくする(8→4→1)--model_args pretrained=gpt2,dtype=float16で半精度にする- より小さなモデルに変える(
gpt2→sshleifer/tiny-gpt2) - CPU で実行する(
--device cpu)―遅いが VRAM は不要
まとめ
lm-evaluation-harness は pip install lm_eval の一行でインストールでき、14,000 種類以上のタスクで LLM を評価できる強力なフレームワークです。
- HuggingFace モデルを使う場合は
pip install accelerateも忘れずに - GPT-2 (124M) の実測スコアは hellaswag 50%、arc_easy 36%、piqa 58%、winogrande 60%(各 50 問 / 0-shot)
- 公開用の正式な評価は
--limitなしのフルデータセットで実行する - 大きなモデルの評価には VRAM が必要で、クラウド GPU が選択肢になる
大きなモデルを本格的にベンチマークしたいなら、GPU 搭載の VPS を借りるのが一番手軽です。VPS の選び方については次の記事も参考にしてください。




コメント