−25%

Windows 年払い、10月31日まで。 プランを見る

EQVPS
始める

LLM 評価用サンドボックス:モデルが書いた1,000件の解答を約1セントで実行

プログラミング課題でモデルを採点するには、誰も手で書いていない何千ものプログラムを実行する必要があります。ノートPCではなく、microVM 上の使い捨てサンドボックスで実行しましょう。秒単位の課金に加え、スループットと CPU の制限についても正直に説明します。

コーディングベンチマークには、あまり語られない秘密があります。モデルを採点するには、モデルが書いたものを実行しなければならないのです。数百問に各10件の解答で pass@k を回せば、生成されたばかりのプログラムが何千本にもなります。見知らぬ人から来たものなら、そのうち1本たりとも curl | bash で実行しないはずです。

たいていの人はノートPCで subprocess.run とタイムアウトを使って始めます。これは、ある解答が 40 GB のファイルを書き出したり、マシンが止まるまでプロセスを fork したり、こっそりホームディレクトリを読んだりするまでは機能します。解決策は賢いタイムアウトではありません。どうなっても構わない場所で解答を実行することです。

うまくいく構成

サンドボックスは、Python 3.12、Node.js 22、bash を備えた Firecracker microVM で、約1秒で起動し、使い終わったら削除されます。外向きのインターネットは使えますが受信はできず、中にはあなたのものは何もありません。

落とし穴は、サンドボックスを関数呼び出しのように扱うことです。サンドボックスはそれぞれ最低60秒分課金され、起動に1秒かかるため、解答ごとに1つでは遅く無駄が多くなります。代わりにハーネスを中に置きます。

from eqvps import Sandbox

with Sandbox.create(tariff="standard", ttl=4 * 3600) as sb:
    sb.upload("/root/harness.py", open("harness.py").read())
    sb.upload("/root/samples.jsonl", open("slice_03.jsonl").read())
    task = sb.exec("python3 /root/harness.py /root/samples.jsonl > /root/results.jsonl",
                   background=True)
    task.wait(poll_interval=10)
    results = sb.download_text("/root/results.jsonl")

中では harness.py が各解答を個別の短いタイムアウト付きのサブプロセスで実行し、pass、fail、timeout を記録します。おかしな動きをした解答が止めるのは自分のサブプロセスだけで、実行全体ではありません。もし解答がサンドボックス自体を壊したら、失うのは1つのスライスだけです。サンドボックスを作り直して続ければ済みます。

ファイルは1回の転送あたり最大 5 MB なので、大きなデータセットはスライスに分割してください。どのみち並列化のためにそうしたいはずです。

スループットの実際

アカウントは最大20個のサンドボックスを保持できますが、同時に実行されるコマンドは2つです。バックグラウンドタスクは実行中ずっとカウントされます。ですから速い評価とは、20個のサンドボックスが2つの枠を奪い合う形ではなく、2つのサンドボックスがそれぞれバックグラウンドで自分のスライスを処理していく形です。

一般的なコーディングベンチマークならこれで十分です。ほとんどの解答は1秒未満で終わり、1つのサンドボックスで1時間に何千件も処理できます。巨大なスイートで多数のモデルを同時に評価する必要があるなら、上限に達するでしょう。その時点では、独自の分離を動かす VPS のほうが適した道具です。

知っておくべき CPU ルール

サンドボックスは断続的な負荷向けに作られています。CPU 使用率 90% 超が15分以上続くサンドボックスは不正利用とみなされ、一時サンドボックスは停止されます。素早い実行と結果の記録を交互に行う通常の評価は、その水準に近づきもしません。何時間も CPU をフルに使うベンチマーク(解答ごとに大きなプロジェクトをコンパイルする、数値計算のストレステストなど)は該当します。その場合は月単位で VPS を借りてください。AI agent プランなら $10 で 4 vCPU と 4 GB です。

1回の実行の費用

プランの vCPU と RAM に対して秒単位、最低60秒で、プリペイド残高から支払います。

負荷プラン時間おおよその費用
短い Python の解答 1,000件small(0.5 vCPU、1 GB)約20分$0.011
解答 5,000件、numpy 使用可standard(1 vCPU、2 GB)約2時間$0.13
解答ごとのビルド + テストplus(2 vCPU、4 GB)約3時間$0.40

これらの解答を生成するモデル呼び出しのほうが、実行よりも高くつきます。たいてい1桁違います。

キーと再現性

ハーネスがサンドボックス内からモデルの API を呼び出す場合(たとえば LLM-as-judge 方式の採点など)は、キーをサンドボックスの環境変数として渡してください。値は暗号化して保存され、ログには一切記録されず、API が返すのは変数名だけです。

再現性のために、ハーネス内でパッケージのバージョンを固定し、結果と一緒にサンドボックスのプランを記録してください。すべてのサンドボックスは同じクリーンなイメージから起動するため、「自分のノートPCでは動いた」という変数が数値から消えます。正直なところ、それだけでも乗り換える価値があります。

まずはサンドボックスのページとサンドボックスのドキュメントから始めてください。新規アカウントには $1 分のサンドボックス利用時間が付与され、small プランで数千件の解答を使った最初の評価が回せます。バックグラウンドタスクとファイル転送は SDK リファレンスに、クォータの全表はサンドボックスの制限と課金にあります。

関連:AI エージェント用サンドボックス、サンドボックスで初めてのエージェントタスク。

デプロイの準備はできましたか?暗号通貨で支払い、KYC不要 — 約1分でオンライン。

今すぐデプロイ →

FAQ

そもそも評価にサンドボックスが必要なのはなぜですか?

モデルが書いた何千ものプログラムを実行するからです。ほとんどは無害ですが、無限ループするものもあれば、ファイルを削除したりネットワーク接続を開いたりするものも少数あります。手元のワークステーションではデータへのリスクですが、サンドボックスではただの失敗した解答です。

解答ごとにサンドボックスを作るべきですか?

通常はいいえ。サンドボックスの作成には約1秒かかり、最低60秒分課金されるので、解答ごとに1つ作ると時間も費用も無駄になります。1つのサンドボックス内で、多数の解答をそれぞれ個別のタイムアウト付きで実行するハーネスを動かし、モデルを切り替えるときや何かに壊されたときにサンドボックスを作り直してください。

どれくらい速く回せますか?

1つのアカウントは、最大20個のサンドボックス全体で同時に最大2つのコマンドを実行します。実用的なパターンは、少数のサンドボックスそれぞれでハーネスをバックグラウンドタスクとして動かし、データセットの一部を処理させる形です。

長いベンチマークを何時間も実行できますか?

バックグラウンドタスクなら、サンドボックスの寿命(一時サンドボックスなら24時間)まで可能です。ただし、CPU をフルに使った状態が15分を超えるサンドボックスは不正利用とみなされます。断続的な評価は問題ありませんが、何時間も続く安定した計算処理は VPS 向きです。

サンドボックスから自分のモデルの API を呼び出せますか?

外向きのインターネットは開いているので可能です。API キーは生成されたコードに貼り付けるのではなく、サンドボックスの環境変数として渡してください。暗号化して保存され、API から返されることはありません。

コメント

まだコメントはありません。最初になりましょう。

コメントを残す

コメントは表示される前にモデレートされます。