
Я воспроизвёл метод RYS Нг и обнаружил, что дублирование 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 GPU (RX 7900 XT + RX 6950 XT) за один вечер.
Я запустил полные тесты на инстансе H200 на Vast.ai и сравнил базовый Devstral с моделью после «хирургии». Результаты таковы: хирургия действительно даёт реальный и специфический эффект: она повышает математическое и каузальное рассуждение, но ценой следования инструкциям и генерации кода. Модель думает усерднее, но менее точно следует указаниям.
В папке results вы можете увидеть результаты в eval_base и eval_surgery. Я также добавил в репозиторий vastai_rys_eval.sh — это скрипт, использованный для запуска всего «винегрета» на Vast.ai. Инстанс Vast.ai создан командой
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):
| Probe | Base | +3 слоя | Изменение |
|---|---|---|---|
| Рассуждение (каузальное + логика + навигация) | 76.5% | 94.1% | +23% |
Трансформеры в процессе обучения организуются в функциональные контуры — многослойные блоки обработки, которые выполняют полные когнитивные операции. Эти контуры неделимы: дублирование одного слоя почти не даёт эффекта, но дублирование правильного блока из 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
# Дублировать слои 12–14 в Devstral (результат, подтверждённый выше)
python layer_path.py model.gguf improved.gguf \
-p "0..14,12,13,14,15..39" -v
# Дублировать слои 7–9 в Qwen2.5-32B
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 снова → layers j..N-1Стратегия поиска:
Модифицированные GGUF записываются в 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. Контуры существуют во всех трансформерных моделях — вопрос в том, где они и какого размера. Запустите sweep и узнайте.
Почему не сделать fine-tune вместо этого? Это ортогонально fine-tune. Можно делать и то, и другое. Фактически, модели RYS Ng позже были дообучены другими и возглавили лидерборд HuggingFace. Дублирование слоёв меняет архитектуру; fine-tune меняет веса. Стекируйте их.
MIT
| EQ (эмоциональный интеллект) |
| 92.1 |
| 93.6 |
| +1.6% |
| Схема | Математика | EQ | Характер |
|---|
| Двойной проход 13–16 | ↑↑ | ↑ | Специалист по математике |
| Тройной проход 13–16 | ↑ | ↑↑ | Специалист по EQ |
| Перемежающийся 13,13,14,14,15,15,16 | ↑↑↑ | ↓ | Чистый математический режим |
| Четверной проход 13–16 | — | ↑↑ | Режим EQ, математика нейтральна |
| Файл | Назначение |
|---|
sweep.py | Основной обвязчик sweep — находит оптимальные конфигурации дублирования слоёв |
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 тепловые карты результатов sweep |