
Ng의 RYS 방식을 재현했고, Qwen2.5-32B에서 특정 3개 레이어를 복제하면 추론 성능이 17% 향상되고, Devstral-24B에서 12-14번 레이어를 복제하면 BBH에서 논리적 추론이 0.22→0.76으로 개선된다는 것을 발견했습니다. 훈련도, 가중치 변경도 없이, 단지 히든 상태를 동일한 회로로 두 번 통과시켰을 뿐입니다. 도구 포함. AMD GPU 2개, 한 저녁이면 충분합니다.
저는 Ng의 RYS 방식을 재현했고, Qwen2.5-32B에서 특정 3개 레이어를 복제하면 추론 능력이 17% 향상되고, Devstral-24B에서 레이어 12-14를 복제하면 BBH에서 논리 추론 점수가 0.22→0.76으로 향상된다는 사실을 발견했습니다. 훈련도, 가중치 변경도 없이 동일한 회로를 통해 은닉 상태를 두 번 라우팅했을 뿐입니다. 도구가 포함되어 있습니다. AMD GPU 2개, 저녁 1회.
3개 레이어 복제. 훈련 없음. 논리 추론 점수 ~0.22 → 0.76.
이 툴킷은 트랜스포머 모델 내부에 숨겨진 '추론 회로'를 찾아 활용합니다. 핵심 아이디어는 특정 연속된 레이어 블록이 분할할 수 없는 인지 단위로 작동한다는 것입니다. 이 블록을 순방향 전달에 복제하면(동일한 가중치, 훈련 없음, 병합 없음) 모델은 특정 능력에서 측정 가능하게 더 똑똑해집니다.
David Ng의 RYS 방법을 기반으로 구축되었으며 새로운 발견으로 확장되었습니다. 여기에 있는 모든 것은 AMD 소비자용 GPU 2개(RX 7900 XT + RX 6950 XT)에서 저녁 1회 만에 발견되었습니다.
Vast.ai의 H200 인스턴스에서 전체 테스트를 실행하고 devstral 기본 모델과 수술 모델을 비교했습니다. 결과는 다음과 같습니다. 수술은 실제로 특정 효과를 내고 있습니다. 수학적 추론과 인과 추론을 향상시키지만 명령 수행과 코드 생성 능력은 희생합니다. 모델은 더 깊이 생각하지만 지시를 덜 정확히 따릅니다.
results 폴더에서 eval_base와 eval_surgery 아래 결과를 확인할 수 있습니다. 또한 vastai_rys_eval.sh를 리포지토리에 추가했습니다. 이 스크립트는 Vast.ai에서 전체 과정을 실행하는 데 사용됩니다. 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)으로 측정:
| Probe | Base | +3 layers | Change |
|---|---|---|---|
| Reasoning (causal + logic + nav) | 76.5% | 94.1% | +23% |
| EQ (emotional intelligence) |
트랜스포머는 훈련 중에 기능적 회로(완전한 인지 연산을 수행하는 다층 처리 단위)로 스스로를 조직화합니다. 이 회로는 분할할 수 없습니다. 단일 레이어를 복제해도 거의 효과가 없지만, 올바른 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
# 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)에 대해:
레이어 0..j-1 → 다시 레이어 i..j-1 → 레이어 j..N-1검색 전략:
수정된 GGUF는 tmpfs(/dev/shm)에 기록되고 각 테스트 후 삭제됩니다. 기본 모델 가중치는 디스크에 유지됩니다.
gguf, requests, tqdm)lm-eval, 히트맵 플롯용 matplotlibVRAM을 더 많이 사용하나요? 네, 복제된 레이어는 GGUF 내에 물리적 복사본으로 존재합니다. 24B 모델에 3개의 추가 레이어는 약 1.5GiB 추가가 예상됩니다. 포인터를 사용하는 llama.cpp 순방향 전달 패치(복사본 대신)가 있다면 이를 없앨 수 있습니다 — 기여 환영합니다.
추론 속도가 느려지나요? 네, 추가 레이어 수에 비례합니다. 40개 레이어 모델에 3개 추가 = 약 7.5% 느려짐. 추론 개선 효과는 그만한 가치가 있습니다.
제 모델에서도 작동하나요? 아마도요. Mistral 아키텍처(Devstral)와 Qwen2 아키텍처에서 테스트했습니다. Ng의 원래 작업은 Qwen2-72B에서 이루어졌습니다. 모든 트랜스포머 모델에 회로가 존재합니다. 문제는 어디에 있고 크기가 얼마나 되는지입니다. 스윕을 실행하여 알아보세요.
왜 미세 조정을 하지 않나요? 이 방법은 미세 조정과 직교합니다. 둘 다 할 수 있습니다. 실제로 Ng의 RYS 모델은 나중에 다른 사람들이 미세 조정하여 HuggingFace 리더보드 1위를 차지했습니다. 레이어 복제는 아키텍처를 변경하고, 미세 조정은 가중치를 변경합니다. 함께 쌓을 수 있습니다.
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 히트맵 |