
Ich habe Ngs RYS-Methode repliziert und festgestellt, dass das Duplizieren von 3 bestimmten Layern in Qwen2.5-32B das Reasoning um 17 % steigert und das Duplizieren der Layer 12-14 in Devstral-24B die logische Deduktion bei BBH von 0.22→0.76 verbessert — kein Training, keine Gewichtsänderungen, nur das zweimalige Leiten verborgener Zustände durch dieselbe Schaltung. Tools inklusive. Zwei AMD-GPUs, ein Abend.
Ich habe Ng's RYS-Methode nachgebildet und herausgefunden, dass das Duplizieren von 3 spezifischen Layern in Qwen2.5-32B die Argumentation um 17% verbessert und das Duplizieren der Layer 12-14 in Devstral-24B die logische Deduktion von 0,22→0,76 bei BBH steigert – kein Training, keine Gewichtsänderungen, nur das Weiterleiten von Hidden States durch denselben Schaltkreis zweimal. Werkzeuge enthalten. Zwei AMD GPUs, ein Abend.
3 Layer duplizieren. Kein Training. Logische Deduktion von ~0,22 → 0,76.
Dieses Toolkit findet und nutzt "Reasoning Circuits", die in Transformer-Modellen verborgen sind. Die Idee: Bestimmte zusammenhängende Layer-Blöcke fungieren als unteilbare kognitive Einheiten. Dupliziert man sie im Forward Pass – gleiche Gewichte, kein Training, kein Merging – wird das Modell in bestimmten Fähigkeiten messbar intelligenter.
Basiert auf David Ng's RYS-Methode und erweitert durch neue Erkenntnisse. Alles hier wurde an einem Abend auf zwei AMD Consumer GPUs (RX 7900 XT + RX 6950 XT) entdeckt.
Ich habe die vollständigen Tests auf einer H200-Instanz bei Vast.ai durchgeführt und vergleiche Devstral-Basis mit dem Surgery-Modell. Die Ergebnisse sind da: Die Operation bewirkt etwas Reales und Spezifisches: Sie verbessert mathematisches Denken und kausales Denken, aber auf Kosten der Befolgungsfähigkeit von Anweisungen und der Codegenerierung. Das Modell denkt intensiver, folgt aber Anweisungen weniger präzise.
Im Ordner results finden Sie die Ergebnisse unter eval_base und eval_surgery.
Ich habe auch vastai_rys_eval.sh zum Repository hinzugefügt, das Skript, das verwendet wurde, um die ganze Angelegenheit auf Vast.ai auszuführen.
Die Vast.ai-Instanz wurde erstellt mit:
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
Gemessen mit einer benutzerdefinierten Testsuite (BBH-abgeleitet + EQ-Bench-Stil + GSM8K):
| Probe | Base | +3 Layer | Änderung |
|---|---|---|---|
| Reasoning (kausal + Logik + Navigation) | 76,5% | 94,1% | +23% |
| EQ (emotionale Intelligenz) |
Transformer organisieren sich während des Trainings in funktionale Schaltkreise – mehrschichtige Verarbeitungseinheiten, die vollständige kognitive Operationen durchführen. Diese Schaltkreise sind unteilbar: Das Duplizieren eines einzelnen Layers bringt fast nichts, aber das Duplizieren des richtigen Blocks von 3-4 Layern gibt dem Modell einen zweiten Durchlauf durch seine Reasoning-Pipeline.
Verschiedene Modelle haben verschiedene Schaltkreise an verschiedenen Stellen:
Die Grenzen sind scharf. Verschiebt man den Block um einen Layer in eine der beiden Richtungen, verschwindet die Verbesserung oder kehrt sich um.
Unterschiedliche Duplizierungsmuster erzeugen aus denselben Gewichten unterschiedliche kognitive Profile:
Dieselben Gewichte auf der Festplatte. Derselbe VRAM für das Basismodell. Nur andere Weiterleitungen.
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
# Duplizieren Sie Layer 12-14 in Devstral (das oben validierte Ergebnis)
python layer_path.py model.gguf improved.gguf \
-p "0..14,12,13,14,15..39" -v
# Duplizieren Sie Layer 7-9 in Qwen2.5-32B
python layer_path.py model.gguf improved.gguf \
-p "0..9,7,8,9,10..63" -v
# Gehen Sie wild: Dreifachpass, verflochten, Layer überspringen, was immer Sie möchten
python layer_path.py model.gguf experiment.gguf \
-p "0..16,13,14,15,16,13,14,15,16,17..39" -v
# Starten Sie den Server mit dem modifizierten Modell
llama-server -m improved.gguf --port 8089 -ngl 99 --device Vulkan1,Vulkan2
# Führen Sie lm-evaluation-harness aus
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
# Vergleichen Sie Durchläufe
python compare_eval.py ./eval_base ./eval_improved
Für jede Layer-Konfiguration (i, j):
layers 0..j-1 → layers i..j-1 nochmal → layers j..N-1Die Suchstrategie:
Modifizierte GGUFs werden in tmpfs (/dev/shm) geschrieben und nach jedem Test gelöscht. Die Gewichte des Basismodells bleiben auf der Festplatte.
gguf, requests, tqdmlm-eval für Benchmark-Validierung, matplotlib für Heatmap-PlotsVerbraucht das mehr VRAM? Ja, die duplizierten Layer sind physische Kopien im GGUF. Für 3 zusätzliche Layer bei einem 24B-Modell erwarten Sie etwa 1,5 GiB mehr. Ein llama.cpp-Forward-Pass-Patch (Verwendung von Zeigern statt Kopien) würde dies überflüssig machen – Beiträge willkommen.
Verlangsamt das die Inferenz? Ja, proportional zur Anzahl der zusätzlichen Layer. 3 zusätzliche Layer bei einem 40-Layer-Modell = etwa 7,5% langsamer. Die Verbesserung der Argumentation ist es wert.
Wird das mit meinem Modell funktionieren? Wahrscheinlich. Wir haben es mit Mistral-Architektur (Devstral) und Qwen2-Architektur getestet. Ng's ursprüngliche Arbeit basierte auf Qwen2-72B. Die Schaltkreise existieren in allen Transformer-Modellen – die Frage ist, wo sie sind und wie groß sie sind. Führen Sie den Sweep aus und finden Sie es heraus.
Warum nicht stattdessen feintunen? Das ist orthogonal zum Feintuning. Sie können beides tun. Tatsächlich wurden Ng's RYS-Modelle später von anderen feingetunt und führten die HuggingFace-Bestenliste an. Layer-Duplizierung ändert die Architektur; Feintuning ändert die Gewichte. Stapeln Sie sie.
MIT
| 92,1 |
| 93,6 |
| +1,6% |
| Muster | Mathe | EQ | Charakter |
|---|
| Doppelpass 13-16 | ↑↑ | ↑ | Mathe-Spezialist |
| Dreifachpass 13-16 | ↑ | ↑↑ | EQ-Spezialist |
| Verflochten 13,13,14,14,15,15,16 | ↑↑↑ | ↓ | Reiner Mathe-Modus |
| Vierfachpass 13-16 | — | ↑↑ | EQ-Modus, Mathe neutral |
| Datei | Funktion |
|---|
sweep.py | Haupt-Sweep-Harness – findet optimale Layer-Duplizierungskonfigurationen |
layer_path.py | Erstellt beliebige GGUF mit explizitem Layer-Ausführungspfad |
gguf_surgery.py | Low-Level GGUF-Layer-Duplizierung (von sweep.py verwendet) |
math_probe.py | Harte Rechensonde (Ng's Teilpunktebewertung) |
eq_probe.py | Emotionale-Intelligenz-Sonde (EQ-Bench-Stil) |
reasoning_probe.py | BBH-abgeleitete kausale/logische/Navigations-/Mathe-Textaufgaben |
compare_eval.py | Vergleicht lm-evaluation-harness-Ergebnisse über Durchläufe hinweg |
visualize.py | Text- und PNG-Heatmaps der Sweep-Ergebnisse |