HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

Jeeves。推論によりJevライクな意思決定モデルが改善

Jeeves. Reasoning improves Jev-like decision models (github.com)

242 pointsby nicowaltz95 コメント

要約

Jeevesは、SFT(教師ありファインチューニング)とCISPO(Contrastive Instruction-following Preference Optimization)でトレーニングされた、推論機能を備えたJevスタイルの分類器です。Qwen3.5-9Bモデルをベースに、推論を行うことで決定を下す前に「考える」能力を持ち、Kev-9BやJevといった既存モデルをベンチマークテストで上回る性能を示しました。このモデルは、yes/no、多肢選択、評価などの質問を単一のリクエストで処理でき、Jev互換APIを提供します。

全文翻訳

Jeeves – 推論によりJevライクな意思決定モデルが改善 SFTとCISPOでトレーニングされた、推論機能を備えたJevライクな分類器。 謝辞 Kevに触発されました。 ハイライト 推論してから決定する9B(Qwen3.5-9B、LoRA、ポインターヘッド)のJevライクモデル。ブロック-4のディフュージョンドラフターと、完全なトレーニングコード、およびトレーニング/開発/テストデータ付き。 テストデータ(学習に使用していないもの)でKev-9BとJevを上回る(それぞれ0.889 vs 0.822および0.857)。JevBenchの公開ティアでも(Jevの0.935 vs 0.866)。 Jev互換APIを介して、単一のリクエストでyes/no(noul)、多肢選択(choice)、評価(score)の質問をサポート。 H100 GPUで、思考なしで約0.3秒/リクエスト、思考ありで中央値3.3秒。 チェーン長を切り捨てることで高速化可能。 bf16でCUDA上で実行可能、またはコンピュート能力8.9以上のGPUでFP8線形レイヤー(--precision fp8)を使用可能。 推論はApple Silicon(MPS)でもbf16またはFP8で実行可能。 問題 Jevライクなモデルは、キャリブレーションされた決定確率を提供しますが、精度は低いです。そのため、多くのパイプラインはフォールバックとして推論モデルに依存しています。 Jeevesは、決定を下す前に推論するために、CISPOを使用してJevライクなQwen3.5-9B(LoRAとポインターヘッド)をトレーニングします。これにより、ドメイン外のタスクでのパフォーマンスが向上し、JevBenchハード(公開)でJevを上回ります。 結果 思考あり、貪欲法、2,560トークンキャップでの精度。 Kev-9BとJevの列はKevが公開している数値です。 ベンチマーク | Kev-9B | Jev | Jeeves ---|---|---|--- テスト全体(ドメイン外およびホールドアウト、項目重み付け) | 0.822 | 0.857 | 0.889 転移全体(MMLU-Proおよび埋め込み状態) | 0.579 | 0.800 | 0.746 JevBench全体(公開231項目) | 0.715* | 0.866 | 0.935 QNLI | 0.925 | 0.925 | 0.913 SciQ | 0.963 | 0.988 | 0.991 TweetEval offensive | 0.775 | 0.813 | 0.813 PAWS | 0.763 | 0.788 | 0.875 MMLU | 0.738 | 0.900 | 0.793 Emotion | 0.600 | 0.588 | 0.647 ホールドアウトルール構造 | 0.896 | 0.885 | 1.000 対照ポリシー | 0.900 | 0.963 | 1.000 MMLU-Pro(10ウェイ) | 0.515 | 0.840 | 0.739 埋め込み状態 | 0.740 | 0.700 | 0.759 不明な回答(p ≥ 0.9、低い方が良い) | 0.000 | 0.090 | 0.055 JevBenchハード(公開111項目) | 0.451* | 0.730 | 0.865 JevBench ECE(公開項目) | 0.049 | 0.037 | * Kev-9BのJevBench結果は公開されていません。これらはKev-8B(Qwen3)の数値です。すべてのJevBench数値は、公開のイージー、スタンダード、ハードティア(231項目)に基づいています。シールドジャッジティアは含まれていません。JevとKevの数値は、同じ公開項目に限定されています。 思考なしの場合、同じチェックポイントはテストスプリット(2,962項目)で0.804ですが、思考ありの場合は0.840です。 クイックスタート 要件:Python 3.12およびCUDA GPU。 推論は48GB以上のApple Silicon Macでも実行可能です。 pip install -r requirements.txt リリースされたウェイトをダウンロードして提供します。 hf download PostHog/jeeves --local-dir jeeves-weights python -m inference.serve --model jeeves-weights --drafter jeeves-weights/drafter_k4.safetensors --port 8009 Macでは、エンジンはMPSで実行されます。ウェイトはbf16で21GBを使用します。デフォルトのキャッシュ(--max-rows 8 --max-len 8192)はさらに28GBを使用するため、48GBのMacではスワップが発生し始めます。より小さいキャッシュを使用します。 python -m inference.serve --model jeeves-weights --drafter jeeves-weights/drafter_k4.safetensors --max-rows 4 --max-len 4096 --port 8009 M4 Proでは、1つの質問の思考は約20トークン/秒、思考なしのリクエストは0.3〜0.5秒かかります。 --precision fp8は、CUDAと同様に線形レイヤーを量子化し、Metal w8a16カーネルで実行します。アクティベーションは、CUDAと同様に、すべてのサイズでbf16のままです。ウェイトは11.5GBを使用し、1つの質問の思考は約38トークン/秒になります。出力はわずかに変化します。開発質問では、精度とNLLは測定可能な変化はありませんでした。FP8ウェイトはPostHog/jeeves-fp8からダウンロードできます。これらは、bf16ウェイトでの--precision fp8と同じ出力を提供します。 hf download PostHog/jeeves-fp8 --local-dir jeeves-fp8 python -m inference.serve --model jeeves-fp8 --drafter jeeves-fp8/drafter_k4.safetensors --precision fp8 --max-rows 4 --max-len 4096 --port 8009 python -m model.metal_test は、Metalカーネルをfloat64およびeager参照に対してチェックします。CUDAでは、python -m model.triton_kernels_test は、Tritonロータリー、デルタ状態アドバンス、デルタゲート、convステップ、およびキャッシュ書き込みをeagerおよびflaパスに対してビット単位で、デコードアテンションをfloat32に対してチェックします。python -m inference.cuda_test は、マージされた射影、アテンションマスク、およびFP8 GEMMをチェックします。python -m inference.engine_test は、answer_batchがリクエストをグループにパックする方法を、任意のデバイスでチェックします。 python speed.py --model jeeves-weights --data data/dev.jsonl は、固定セットの開発リクエストの時間を計測します。python -m prep.prep は data/. をビルドします。または、独自のトレーニング済みチェックポイントをスタンドアロンモデルに融合して、drafterで提供します。 python export.py runs/cispo/final --out runs/fused python -m inference.serve --model runs/fused --drafter runs/drafter_k4/drafter.safetensors --port 8009 python export_fp8.py runs/fused --drafter runs/drafter_k4/drafter.safetensors --out runs/fused-fp8 は、エクスポートとそのdrafterのFP8ウェイトをPostHog/jeeves-fp8の形式で書き込みます。 次に、Jevの形式でリクエストを送信します。 curl -s localhost:8009/v1/systemone -H 'content-type: application/json' -d '{ "state": "Shoes arrived two weeks late and in the wrong size. Also I see two charges on my card.", "questions": { "department": {"type": "choice", "instructions": "Which team should handle this?", "criteria": {"returns": "Exchanges, refunds, wrong or damaged items", "shipping": "Delivery status, delays, lost packages", "billing": "Charges, invoices, payment problems"}}, "escalate": {"type": "noul", "instructions": "Does this need urgent human attention?"}, "frustration": {"type": "score", "instructions": "How frustrated is the customer?", "criteria": ["Calm", "Frustrated", "Very angry"]} }, "options": {"max_think": 512}}' H100で--precision fp8を使用し、3つの質問が並列で思考した場合の応答: { "model": "jeeves-latest", "answers": { "department": { "type": "choice", "choice": "billing", "confidence": 0.19, "probabilities": { "returns": 0.4, "shipping": 0.14, "billing": 0.46 } }, "escalate": { "type": "noul", "noul": 0.72 }, "frustration": { "type": "score", "score": 1.5, "legend": { "0": "Calm", "1": "Frustrated", "2": "Very angry" }, "probabilities": { "0": 0.04, "1": 0.43, "2": 0.54 }, "confidence": 0.75 } }, "usage": { "input_tokens": 129, "output_tokens": 160, "reasoning_tokens": 1536 }, "latency_ms": 8141.6 } Python SDK/ はJevのPython SDK(typesafe-sdk)のドロップイン代替品です。 pip install ./sdk from jeeves_sdk import Choice, Noul, Score, TypeSafeClient with TypeSafeClient() as client: result = client.system_one( state="I was charged twice. Please help.", questions={ "billing": Noul(instructions="Is this about billing?"), "tone": Choice(instructions="What is the tone?", criteria={"calm": None, "angry": None}), "urgency": Score(instructions="How urgent is this?", criteria=["can wait", "this week", "today"]), }, max_think=768, return_reasoning=True, ) print(result.nouls["billing"].noul, result.choices["tone"].choice, result.scores["urgency"].score) print(result.reasoning["tone"].text) クライアントはデフォルトでhttp://127.0.0.1:8009(またはJEEVES_BASE_URL)に接続し、APIキーは不要で、最大120秒待ちます。 オプション optionsはオプションであり、送信しないJevクライアントでは無視されます。サーバー全体のデフォルトは、対応するserveフラグで設定されます。 オプション | デフォルト | 効果 ---|---|--- think | true | false | プロンプトのみからの回答(約0.3秒) max_think | 2560 | 各推論チェーンをこのトークン数で切り捨て、その後回答 nothink_threshold | null | no-thinkの信頼度がこの値以上の場合、思考なしで回答 return_reasoning | false | 各質問の推論テキストを応答に追加 325件の開発質問(H100 1台、--precision fp8使用)で: 設定 | 平均推論トークン数 | 中央値/p90レイテンシ ---|---|--- フルシンキング | 0.825 | 1,138 | 3.3秒 / 17.1秒 max_think 768, nothink_threshold 0.9 | 0.806 | 344 | 2.0秒 / 5.6秒 ノーシンキング | 0.775 | 0 | 約0.3秒 仕組み 質問、状態、回答は、Qwenチャットテンプレートに次のようにロードされます。 <state> …state… <q> instructions <opt> o