Skip to main content

ERABI(えらび)

ERABIは、context(状況)、question(判断基準)、2~16個のchoices(候補)から、全候補の確率分布を返すローカル判断エンジンです。Jevの公式版や再現版ではありません。回答は常に確認対象(review)であり、最大確率は正解の保証ではありません。

インストールと最初の推論

Python 3.11以上が必要です。PyTorchのGPU版を使う場合は、先に利用環境に合うPyTorchをインストールしてください。

python -m pip install erabi
erabi predict --request '{"schema_version":"1","context":"7冊のノートと2個の消しゴムを買った。","question":"全部で何個?","choices":[{"id":"nine","text":"9個"},{"id":"ten","text":"10個"}]}'

上のワンラインはPowerShell 7でも動作確認済みです。入力をファイルに保存して erabi predict --request request.json としても使えます。初回は選択された形式のモデル(約0.88~1.76GB)を取得し、以降はHugging Faceのローカルキャッシュを再利用します。ネットワークが使えない場合は、事前取得したモデルのローカルディレクトリを--model-idで指定してください。

モデルの保存先

ダウンロード先を指定するには、--model-cache-dirを使います。predict、evaluate、python -m erabi.serveで利用でき、トークナイザーと重みの両方に適用されます。保存先に十分な空き容量を確保してください。

erabi predict --request examples/request.json --model-cache-dir "F:\models\erabi-cache"
$env:ERABI_MODEL_CACHE_DIR = "F:\models\erabi-cache"
erabi predict --request examples/request.json

Linux/macOSではexport ERABI_MODEL_CACHE_DIR=/data/models/erabi-cacheと設定します。優先順位は--model-cache-dir、ERABI_MODEL_CACHE_DIR、Hugging Face標準のHF_HUB_CACHE/HF_HOME、既定キャッシュの順です。環境変数を変更しても既存のダウンロードは移動されず、新しい場所に再取得されます。--model-idにローカルモデルディレクトリを指定した場合はその場所から読み込み、キャッシュ先の設定はモデル自体の移動には使われません。

既定モデルは、ONNX両形式を含む検証済みHugging Faceリビジョン042998970aa20cc3371e0f7f0e320013a152c068に固定しています。Windowsでシンボリックリンクを使えない環境ではモデルカード更新だけでも別リビジョンのキャッシュが重複し得るためです。新しいリビジョンを意図的に使う場合は--revision mainまたはコミットIDを指定してください。

モデル形式の自動選択とおすすめ

形式選択はERABI 0.1.2以降の機能です(0.1.1以前はPyTorch版のみ)。既存環境はpython -m pip install --upgrade erabiで更新できます。--model-formatを省略するとautoです。--deviceを省略した場合はCUDAが利用可能ならcuda:0、そうでなければcpuを選びます。ONNX Runtimeが使える場合、CPUではFP32 ONNX、CUDA Execution Providerが使えるGPUではFP16 ONNXを必要な形式だけHugging Faceから取得します。ONNX Runtimeがない場合や、CUDA Execution ProviderがないGPUでは従来のPyTorch safetensorsに戻します。別のHugging FaceモデルIDは互換性維持のためautoでPyTorchを使い、明示指定すれば同じONNX配置のモデルも利用できます。

利用形態 おすすめ 理由
NVIDIA GPU + 対応するONNX Runtime GPU版 auto → onnx-fp16 このホストでp50が35.90→19.00ms、元weightsと最上位90/90一致
CPU + ONNX Runtime CPU版 auto → onnx-fp32 このホストでp50が366.73→201.67ms、元weightsと最上位90/90一致
ONNX Runtimeなし・互換性優先 pytorch pip install erabiのみで動作し、元のsafetensorsを使用

これらはPractical V1の未レビュー合成90件での比較であり、人手goldでの品質保証ではありません。INT8版は今回の量子化設定で予測が大きく変わったため、自動選択・公開対象から除外しました。

PyTorchのGPU版を使う場合は公式案内で環境に合う版を先に導入します。ONNX RuntimeはCPUならpython -m pip install onnxruntime、NVIDIA GPUなら環境に合うonnxruntime-gpuを導入してください。両パッケージを同じ仮想環境に同時インストールしないでください(ONNX Runtime公式案内)。GPU版はPyTorch、CUDA、cuDNNと互換な版を公式CUDA表で確認してください。

erabi doctor
erabi predict --request examples/request.json --device cpu
erabi predict --request examples/request.json --device cuda:0
erabi predict --request examples/request.json --model-format pytorch
erabi predict --request examples/request.json --model-format onnx-fp32 --device cpu
erabi predict --request examples/request.json --model-format onnx-fp16 --device cuda:0

ERABI_MODEL_FORMAT=onnx-fp32のように環境変数でも指定できます。優先順位は--model-format、ERABI_MODEL_FORMAT、autoです。明示指定したONNX形式がそのデバイス・実行環境に対応しない場合は、別形式へ黙って切り替えずエラーにします。Python APIではfrom erabi.model_loader import load_engineを使い、load_engine(model_format="auto", device="cpu")のように指定します。predict、evaluate、ローカルHTTP APIの--model-formatで同じ選択ができます。

無指定の既定値は公開済みのERABI Practical V1実験モデルです。正式合格モデルではなく、未レビュー合成データで追加学習した未校正weightsです。別のモデルを使う場合はローカルパスまたはHugging FaceのモデルIDを指定できます。

erabi predict --request examples/request.json --model-id path/to/checkpoint
# または、利用するモデルIDを既定値として設定
export ERABI_MODEL_ID=owner/model-name
erabi predict --request examples/request.json

erabi doctor はCPU/CUDAと空き容量を表示します。erabi evaluate --input examples/smoke_cases.jsonl --output-dir runs/smoke は評価ファイルを処理します。ローカルHTTP APIはオプション依存を入れて python -m erabi.serve --model-id path/to/checkpoint で起動します(localhost限定)。

入出力とデータセット形式

推論入力はUTF-8 JSONです。候補のidと順序を保ち、全候補のlogitsに対して1回だけSoftmaxを適用します。入力全体が512トークンを超える場合は無言で切り詰めずにエラーにします。

{
  "schema_version": "1",
  "context": "文房具店でノートを7冊、消しゴムを2個買った。",
  "question": "全部で何個買った?",
  "choices": [
    {"id": "a", "text": "9個"},
    {"id": "b", "text": "10個"}
  ]
}

出力のchoicesは各候補のidとprobabilityを入力順で返し、best_candidate_idは最大logitの候補を示します。decision.statusは既定でreview、未校正のcalibration.statusはnoneです。例はexamples/request.jsonを参照してください。

学習・評価データは1行1問のJSONLです。上の入力に加えて、最低限id、group_id、targetを付けます。group_idは同じ原題の言い換えや候補順序違いをまとめ、train/dev/calibration/final_test間で重複させません。

{"schema_version":"1","id":"sample-001","group_id":"story-001","context":"ノート7冊と消しゴム2個を買った。","question":"全部で何個?","choices":[{"id":"a","text":"9個"},{"id":"b","text":"10個"}],"target":{"kind":"hard","choice_id":"a"},"language":"ja","family":"everyday_arithmetic","review_status":"unreviewed"}

target.choice_idは選択肢のIDを参照し、選択肢を並べ替えても正しいIDを保ちます。language、family、review_statusなどは出所・品質の追跡用メタデータです。合成教師ラベルを人手確認済みgoldと呼ばないことが重要です。Practical V1のデータ説明に生成・監査の詳細があります。

学習と評価で得られた知見

2026-09-22時点の追加学習実験では、凍結RC3(約438Mパラメータ)からPractical V1のtrain 2,414問のみで1 epoch、151 optimizer steps、peak LR 2.5e-6、microbatch 2・勾配蓄積8、fp16 AMPを実施しました。dev 399問と旧RC3 Bridge 480問で選定し、eval 386問は選定後に一度だけ評価しました。release weightsは上書きしていません。

セット 学習前 学習後
Practical V1 dev 59.90% (239/399) 77.19% (308/399)
Practical V1 eval 61.66% (238/386) 76.17% (294/386)
旧RC3 Bridge 88.75% (426/480) 88.54% (425/480)

新データでは日常算数23/68→48/68、ツール選択50/70→62/70、JSONログ判断51/69→65/69と改善しましたが、読解は54/71→50/71に低下しました。候補順序の入替一致率は旧Bridgeで97.29%→97.50%でした。同一教師モデルが作成・再判定した未レビュー合成データ上の結果であり、独立した人手goldでの汎化性能、実在入試問題の成績、Jevとの同等性は示しません。現時点では校正・正式リリースも未実施です。

Practical V1は日本語・英語・簡体字中国語の6分野(日常算数、ツール選択、会話の次行動、JSON会話ログ、読解、創作入試風)で構成されます。実在の入試問題や私的会話ログは利用していません。生成・再判定に使ったDeepSeek経由の料金推計は$1.0612で、追加予算枠は使いませんでした。より信頼できる次の評価には、人手ラベル監査と独立した実問題の調達が必要です。

再現用コードはscripts/train_practical_v1.py、監査結果はdata/practical_v1/audit.jsonにあります。この学習スクリプトの再実行には別途RC3チェックポイントがrelease/rc3/modelに必要です。GPU学習と大容量weightsはpipパッケージに含まれません。

Practical V1 推論最適化の実測

2026-09-22、Windows、RTX A4000 16GB、PyTorch 2.6.0+cu124、ONNX Runtime 1.21.0で、同じPractical V1 checkpointを比較しました。CPUはPyTorch safetensors、ONNX FP32、動的INT8、静的QDQ W8A8、GPUはPyTorch safetensors、ONNX FP16、静的QDQ W8A8を試しています。90件はeval_teacher_agreed.jsonlから分野・言語別に抽出した未レビュー合成ラベルです。全モデルで温度1.0、全90件の予測確認後に8回ウォームアップし、40回の単件レイテンシを測定しました。CPU再測定とGPU測定時、Robloxは終了し、GPUの他負荷はほぼありませんでした。

実行先・形式 重み/ONNX容量 p50 / p95 元weightsとの最上位一致 合成教師ラベル一致
CPU PyTorch safetensors 1.75 GB 366.73 / 521.44 ms 基準 69/90
CPU ONNX FP32 1.76 GB 201.67 / 378.73 ms 90/90 69/90
CPU ONNX 動的INT8 1.04 GB 120.42 / 236.11 ms 49/90 42/90
CPU ONNX 静的QDQ W8A8 0.84 GB 908.17 / 1,142.89 ms 33/90 36/90
GPU PyTorch safetensors 1.75 GB 35.90 / 44.12 ms 基準 69/90
GPU ONNX FP16 0.88 GB 19.00 / 22.80 ms 90/90 69/90
GPU ONNX 静的QDQ W8A8 0.84 GB 84.75 / 89.44 ms 29/90 27/90

このホストではCPUはONNX FP32、GPUはONNX FP16が速度と出力一致の両面で有望でした。FP32の最大確率差は元weights比で最大0.00000493、FP16は最大0.00374でした。今回の動的/静的INT8設定は軽くなっても予測が大きく変化し、静的版はCPU/GPUとも遅くなりました。今回の静的W8A8はONNX RuntimeのMinMax校正によるQDQであり、SmoothQuantではありません。 RTX A4000上でのSmoothQuant高速化を証明する結果ではなく、今回のINT8版を配布・既定化しません。CUDA Execution Providerが有効でも全ノードのGPU実行は保証されないため、静的INT8の遅さの原因をCPUフォールバックと断定しません。FP32/FP16版は実験モデルとして配布しますが、独立goldでの確認や校正は未実施です。

再現にはリポジトリをチェックアウトし、開発用仮想環境へpip install -e ".[dev]"、環境に合うonnxruntimeまたはonnxruntime-gpuとonnxを導入します。以下は公開モデルをHugging Face CLIで別ディレクトリへ取得する例です(約1.75GB、十分な空き容量が必要)。実験結果はruns/配下(Git管理外)へ書き、モデルと評価結果の既存ファイルは上書きしないでください。

$out = "runs/practical_v1_optimization_20260922"
$checkpoint = "$out/checkpoint"
hf download sugarknight/erabi-practical-v1-experimental model.safetensors config.json tokenizer.json tokenizer_config.json --local-dir $checkpoint
python -c "from pathlib import Path; from scripts.export_rc3_onnx import export_fp32_model, export_fp16_model; p=Path('$checkpoint'); o=Path('$out'); export_fp32_model(p,o/'fp32'); export_fp16_model(p,o/'fp16')"
python scripts/benchmark_practical_v1_runtimes.py quantize --mode dynamic --fp32-dir "$out/fp32" --output-dir "$out/int8_dynamic_cpu"
python scripts/benchmark_practical_v1_runtimes.py quantize --mode static --fp32-dir "$out/fp32" --output-dir "$out/int8_static_w8a8" --train-file data/practical_v1/train.jsonl --calibration-count 128
python scripts/benchmark_practical_v1_runtimes.py benchmark --backend pytorch --device cuda --model-dir $checkpoint --output "$out/results/pytorch_cuda.json"
python scripts/benchmark_practical_v1_runtimes.py benchmark --backend onnx --device cuda --model-dir "$out/fp16" --output "$out/results/onnx_fp16_cuda.json"
python scripts/benchmark_practical_v1_runtimes.py compare --baseline "$out/results/pytorch_cuda.json" --candidate "$out/results/onnx_fp16_cuda.json"

CPU比較は同じbenchmarkコマンドで--device cpuを指定し、--backend pytorch --model-dir $checkpoint、または--backend onnx --model-dir "$out/fp32" / "$out/int8_dynamic_cpu" / "$out/int8_static_w8a8"をそれぞれ実行します。GPU静的INT8も--backend onnx --device cuda --model-dir "$out/int8_static_w8a8"で測れます。既定の90件・8回ウォームアップ・40回計測を変更する場合は--cases、--warmup、--iterationsを指定します。静的量子化の128件はtrainのみから取り、評価90件を校正には使いません。初回のモデル読込・エクスポート・量子化の時間は上記の単件レイテンシに含めず、端末・CPUスレッド数・温度・入力長で値は変わります。

開発とライセンス

python -m pip install -e ".[dev]"
python -m pytest tests -q

コードはMIT Licenseです。ベースモデルと学習済みweightsには別のライセンスが適用されます。THIRD_PARTY_LICENSES.mdを参照してください。

Metadata

Release files for erabi 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for erabi 0.1.2
File Size Uploaded
erabi-0.1.2.tar.gz 110.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for erabi 0.1.2
File Interpreter ABI Platform
erabi-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 202.1 kB

Release files / erabi-0.1.2.tar.gz

Download URL erabi-0.1.2.tar.gz
Size 110.5 kB
Tags Source
SHA-256 checksum
How to use checksums
2e5f78bc58633620cc84acf31fb79e439a27c7b78e44d77893d3306371c5226b
BLAKE2b-256 checksum
How to use checksums
9ea80c13db20d2cf40ccbc269385e6d0bb32d971d4be5e938d438e37432aba0f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / erabi-0.1.2-py3-none-any.whl

Download URL erabi-0.1.2-py3-none-any.whl
Size 91.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6c8e9856b279732217c52daad091639edb6bbaefcbc8229c6e8a19042f76cfae
BLAKE2b-256 checksum
How to use checksums
32bebeec11400584d91b8db30a9e48a4ede04c80f9fbada969b841197e7fabb7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release history Release notifications | RSS feed

0.1.4

2 release files

0.1.3

2 release files

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page