自分のモデルでCrucibleForgeを実行する:インストールガイド

公開日
2026年11月5日
更新日
2026年11月5日
著者
Jacob Lloyd — プロジェクト完了後、AIの支援を受けて執筆
読了時間
約14分で読めます

かんたんに言うと: CrucibleForgeは、MakoBenchボード上で使用されるすべてのスコアを生成する、無料かつオープンソースのツールです。このページでは、そのインストール方法、ローカルまたはホストされたモデルへの接続手順、簡単なスモークテストの実行方法、および結果の確認方法について説明します。GPUをお持ちでない場合でも、当社のハードウェア上でご自身のモデルを実行することも可能です。

GitHub で CrucibleForge を開く

CrucibleForgeは、MakoBenchボード上のすべてのスコアを生成するためのオープンソースツールです。MIT-0ライセンスに基づき無料で利用可能で、条件も一切ありません。ご自身のモデルを、ご自身のマシン上で実行することもできます。このページでは、インストール手順および最初の実行方法について解説します。以下に記載している各コマンドは、公開されているリポジトリを新たにクローンした環境で実行されたものであり、その際の出力結果もそのまま掲載しています。GPUがない、または時間がない場合は、私たちにご自身のモデルをマシン上で実行してもらうよう依頼していただくことも可能です。

GPUがない場合でも、私たちにご自身のモデルをマシン上で実行してもらえます。

モデルの実行を依頼する 次に実施すべきテストに投票する

CrucibleForgeを実行するのにGPUは必要ありません。テスト用のエンドポイントさえあれば十分です。この依頼フォームは、ご自身ではホスティングできないモデル向けのものです。

要点まとめ

  • 4つのコマンドを実行するだけで、クローンからベンチマークの実行まで進められます:uv sync、config --init、status、all。
  • OpenAI互換のエンドポイントであれば何でも利用可能です。 Ollama、LM Studio、llama.cpp、vLLM、あるいはホスティングされているAPIなどが該当します。
  • CrucibleForgeを実行するマシンにはGPUは不要です。 高速なGPU搭載マシン上では、評価処理を含めてもローカルモデルの実行に約25〜30分程度しかかかりません。
  • まずはスモークテストを試してみてください。 私たちが実施した際の所要時間は1.6分、費用は0.0229ドルでした。
  • スモークテストの結果はスコアにはなりません。 MakoBenchボード上の33のケースのうち4つのみを対象としているため、総合スコアやランクは算出されません。

始める前に必要なものは何ですか?

  • uvを使用したPython 3.12以降、またはDocker。 uvを使えばPythonが自動的にダウンロードされます。
  • OpenAI互換の /chat/completions エンドポイントの背後にある、テスト用のモデル。
  • 判定用のモデル。これはローカルでもクラウド上でも利用可能な、指示に従って動作する能力のあるモデルです。コード自体は実行によって評価されますが、チャット機能には判定用モデルが必要です。
  • Linuxの場合は bubblewrap(bwrap)。モデルが生成したコードはこの中で実行されます。WindowsやmacOSではbubblewrapは存在せず、その場合は --allow-unsandboxed オプションを指定するか、コンテナ自体がサンドボックスとなるDockerイメージを利用します。

どうやってインストールすればいいですか?

Linuxではこれが標準的なインストール方法です。Python関連ツールのインストールを避けたい場合は、Dockerを利用する方が簡単です。READMEにはWindows、Linux、macOS向けのコピー&ペースト用コードが記載されており、それぞれでDocker DesktopまたはComposeが第一選択肢となっています。今回のページではDocker経路は試していません。

git clone https://github.com/LaserLloyd/CrucibleForge.git
cd CrucibleForge
uv sync --python 3.13
uv run crucibleforge --version
crucibleforge 4.0.1

これがバージョン4.0.1で、執筆時点での公開版です。次に設定ファイルを作成します:

uv run crucibleforge config --init
wrote models.yaml - edit providers/models, then `crucibleforge status`

スターターファイルには、LM Studio、Ollama、llama.cpp、または任意のローカルサーバー、DeepSeek、OpenRouter、OpenAI、Open WebUIといったプロバイダーのほか、4つのサンプルモデルが記載されています。ただし、いずれかを有効化しない限り何も動作しません。

どのようにしてモデルを接続すればよいですか?

models.yamlには、プロバイダー、モデル、およびジャッジが必要です。

  1. プロバイダー。 モデルが提供される場所です。/chat/completionsという形式に対応する任意のサーバーであれば、type: openaiと連携可能です。READMEに記載されているローカル環境での例としては、Ollama用にhttp://localhost:11434/v1、LM Studio用にhttp://localhost:1234/v1、vLLM用にhttp://localhost:8000/v1があります。ホスティングされているAPIの場合は、api_key_env: NAME_OF_ENV_VARを指定します。ただし、実際のキー自体はファイル内に記載しません。
  2. モデル。 name、provider、サーバーが認識するmodel_id、そしてcontext_lengthを含むエントリです。
  3. ジャッジ。 実行ごとに--judge provider:model_idとして渡されます。

サーバーが提供しているモデルを確認するには、そのサーバーに問い合わせてください。以下は環境変数からキーを取得するホスティング型プロバイダーの例です:

uv run crucibleforge models discover deepseek
  * deepseek-flash
  * deepseek-v4-pro

2 models on deepseek (* = in registry)

星印がある場合、そのモデルはすでにレジストリに登録済みであることを意味します。初期設定ファイルではdeepseek-flashが有効になっているため、私たちの実行時には何も編集する必要はありませんでした。ご自身のモデルを追加する際は、次のようなエントリを記述してください:

models:
  - name: my-model
    provider: ollama
    model_id: qwen3:8b
    context_length: 32768

設定内容をどう確認すればよいですか?

export DEEPSEEK_API_KEY=...       # only for a hosted provider or judge
uv run crucibleforge status

キーが設定されていない状態では、ホスティングプロバイダーのステータス出力は次のようになります(関連する行のみ抜粋しています):

suite revision: 4.0.1+e3d1c6fb
providers:
  ollama         openai      http://localhost:11434/v1       DOWN conc=8
  deepseek       openai      https://api.deepseek.com/v1     UP   conc=8 key: $DEEPSEEK_API_KEY (NOT SET)
    reachable, but it wants an API key: set $DEEPSEEK_API_KEY (HTTP 401)
registry (models):
  [enabled ] deepseek-flash   deepseek   deepseek-flash    $0.14/0.28 per 1M
cases: 393 total (235 hard)
smoke subset: 37 cases
benchmark (bench): 33 cases

DOWNという表示は、そのアドレスから何の応答も得られていないことを意味します。これは、実際には起動させていなかったローカルサーバーにおいては予想される結果です。UPかつ401という表示は、ホストに接続可能であるもののキーが必要であることを示しています。ケースの数も重要です:全体で393個のケースがあり、そのうち33個がボードで使用されています。

実行を開始する前に、そのコストはいくらになりますか?

--planを任意の実行内容に追加すると、何も実行されません。代わりに、実際に実行される内容とその見積もり時間が表示されます。

uv run crucibleforge all --models deepseek-flash --judge deepseek:deepseek-v4-flash --plan
  T1 - every model: 29 rows (29 cases) + 4 perf probes
  one round - hosted API (nothing loaded): 29 rows, 8 requests at once
  estimate: generation 18.5 min; judge 16.0 min ... -> ~34 min
(plan only - no model, provider or judge was called; times are estimates)

これがホストされたモデルにおける全処理内容です。ツールの見積もりでは約34分かかるとされています。これはあくまで見積もり値であり、実際の計測値ではありません。ローカルモデルの場合、READMEによると高速なGPU搭載マシン上でおよそ25分から30分程度かかると記載されています。

スモークランとはどのようなものですか?

--smokeフラグを使用すると、生成処理・評価処理・レポート作成といった一連の流れが小規模なデータセットに対して実行されます。これがご自身の設定が正しく機能しているかを確認する最も手早い方法です。今回はDeepSeek Flashをモデルおよび評価用エンジンの両方として利用しました。これはREADMEに記載されているクイックスタート手順でも推奨されている組み合わせです。また、実行時期はDeepSeekのピーク時間帯を避けました。

uv run crucibleforge all --smoke --models deepseek-flash --judge deepseek:deepseek-v4-flash --yes
... profile bench: 4 cases, thinking cap 24576, judge deepseek:deepseek-v4-flash
... link check passed: deepseek reachable, data channel OK
... run: models=['deepseek-flash'] cases=4 smoke=True fresh=False
... [deepseek-flash] RD1-marisol r1 done (15 rows)
... judging done: 1 rows, 0 unparsable judge verdicts, 0 empty generations, 0 errored
run summary:
  deepseek-flash: 15 rows, load 0.0s (deepseek), $0.0229
timing: generation 1.2 min, judge 14 s, report 8 s, total 1.6 min
wrote results/report.md, results/failures.md, results/report.html

この実行には1.6分かかり、費用は$0.0229でした。15件のデータのうち、1件はロールプレイケースであり、残りは処理速度を測定するためのテストデータです。以下の2点の注意事項があります:

  • 評価用エンジンのAPIが構造化出力のリクエストを拒否したため、CrucibleForgeではそのセッションにおいて自由形式のJSONでの処理に切り替わりました。それでもなおスコアは算出されました。
  • 評価用エンジンが成人向けコンテンツを含むテキストの適正性チェックに失敗しました。そのためCrucibleForgeでは他のデータのみを評価し、成人向けコンテンツを含むデータについては対応可能な別の評価エンジンによる処理が待機状態となりました。READMEにも記載されていますが、ほとんどのホスト型評価エンジンも同様の挙動を示します。こうしたスコアは集計表上に表示されるものの、「合計値」には加算されません。

結果の読み方は?

results/report.htmlをブラウザで開くか、results/report.mdをご覧ください。今回のスモークテストでは1行のみが出力されました:

| Model          | Overall | Class | Coding | Chat        | tok/s | Suite | Notes                                          |
| deepseek-flash | -       | -     | -      | 2.5 +/- 0.1 | 159.7 | 4.0.1 | partial (4/33 cases); judged by deepseek-v4-flash |

Chatの数値「2.5」は、モデルのスコアではありません。これは、Chatという役割の中で実際に実行されたケースの数を示しています。その行には「partial(33件中4件)」と記載されており、部分的な結果しか得られていないモデルには「Overall」「Class」「ランク」といった値は存在しません。これはメインボード上でも同様のルールです。実際の合計値(コード部分+Chat部分で20件分)を知るためには、全テストを実行する必要があります。各列が何を意味するかについては、MakoBenchの仕組みおよびMakoBenchがテストする内容をご覧ください。

速度(tok/s)は、同じハードウェア上で実行されたモデル同士でのみ比較可能です。ホスティングされているモデルの速度は、提供業者やその時の負荷状況によって変わります。

完全なベンチマークを実行するにはどうすればよいですか?

uv run crucibleforge all --models my-model --judge my-provider:my-judge --yes

まずは --fresh を付けて、モデルのこれまでの実行記録をアーカイブします。その結果は results/ に保存され、そこには models.yaml も含まれます。このファイルにはスコア表や失敗したケースの情報、HTML形式のレポート、そして各プロンプトとその応答内容が記録されています。ウェブGUIの起動は uv run crucibleforge gui というコマンド一つで行え、デフォルトではループバックインターフェースでのみ通信可能です。

事前に知っておくべき点

  • コーディングケースではモデルが生成したコードが実行されます。 Linuxではbubblewrapを、それ以外の環境ではDockerイメージをご利用ください。 --allow-unsandboxed を指定すると、自分自身としてそのコードが実行され、自身のファイルにもアクセス可能になります。
  • ホスト型実行には費用がかかります。 まず --plan を実行してスモークテストを行ってください。
  • このベンチマークスイートには成人向けのコンテンツも含まれます。 これらは通常の評価対象とは別扱いとなり、Totalスコアには加算されません。READMEにもその点に関する注意書きがあります。
  • チャット系のスコアは判定エンジンによって変動します。 MakoBenchでは、判定エンジンとしてGemma 4 31B(検閲なしの“ヘレティック”ビルド、Q8)が自社製GPU環境上で使用されています。同じ判定エンジンを使えば、ご自身の測定値も掲示板の数値と一致します。コード系の評価は実際にコードを実行して行われるため、どちらの場合でも比較可能です。
  • スコアは同一スイートバージョン内で比較されます。 現在ご覧いただいているのはスイート4.0に関する内容です。 スイート4.0で何が変更されたかもご参照ください。

すべて問題なかったでしょうか?

ほぼ問題ありませんでした。さらに uv run crucibleforge cases verify も実行し、オフライン状態で正解データを再生成してみました。この検証では393件のケースをチェックした結果、1件だけ問題があることが判明しました。それは信号テストにおいて参照用ソリューションがタイムアウトしてしまったコードバンク関連のケースです。この実行時には他の作業も同時に行われていたため、これが本当の不具合なのか、単にマシンの処理速度が遅かっただけなのかは断定できません。まだ上流側には報告していません。同じケースで問題に直面されている方もいらっしゃるはずです。

私たちに実行してもらいたいですか?

GPUがない場合でも大丈夫です。私たちのマシンでモデルを実行するようご依頼ください。

モデルの実行を依頼する 次に実行すべきものに投票する

大規模なモデルは私たちのハードウェアに収まる必要があるため、何を実行するかは私たちが決定します。投票結果によって「Vote」タブ内の実行順序が決まります。その結果は MakoBenchボード に掲載されます。

関連情報:MakoBenchの仕組み、Suite 4.0:主な変更点、および ボード です。


← AIとローカルLLMをもっと見る