
كررت طريقة RYS الخاصة بـ Ng واكتشفت أن تكرار 3 طبقات محددة في Qwen2.5-32B يعزز التفكير بنسبة 17%، وتكرار الطبقات 12-14 في Devstral-24B يحسن الاستنتاج المنطقي من 0.22→0.76 على BBH — دون تدريب، دون تغيير في الأوزان، فقط توجيه الحالات المخفية عبر نفس الدائرة مرتين. الأدوات مرفقة. وحدتا GPU من AMD، مساء واحد.
لقد قمت بتكرار طريقة RYS الخاصة بـ Ng واكتشفت أن تكرار 3 طبقات محددة في Qwen2.5-32B يعزز الاستدلال بنسبة 17% وتكرار الطبقات 12-14 في Devstral-24B يحسن الاستنتاج المنطقي من 0.22→0.76 على BBH — دون تدريب، دون تغيير الأوزان، فقط توجيه الحالات المخفية عبر نفس الدائرة مرتين. الأدوات متضمنة. بطاقتا AMD GPU، مساء واحد.
كرر 3 طبقات. بدون تدريب. الانتقال من الاستنتاج المنطقي من 0.22 → 0.76.
تجد هذه المجموعة من الأدوات وتستغل "دوائر الاستدلال" المخفية داخل نماذج المحولات. الفكرة: كتل متجاورة معينة من الطبقات تعمل كوحدات إدراكية غير قابلة للتجزئة. قم بتكرارها في المرور الأمامي — نفس الأوزان، بدون تدريب، بدون دمج — ويصبح النموذج أكثر ذكاءً بشكل ملحوظ في قدرات محددة.
مبني على طريقة RYS لديفيد نج وممتد باكتشافات جديدة. كل شيء هنا تم اكتشافه على بطاقتي AMD GPUs استهلاكيتين (RX 7900 XT + RX 6950 XT) في مساء واحد.
قمت بتشغيل الاختبارات الكاملة على مثيل H200 على Vast.ai وقارنت قاعدة devstral مع نموذج الجراحة، والنتائج موجودة: إذن الجراحة تفعل شيئًا حقيقيًا ومحددًا: إنها تعزز الاستدلال الرياضي والاستدلال السببي ولكن على حساب اتباع التعليمات وتوليد الكود. النموذج يفكر بقوة أكبر لكنه يتبع التوجيهات بدقة أقل.
في مجلد النتائج يمكنك رؤية النتائج تحت eval_base و eval_surgery. لقد أضفت أيضًا إلى المستودع vastai_rys_eval.sh وهو السكريبت المستخدم لتشغيل الـ wacamole الكامل في Vast.ai. vastai instance created with
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 (الذكاء العاطفي) |
تنظم المحولات نفسها أثناء التدريب في دوائر وظيفية — وحدات معالجة متعددة الطبقات تقوم بعمليات إدراكية كاملة. هذه الدوائر غير قابلة للتجزئة: تكرار طبقة واحدة لا يفعل شيئًا تقريبًا، لكن تكرار الكتلة الصحيحة المكونة من 3-4 طبقات يعطي النموذج مرورًا ثانيًا عبر خط أنابيب الاستدلال الخاص به.
النماذج المختلفة لها دوائر مختلفة في أماكن مختلفة:
الحدود حادة. انقل الكتلة بطبقة واحدة في أي اتجاه ويختفي التحسن أو ينعكس.
أنماط التكرار المختلفة تخلق ملفات إدراكية متميزة من نفس الأوزان:
نفس الأوزان على القرص. نفس 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
# Duplicate layers 12-14 in Devstral (the result validated above)
python layer_path.py model.gguf improved.gguf \
-p "0..14,12,13,14,15..39" -v
# Duplicate layers 7-9 in Qwen2.5-32B
python layer_path.py model.gguf improved.gguf \
-p "0..9,7,8,9,10..63" -v
# Go wild: triple-pass, interleaved, skip layers, whatever you want
python layer_path.py model.gguf experiment.gguf \
-p "0..16,13,14,15,16,13,14,15,16,17..39" -v
# Start the server with modified model
llama-server -m improved.gguf --port 8089 -ngl 99 --device Vulkan1,Vulkan2
# Run 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
# Compare runs
python compare_eval.py ./eval_base ./eval_improved
لكل تكوين طبقة (i, j):
الطبقات 0..j-1 ← الطبقات i..j-1 مرة أخرى ← الطبقات j..N-1استراتيجية البحث:
تُكتب GGUFs المعدلة إلى tmpfs (/dev/shm) وتُحذف بعد كل اختبار. تبقى أوزان النموذج الأساسي على القرص.
gguf, requests, tqdmlm-eval للتحقق من المعيار، matplotlib للرسوم البيانية الحراريةهل هذا يستخدم المزيد من VRAM؟ نعم، الطبقات المكررة هي نسخ فيزيائية في GGUF. لـ 3 طبقات إضافية على نموذج 24B، توقع ~1.5 GiB إضافية. تصحيح مرور أمامي لـ llama.cpp (باستخدام المؤشرات بدلاً من النسخ) سيقضي على هذا — المساهمات مرحب بها.
هل هذا يبطئ الاستدلال؟ نعم، بشكل متناسب مع عدد الطبقات الإضافية. 3 طبقات إضافية على نموذج 40 طبقة = أبطأ بنسبة ~7.5%. تحسين الاستدلال يستحق ذلك.
هل سيعمل هذا على نموذجي؟ على الأرجح. لقد اختبرنا على معمارية Mistral (Devstral) ومعمارية Qwen2. العمل الأصلي لـ Ng كان على Qwen2-72B. الدوائر موجودة في جميع نماذج المحولات - السؤال هو أين هي وما حجمها. قم بتشغيل المسح واكتشف.
لماذا لا نقوم بالضبط الدقيق بدلاً من ذلك؟ هذا مستقل عن الضبط الدقيق. يمكنك القيام بكليهما. في الواقع، تم ضبط نماذج RYS الخاصة بـ Ng بدقة لاحقًا بواسطة آخرين وتصدرت لوحة متصدرين HuggingFace. تكرار الطبقات يغير البنية؛ الضبط الدقيق يغير الأوزان. قم بتجميعهما.
MIT
| 92.1 |
| 93.6 |
| +1.6% |
| النمط | الرياضيات | 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 لنتائج المسح |