lm-evaluation-harness on Ubuntu — LLMの性能をベンチマーク評価する方法

AI/MLツール

この記事のポイント

  • 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 を確認する




ubuntu@linuxlab: ~
$ python3 –version
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 をインストールする




ubuntu@linuxlab: ~
$ pip install 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
lm_eval pip install 実行ログ(Ubuntu 22.04 実測)
lm_eval pip install 実行ログ(Ubuntu 22.04 実測)

インストールが終わったらバージョンを確認します。




ubuntu@linuxlab: ~
$ python3 -c “import lm_eval; print(lm_eval.__version__)”
0.4.12

手順3:HuggingFace モデル用に accelerate を入れる

--model hf(HuggingFace のモデルを直接ロードする方法)を使う場合は accelerate も必要です。入れ忘れると後で ModuleNotFoundError: No module named 'accelerate' が出ます。




ubuntu@linuxlab: ~
$ pip install accelerate
Successfully installed accelerate-1.14.0
インストール手順全体のターミナル出力(実測)
インストール手順全体のターミナル出力(実測)

基本的な使い方

コマンド体系を把握する

lm_eval 0.4.12 では lm-eval コマンドにサブコマンドが付きます。




ubuntu@linuxlab: ~
$ lm-eval –help
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)、多言語タスクなど多岐にわたります。




ubuntu@linuxlab: ~
$ lm-eval ls tasks | wc -l
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|
lm_eval 主要ベンチマークタスク一覧
lm_eval 主要ベンチマークタスク一覧

上の図にある代表的なタスクは 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 問で評価しました。実行コマンドは次のとおりです。




ubuntu@linuxlab: ~
$ lm-eval run \
–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 回目以降はキャッシュから読み込むので高速です。

実行が終わると、端末に結果テーブルが表示されます。




ubuntu@linuxlab: ~ — ベンチマーク結果(実測)
hf ({‘pretrained’: ‘gpt2’}), gen_kwargs: ({}), limit: 50.0, num_fewshot: 0
| 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|
GPT-2 ベンチマーク実行ターミナル(実測)
GPT-2 ベンチマーク実行ターミナル(実測)
GPT-2 実測ベンチマーク結果(lm_eval 0.4.12)
GPT-2 実測ベンチマーク結果(lm_eval 0.4.12)

結果の読み方

各カラムの意味

結果テーブルの各カラムを説明します。

  • 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 以上のマシンが必要です。

著者アイコン
著者アイコン

Stderr が ±7% と大きいのは –limit 50 でサンプルを絞っているからです。フルデータセット(hellaswag なら約 1 万問)で走らせると ±1% 以下になります。論文に載せるスコアを出す場合は必ず –limit なしで実行してください。

acc と acc_norm の違い

多くのタスクには acc(生の精度)と acc_norm(長さ正規化精度)の 2 種類が出ます。

LLM は長い選択肢のほうを選びやすい傾向があります。acc_norm は各選択肢の長さで対数尤度を割り算することでこのバイアスを補正しています。通常は acc_norm のほうが公平な比較になります。

結果を JSON で保存する

--output_path を指定すると、結果が JSON ファイルとして保存されます。




ubuntu@linuxlab: ~
$ ls ./lme_results/gpt2/
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= の後ろを変えるだけです。




ubuntu@linuxlab: ~
# GPT-2 Large(774M パラメータ)を評価
$ 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’




ubuntu@linuxlab: ~(エラー例)
ModuleNotFoundError: No module named ‘accelerate’

HuggingFace モデル(--model hf)を使う際に出るエラーです。accelerate が lm_eval の依存に自動で入らないため、別途インストールが必要です。




ubuntu@linuxlab: ~(解決)
$ pip install accelerate
Successfully installed accelerate-1.14.0

TypeError: HFLM() got multiple values for keyword argument ‘device’




ubuntu@linuxlab: ~(エラー例)
TypeError: HFLM() got multiple values for keyword argument ‘device’

--model_args pretrained=gpt2,device=cuda--device cuda を同時に指定したときに出ます。device はどちらか一方で指定してください。




ubuntu@linuxlab: ~(解決)
# NG: device を2箇所に指定
$ 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 を小さくする(841
  • --model_args pretrained=gpt2,dtype=float16 で半精度にする
  • より小さなモデルに変える(gpt2sshleifer/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 の選び方については次の記事も参考にしてください。

Ubuntuサーバー構築の手順 VPSで実際に立てて解説
「VPS を借りたけど、Ubuntu サーバーをどう設定すればいいか分からない」——そんな疑問に、実際に Ubuntu 24.04 LTS 上でコマンドを動かして確認した手順でお答えします。

コメント

タイトルとURLをコピーしました