A two-stage weight merge on top of Qwen/Qwen3.6-27B: a DELLA merge of two
same-generation reasoning-distill sources, plus a small cross-generation task
vector carrying engineering ability from a Qwen3.5 fine-tune.
Every mixing coefficient in this card was picked from measured weight-space
distances, not guessed. The measurements are published below so you can
disagree with them.
Format: 1199 tensors, 26 shards, 51.7 GB, all BF16
Structure: byte-for-byte identical tensor set to the base — 0 missing, 0 extra, 0 shape change, 0 dtype change
Merge recipe
Stage 1 — DELLA onto Qwen3.6-27B (λ₁ = 1.0)
Two deltas are pruned, sign-elected, and added to the base:
Source
Type
weight
density
epsilon
Ravionhf/qwen3.6-27b-reasoning-distill-lora-v1
LoRA (r=32, α=64, rsLoRA off → scaling 2.0)
0.5
0.5
0.1
nerkyor/Qwen3.6-27B-DSV4Pro-Thinking-Distill
full weights
0.5
0.6
0.1
magprune — within each block, entries are ranked by magnitude and assigned a
keep probability p interpolated linearly over [density − ε, density + ε].
A Bernoulli mask is drawn and survivors are rescaled by 1/p, so the pruned
delta stays an unbiased estimator of the original.
Sign election — the two pruned deltas are stacked; the majority sign is
taken per-element and any contribution disagreeing with it is dropped before
summing. This is what keeps two independently-trained reasoning distills from
cancelling each other out.
The LoRA covers all 64 layers (304 modules across in_proj_{a,b,z,qkv},
out_proj, q/k/v/o_proj). It does not touch the MTP head.
This moves an engineering/coding task vector across a model generation. That is
only legitimate if the two generations still share a loss basin — see the
measurement below.
Why these coefficients
Median over 17 automatically-selected probe tensors (MLP down/gate/up,
linear_attn.in_proj_qkv at layers 0/20/42/63, plus embed_tokens), sampled
8 rows each over HTTP Range requests — about 4 MB of traffic total.
#
Pair
cos
‖Δ‖/‖W‖
①
Deckard vs Qwen3.5-27B
0.9996
0.0276
②
Qwen3.5-27B vs Qwen3.6-27B
0.9478
0.3208
③
vision tower: Deckard vs Qwen3.5
1.0000
0.0018
④
nerkyor vs Qwen3.6-27B
0.9997
0.0266
⑤
vision tower: nerkyor vs Qwen3.6
1.0000
0.0000
⑥
LoRA ΔW vs Qwen3.6-27B
—
0.0057
Row ② is the gate for Stage 2. cos = 0.9478 between the 3.5 and 3.6 base
weights means the generational update was a large but directionally coherent
move — neuron correspondence survived, so a task vector computed in 3.5 space
still points somewhere meaningful in 3.6 space. If this had come back near
zero cosine, Stage 2 would have been noise injection and was to be disabled.
‖Δ‖/‖W‖ = 0.3208 also sets the ceiling. λ₂ was held at 0.15 rather than
0.3 specifically because the generational drift is already a third of the
weight norm; a larger transplant risks pushing weights outside the basin.
Resulting contribution budget (relative to base weight norm):
Contribution
Product
Share
nerkyor
0.5 × 0.0266
0.0133
Deckard τ
0.15 × 0.0276
0.0041
LoRA
0.5 × 0.0057
0.0029
Stage 2 sits at 0.31 × the DELLA main ingredient — a supporting voice, not a
second opinion loud enough to overwrite the merge. All three terms are within
one order of magnitude of each other, which is the condition for sign election
to be meaningful rather than a rubber stamp for the largest delta.
What was deliberately left alone
Group
Tensors
Treatment
Vision tower (model.visual.*)
333 / 0.86 GB
Copied verbatim from base. Rows ③ and ⑤ measured every donor as bit-identical to base here, so there was nothing to merge.
MTP head (mtp.*)
1 layer
Excluded from Stage 2. The LoRA never targeted it.
Merged, but not pruned. Magnitude pruning on normalization scales and gating parameters is destructive; these are low-parameter, high-leverage tensors.
Verification
Per-shard norm gate — every shard checked for median ‖out‖/‖base‖ ∈ [0.95, 1.08]. All 26 passed.
NaN/Inf assertion on every tensor before serialization. 0 tensors skipped.
Tensor-by-tensor reconciliation against the base index after upload: 1199/1199 present, 0 extra, 0 shape mismatch, 0 dtype drift, dtype set = {BF16}.
Thinking budget is well-calibrated — the most common failure mode for merged
reasoning models is <think> spam on trivial input. It does not happen here:
Prompt
think tokens
你好
27
法国的首都是哪座城市?
28
1+1等于几?
43
2 的 3 次方是多少?只要答案,不要解释。
50 → answered 8, nothing else
CRT congruence problem
356
5-person ranking puzzle
573
sin20°·sin40°·sin80° exact value
1022
Verifiable answers were correct — CRT problem → 23; ranking puzzle →
B, D, A, E, C; the trigonometric identity was attacked via the triple-angle
form sin3θ = 4 sinθ sin(60°−θ) sin(60°+θ), which is the intended route.
Instruction following held on the "answer only" prompt.
No embedding damage — three Chinese-only prompts (expository writing,
《吕氏春秋》 idiom exegesis, 陶渊明 classical-Chinese gloss) produced fluent output
with no code-switching, no garbled long-tail tokens, no repetition. This was the
specific risk being probed, since embed_tokens and lm_head participate in
the merge.
Code generation intact — LRUCache from scratch (hash map + doubly-linked
list, __slots__, O(1) both ops) and a GIL/race-condition diagnosis with a
threading.Lock fix.
Inherits the base chat template, including the <think> block. Split on </think> to separate reasoning from the answer.
BF16 weights, 51.7 GB. Single 80 GB card runs it unquantized; ~24 GB at 4-bit.
If vLLM fails with Could not find nvcc, set VLLM_USE_FLASHINFER_SAMPLER=0 before importing vllm.
The vision tower is untouched base weights, so image behavior should match Qwen3.6-27B exactly.
Limitations
No quantitative benchmarks have been run. Everything above is structural verification plus a 13-prompt smoke test. Treat capability claims as unproven — the merge is validated as not broken, not validated as better.
Stage 2 is a cross-generation transplant. It is justified by row ② above, but it remains the least conventional part of the recipe and the first thing to ablate (λ₂ = 0) if behavior seems off.
One tensor is absent from the Deckard donor (1198/1199); it falls through to base for that tensor.
Long-context behavior past 16K was not exercised.
Vision/multimodal capability was not smoke-tested at all.
Reproduction
Built on a free-tier Colab CPU runtime (12.7 GB RAM, 87 GB disk, no GPU) by
streaming tensors row-wise over HTTP Range requests, so peak memory stays flat
regardless of tensor size and no donor is ever fully resident on disk.
Total download ≈ 230 GB. The merge notebook is included in this repo.
冒烟测试重点结论:trivial 问题没有被 <think> 刷屏(「你好」27 token、「法国首都」28 token),
可验证题全对(同余 → 23,排名 → B D A E C,三角恒等式走的是三倍角正路),
三条纯中文长文本流畅无乱码无中英夹杂(这是本次合并动了 embed_tokens 后最该查的风险点),
代码题 LRUCache 与 GIL 竞态诊断均正常。