AI・機械学習
Homebench – ローカルLLMを速度、メモリ、品質でベンチマーク
Homebench – Benchmark local LLMs for speed, memory, and quality (github.com)
要約
Homebenchは、ローカルで実行されている大規模言語モデル(LLM)のパフォーマンスをベンチマークするためのコマンドラインツールです。Ollama, LM Studio, llama.cppなどの一般的なローカルLLMランナーと連携し、モデルの発見、品質評価、トークン/秒、初回トークンまでの時間(TTFT)、メモリ使用量の測定を行います。結果はライブのターミナルリーダーボードとして表示され、設定不要で手軽にローカルモデルの性能を比較できます。
全文翻訳
Homebench ローカルLLMを速度、メモリ、品質でベンチマーク
Homebench すでに持っているローカルLLMをベンチマーク — 速度、メモリ、品質 — ライブターミナルリーダーボードとして。
homebenchは、ローカルランナー(Ollama, LM Studio, llama.cpp, vLLM、または任意のOpenAI互換サーバー)にインストールされているモデルを発見し、キュレーションされた品質スイートを実行し、トークン/秒、初回トークンまでの時間、実際のマシンでのメモリフットプリントを測定し、ライブ比較リーダーボードをレンダリングするシングルコマンドTUIです。
pip install homebench
homebench
これで完了です。設定不要、APIキー不要、クラウド不要。
なぜ?
この問題の半分を解決する優れたツールはありますが、両方をローカルファーストで実行できるものはありません。llama-bench(llama.cpp内)は速度のみを測定します。lm-evaluation-harnessは品質を測定しますが、洗練されたラップトップUXがなく、ほとんどの人がローカルで実際に使用しているモデルランナーを中心に構築されていません。homebenchはそのギャップを埋めます:ローカルファースト、ゼロコンフィグ、UXドリブンです。クローンして実行し、すでにプルしたモデルに向け、そして「私のローカルモデルの中で実際に良いものはどれで、このラップトップでどれくらいの速さで動作するか?」という疑問に一目で答えを得られます。
測定するもの
メトリック
どのように
tok/s
出力トークン ÷ 生成時間。Ollamaはサーバーサイド評価タイミングを報告します。OpenAI互換バックエンドは、トークンストリームからクライアントサイドでタイミングを取ります。プロンプト処理とモデルロードは除外されます。
TTFT
最初のストリーミングトークンまでの壁時計時間(ランナーが報告する場合のモデルロード時間を除く)。
Memory
ランナーが公開している(Ollama /api/ps, LM Studio /api/v0)常駐モデルサイズ、およびバックエンドプロセスのベストエフォートピークRSSサンプル。
Quality
数学、推論、事実の記憶、指示追従/構造化出力、抽出、コード理解にわたる31の決定論的に採点されたタスク。オプションのLLM-アズ・ジャッジは、オープンエンドタスク(要約、メール、俳句、説明)を追加します。
インストール
pip install homebench
# 次に実行:
homebench
分離されたインストールを好む場合? pipxを使用してください:
pipx install homebench
またはソースから:
git clone https://github.com/david-g-3654/homebench
cd homebench
pip install .
Python 3.9+が必要です。
使用方法
homebench
# 高速デフォルト:3つの最小モデル、クイックスイート(TUI)
homebench --all
# すべての検出されたモデルをベンチマーク
homebench --full
# フル品質スイートを実行(クイックスイートのみではない)
homebench --no-tui
# プレーンライブレンダラー(パイピング/CIに最適)
homebench -m llama3.2,qwen3:8b
# これらのモデルのみ
homebench --limit 3
# モデル数を制限
homebench --provider lmstudio
# LM Studioを使用(自動検出の代わりに)
homebench --provider llamacpp
# llama.cppサーバー(llama-server)
homebench --provider vllm
# vLLM
homebench --provider openai --host http://localhost:5000
# 任意のOpenAI互換サーバー
homebench --refresh-cache
# キャッシュされた応答を再利用するのではなく再計算
homebench --no-quality
# スピード + メモリのみ(高速)
homebench --no-speed
# 品質のみ
homebench --judge qwen3:8b
# LLM-アズ・ジャッジを有効にする(オープンエンドタスクを追加)
homebench --tasks mypack.yaml
# 内蔵スイートの代わりにカスタムタスクパックを使用
homebench --add-tasks mypack.yaml
# パックを内蔵スイートの上に追加
homebench --label "before tuning"
# この実行にタグを付けて後で比較できるようにする
homebench --md results.md
# Markdownレポートもエクスポート
homebench --json results.json
# 生JSONもエクスポート
homebench list
# 検出されたモデルをリスト表示
homebench tasks
# 品質スイートを表示(--tasksでパックをプレビュー)
homebench history
# 過去の実行をリスト表示(自動保存)
homebench diff
# 最近の2つの実行を比較
homebench diff 3 1
# 実行#3(ベース)と実行#1(新しい方)を比較
homebench throughput
# バッチスループットスイープ(同時実行数 1,2,4,8)
homebench throughput --concurrency 1,8,16 --provider vllm
homebench fit
# どの人気モデルがあなたのハードウェアにフィットするか?
完全なフラグリストについては、homebench --help を実行してください。
例出力
Apple M1(16 GB)、Ollama経由での非常に高速なスイート実行:
最終リーダーボード
┏━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━┳━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━┓
┃ # ┃ Model ┃ Params ┃ Quality ┃ Pass ┃ tok/s ┃ TTFT ┃ Memory ┃
┡━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━╇━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━━━┩
│ 1 │ llama3.2:latest │ 3.2B │ 75% │ 6/8 │ 16.8 │ 545 ms │ 2.4 GB │
│ 2 │ alibayram/smollm3 │ 3.1B │ 38% │ 3/8 │ 16.9 │ 829 ms │ 2.1 GB │
└───┴──────────────────────┴────────┴─────────┴──────┴───────┴────────┴────────┘
(数値はその時点でのそのラップトップのものです — 限界を参照してください。)
プロバイダー
少なくとも1つのローカルモデルランナーが到達可能である必要があります:
Provider
--provider
Default host
Host env var
Notes
Ollama
ollama
http://localhost:11434
OLLAMA_HOST
ネイティブAPI;/api/ps経由でモデルメモリを報告します。
LM Studio
lmstudio
http://localhost:1234
LMSTUDIO_HOST
メタデータ+メモリをネイティブ/api/v0経由で拡張します。
lama.cpp
llamacpp
http://localhost:8080
LLAMACPP_HOST
lama-server, OpenAI互換。
vLLM
vllm
http://localhost:8000
VLLM_HOST
--api-keyで起動した場合、VLLM_API_KEYを設定します。
OpenAI互換
openai
—
OPENAI_BASE_URL
任意の/v1サーバー(Jan, LocalAI, TGI, …);--hostを渡します。
自動検出はOllama → LM Studio → llama.cpp → vLLMを試みます(汎用openaiプロバイダーは明示的な指定のみ)。--providerで強制します。--hostまたは上記の環境変数でホストを上書きします。
品質グレーディングの仕組み
スイートは意図的に小さくなっています — カテゴリ全体でモデルを分離するのに十分なタスクがあり、ラップトップで数分で各モデルが実行できる程度です。各タスクは決定論的に採点されます(正確な数値一致、多肢選択、部分文字列、有効なJSON、正規表現)。温度は0で、再現性のために固定シードが使用されます。リストについては、homebench tasksを参照してください。オプションの--judge MODELフラグは、オープンエンドタスクをリファレンス回答に対して1〜5でスコアリングするLLM-アズ・ジャッジ(任意のローカルモデル)をオンにします。これはシグナルであり、オラクルではありません。
デフォルトで高速
ラップトップで全モデルをフルスイートでベンチマークするのは時間がかかるため、デフォルトは最初のクイックルック用に調整されています:デフォルトで3つの最小モデル(最小から順に、結果が速く表示されるように) — すべての場合は--all、選択する場合は-m。高速品質サブセット(全カテゴリにわたる約8タスク) — 全31タスクの場合は--full。レスポンスキャッシング:品質実行は温度0 + 固定シードを使用するため、レスポンスは決定論的であり、~/.homebenchの下にキャッシュされます。再実行は新しいモデル/タスクのみを再生成します(変更されていないものはミリ秒単位でキャッシュから再採点されます)。--refresh-cacheは再計算を強制し、--no-cacheはそれを無効にします。実際には、これにより最初の実行が約15〜25分(全モデル、フルスイート)から約1〜2分に、再実行が数秒になります。徹底的なパス(CI、最終数値)には、homebench --all --full を使用してください。
カスタムタスクパック
JSONまたはYAMLパックで独自の評価を持ち込む — Pythonは不要です。--tasksは組み込みスイートを置き換えます。--add-tasksはそれに追記します。YAMLにはオプションの追加機能が必要です(pip install "homebench[yaml]")。JSONはすぐに使用できます。
# mypack.yaml — homebench --tasks mypack.yaml
name: my-pack
tasks:
- id: capital_japan
category: factual
prompt: "日本の首都は?都市名だけで答えてください。"
grader: {type: contains_any, values: ["Tokyo"]}
reference: Tokyo
- id: add
category: math
prompt: "12 + 30 は?最後に答えを単独の行で終えてください。"
grader: {type: exact_number, value: 42}
- id: explain # graderなし -> judgeのみでスコアリング --judge
category: open
prompt: "光合成を1文で説明してください。"
reference: "植物は太陽光、水、CO2をブドウ糖と酸素に変換します。"
Graderタイプ値:exact_number(値、許容誤差)、multiple_choice(値)、contains_any(値)、regex(パターン、大文字小文字無視)、valid_json(キー)、valid_json_array(長さ)。graderを省略するとjudgeのみのタスクになります。Runnableの例はexamples/にあります。homebench tasks --tasks mypack.yaml で任意のパックをプレビューできます。
履歴と差分
すべての実行は、$HOMEBENCH_HOME/runs(デフォルトは~/.homebench/runs)に自動的に保存されます。--no-saveで無効にし、--labelで実行にタグを付けます。
homebench history
# 過去の実行のテーブル(新しい順)
homebench diff
# 前の実行 -> 最新
homebench diff 3
# 実行#3 -> 最新
homebench diff 3 1
# 実行#3(ベース) -> 実行#1(新しい方)
diffはモデル名を比較し、モデルごとの品質とスループットの差分、および実行間で追加または削除されたモデルを表示します — han