
私はNgのRYSメソッドを再現し、Qwen2.5-32Bの特定の3層を複製すると推論が17%向上し、Devstral-24Bの層12-14を複製するとBBHの論理推論が0.22→0.76に改善することを発見しました。トレーニングも重みの変更も不要で、同じ回路を通して隠れ状態を2回ルーティングするだけです。ツールも含まれています。AMD GPU2枚、1夕方の作業です。
3層を複製。トレーニング不要。論理推論が約0.22→0.76に。
このツールキットは、トランスフォーマーモデル内部に隠された「推論回路」を見つけて活用します。考え方: 連続した特定の層ブロックは分割不可能な認知ユニットとして機能します。それらをフォワードパスで複製する(同じ重み、トレーニングなし、マージなし)と、モデルは特定の能力で測定可能なほど賢くなります。
David NgのRYSメソッドに基づき、新たな発見で拡張しています。ここにあるものはすべて、2枚のAMDコンシューマーGPU(RX 7900 XT + RX 6950 XT)で1晩で発見されました。
Vast.ai上のH200インスタンスでフルテストを実行し、devstralベースと手術後モデルを比較しました。結果は次のとおりです。この手術は実際に特定の効果をもたらしています。数学的推論と因果推論を向上させる一方、指示追従とコード生成は犠牲になります。モデルはより深く考えますが、指示への従順さは低下します。
resultsフォルダには、eval_baseとeval_surgeryの結果が含まれています。 また、Vast.aiで全体を実行するために使用したスクリプト vastai_rys_eval.sh もリポジトリに追加しました。 vastaiインスタンスは次のコマンドで作成されました。
vastai create instance somenumberhere --image vastai/base-image:cuda-12.8.1-cudnn-devel-ubuntu22.04 --disk 80 --direct --ssh
=================================================================================
lm_eval Results Comparison
=================================================================================
Metric base rys_12_15 Δ(last-first)
---------------------------------------------------------------------------------
bbh/causal_judgement [exact_match] 0.5775 0.6364 +0.0588
bbh/date_understanding [exact_match] 0.9440 0.9000 -0.0440
bbh/logical_deduction_five_objects [exact_match] 0.7440 0.7320 -0.0120
bbh/navigate [exact_match] 0.9600 0.9440 -0.0160
gsm8k_cot [flexible-extract] 0.8650 0.8787 +0.0136
gsm8k_cot [strict-match] 0.8408 0.8704 +0.0296
ifeval [inst_level_loose_acc] 0.7446 0.7206 -0.0240
ifeval [inst_level_strict_acc] 0.6990 0.6595 -0.0396
ifeval [prompt_level_loose_acc] 0.6728 0.6488 -0.0240
ifeval [prompt_level_strict_acc] 0.6229 0.5767 -0.0462
mbpp [pass_at_1] 0.7000 0.6700 -0.0300
=================================================================================
Average (all metrics) 0.7610 0.7488 -0.0122
カスタムプローブスイート(BBH派生 + EQ-Benchスタイル + GSM8K)で測定:
| プローブ | ベース | +3層 | 変化 |
|---|---|---|---|
| 推論(因果+論理+ナビゲーション) | 76.5% | 94.1% | +23% |
| EQ(感情的知能) | 92.1 | 93.6 | +1.6% |
トランスフォーマーはトレーニング中に機能的回路(完全な認知操作を実行する多層処理ユニット)に自己組織化します。これらの回路は分割不可能です。単一の層を複製してもほとんど効果はありませんが、適切な3〜4層のブロックを複製すると、モデルに推論パイプラインの2回目の通過を提供します。
モデルによって異なる場所に異なる回路があります:
境界は明確です。ブロックを1層ずらすと改善は消失するか逆転します。
異なる複製パターンは、同じ重みから異なる認知プロファイルを生成します:
同じ重みがディスク上にあります。ベースモデルのVRAMも同じ。ルーティングだけが異なります。
pip install gguf requests tqdm
python sweep.py \
--model /path/to/model.gguf \
--llama-server /path/to/llama-server \
--tmpdir /dev/shm/rys \
--results pass.jsonl \
--block-sizes 3 4 5 \
--stride 1 \
--start-min 10 --start-max 20 \
--skip-baseline \
--port 8099 \
--server-args --device Vulkan1,Vulkan2
# Devstralで層12-14を複製(上記で検証済みの結果)
python layer_path.py model.gguf improved.gguf \
-p "0..14,12,13,14,15..39" -v
# Qwen2.5-32Bで層7-9を複製
python layer_path.py model.gguf improved.gguf \
-p "0..9,7,8,9,10..63" -v
# 自由に: トリプルパス、インターリーブ、層スキップなど自由自在
python layer_path.py model.gguf experiment.gguf \
-p "0..16,13,14,15,16,13,14,15,16,17..39" -v
# 変更したモデルでサーバーを起動
llama-server -m improved.gguf --port 8089 -ngl 99 --device Vulkan1,Vulkan2
# lm-evaluation-harnessを実行
lm_eval --model local-chat-completions \
--model_args model=test,base_url=http://localhost:8089/v1/chat/completions,num_concurrent=1,max_retries=3,tokenized_requests=False \
--tasks gsm8k_cot,ifeval,mbpp,bbh_cot_fewshot_logical_deduction_five_objects \
--apply_chat_template --limit 50 \
--output_path ./eval_results
# 実行結果を比較
python compare_eval.py ./eval_base ./eval_improved
各層設定(i, j)に対して:
layers 0..j-1 → layers i..j-1 again → layers j..N-1探索戦略:
変更されたGGUFはtmpfs(/dev/shm)に書き込まれ、各テスト後に削除されます。ベースモデルの重みはディスク上に残ります。
gguf、requests、tqdm)lm-eval、ヒートマッププロット用のmatplotlibこれによりVRAM消費が増えますか? はい。複製された層はGGUF内の物理的なコピーです。24Bモデルで3層追加する場合、約1.5 GiBの追加が見込まれます。llama.cppのフォワードパスパッチ(ポインタを使用してコピーを回避)でこれを解消できます — コントリビューション歓迎。
推論速度は低下しますか? はい、追加層の数に比例して低下します。40層モデルで3層追加 = 約7.5%低速化。推論の改善はそれだけの価値があります。
私のモデルでも動作しますか? おそらく。Mistralアーキテクチャ(Devstral)とQwen2アーキテクチャでテスト済みです。Ngの元の研究はQwen2-72Bで行われました。これらの回路はすべてのトランスフォーマーモデルに存在します — 問題はどこにあり、どのくらいの大きさかです。スイープを実行して見つけてください。
なぜファインチューニングではないのですか? これはファインチューニングとは直交するものです。両方を行うことができます。実際、NgのRYSモデルは後に他の人によってファインチューニングされ、HuggingFaceリーダーボードでトップになりました。層複製はアーキテクチャを変更し、ファインチューニングは重みを変更します。積み重ねてください。
MIT
| パターン | 数学 | EQ | 特性 |
|---|
| ダブルパス13-16 | ↑↑ | ↑ | 数学スペシャリスト |
| トリプルパス13-16 | ↑ | ↑↑ | EQスペシャリスト |
| インターリーブ13,13,14,14,15,15,16 | ↑↑↑ | ↓ | 純粋数学モード |
| クアドラプルパス13-16 | — | ↑↑ | EQモード、数学は中立 |
| ファイル | 説明 |
|---|
sweep.py | メインスイープハーネス — 最適な層複製設定を発見 |
layer_path.py | 明示的な層実行パスで任意のGGUFを構築 |
gguf_surgery.py | 低レベルGGUF層複製(sweep.pyで使用) |
math_probe.py | 厳密な算術プローブ(Ngの部分点方式) |
eq_probe.py | 感情的知能プローブ(EQ-Benchスタイル) |
reasoning_probe.py | BBH派生の因果/論理/ナビゲーション/算数文章題 |
compare_eval.py | lm-evaluation-harnessの結果を実行間で比較 |
visualize.py | スイープ結果のテキストおよびPNGヒートマップ |