RECOVERY-AWARE STRUCTURAL PRUNING

Local Cut
Local Recovery

Scalpel 是一种通用的剪枝加速方法,不是一次删掉一批层。它每轮只定位一个安全切口, 只更新切口前一层来修复局部边界,再基于恢复后的新模型重新寻找下一层。

LOCAL CUT · LOCAL RECOVERY Scalpel 项目 Logo:科研医生用手术刀移除大模型的一个中间层
01 / LAYERS28 → 1932.1% decoder layers removed
02 / ACCURACY−0.36 pppost-recovery macro accuracy
03 / SPEED+43.5%1.172 items / second
04 / MODEL1.674Bfinal parameters · BF16
01
THE METHOD

每一刀,都先测再愈合。

每轮重新定位可删层;恢复时固定 reference teacher,只让删层后的 student 贴近最终输出分布。

01P

Probe

在固定 10×10 probe 上临时绕过每个候选层,模型文件保持不变。

TEMPORARY BYPASS
02R

Rank

同时衡量任务后悔值与词表分布漂移,避免一个好指标掩盖另一项风险。

MINIMAX RISK
03C

Cut

物理删除风险最低的一层,更新 config、attention 索引与原始层映射。

STRUCTURAL DELETE
04K

Recover

冻结 reference teacher,在 student 上训练 all-linear LoRA,再合并为下一轮完整模型。

FINAL-LOGIT KD
THE SELECTION RULE

最坏轴决定风险。

固定 probe 集保证候选层比较一致。生成准确率下降和 logits 漂移都归一化到 [0, 1], 每个 repeat 取两者最大值,再跨 10 个 repeat 求平均。得分最低的层才会被真正删除。

hard regretRᵣ,ₗ = clip((Aʳᵉᶠ − Aᶜᵃⁿᵈ) / Aʳᵉᶠ)
logit driftJᵣ,ₗ = weighted JS / log 2
pruning riskQᵣ,ₗ = max(Rᵣ,ₗ, Jᵣ,ₗ)
02
THE TRADE-OFF

少九层,任务准确率几乎不动。

完整验证集 2,609 条样本;速度和准确率均为每轮 post-recovery 模型实测。

ROUND 00 — 09

Accuracy × Speed

准确率 速度提升
Macro field accuracy (%)Speed delta vs. baseline (%)
FINAL CHECKPOINT
19L

Round 09

Macro accuracy
83.85%
Accuracy delta
−0.36 pp
Inference speed
1.172 it/s
Parse success
100%
pre-recovery59.28%
post-recovery83.85%
ATOMIC FIELD VIEW

最终模型保留了什么?

10 个业务字段共同构成 macro accuracy。Round 09 在毛发状态和整体身体姿态上略有提升, 主要损失集中在尾部与垂直位置判断。

Baseline 28L Final 19L
03
FINAL-LOGIT RECOVERY

用固定 teacher 稳住最终输出。

Teacher 是固定 reference 模型;Student 通过 all-linear LoRA 同时学习 GT 字段和 teacher 分布。

OUTPUT ALIGNMENT
pTpS
Teacher final logits

固定 reference 模型完整前向,提供稳定软标签。

Student final logits

删层后的模型挂 all-linear LoRA,训练后 merge 导出。

ℒ = CEw(y, pˢ) + KLw(pᵀ ∥ pˢ) 每条样本先按有效 token 权重归一化,再对 batch 求平均。
FIELD WEIGHTS

把局部修复聚焦在关键字段。

3.0×

action · body · ears · tail · face · fur

2.0×

cats_visible

1.0×

default · environment

0.5×

JSON format characters

TASK FIT

Field-weighted CE

Round 01 — 09

Round 01 到 09 的字段加权 CE loss 曲线
Fig. 01 CE 在每轮早期快速下降,随后进入相近的稳定区间。
DISTRIBUTION ALIGNMENT

Teacher → Student KL

Round 01 — 09

Round 01 到 09 的 Teacher 到 Student KL 散度曲线
Fig. 02 KL 持续收敛,展示 teacher 与 student 分布逐步对齐。
FIXED TEACHERReference modelfrozen · final logits
TRAINABLEStudent LoRAall-linear adapter
NEXT ROUNDMerged N−1 modelpost-recovery student
04
NINE SURGICAL CUTS

逐轮查看被移除的原始层。

选择一个 Round,观察 28 层原始模型如何逐步变成 19 层 student。

ORIGINAL LAYER MAP

Round 09 · 19 layers remain

保留本轮删除此前删除
FULL EXPERIMENT LOG

Post-recovery checkpoints

Round删除原始层剩余层Macro Acc. Δ AccuracySpeedSpeed-upProbe Risk
SCOPE CHECK

视觉业务能力稳定,不等于通用知识能力无损。

Recovery 数据针对猫姿态 JSON 任务。MMLU / C-Eval 显示,持续删层仍会显著损伤通用纯文本选择题能力。

CheckpointMMLUC-EvalAvg.
Round 0150.4850.6750.58
Round 0529.4028.5528.98
Round 0923.2923.8123.55
05
REPRODUCE

两条命令,启动完整闭环。

先固定 probe 与实验指纹,再启动支持断点续跑的九轮编排器。

01 Prepare immutable inputs
PYTHONPATH="$PROJECT_ROOT" "$PYTHON_BIN" \
  -m highway.prune_prepare \
  --model "$REFERENCE_MODEL" \
  --train-data "$TRAIN_JSON" \
  --val-data "$VAL_JSON" \
  --run-dir "$RUN_DIR" \
  --repeats 10 \
  --samples-per-repeat 10 \
  --rounds 9 \
  --recovery-epochs 2
02 Run pruning + recovery
PYTHONPATH="$PROJECT_ROOT" CUDA_VISIBLE_DEVICES=0 \
"$PYTHON_BIN" -m highway \
  --project-root "$PROJECT_ROOT" \
  --python "$PYTHON_BIN" \
  --eval-script "$PROJECT_ROOT/sft_scripts/eval_universal_json.py" \
  --reference-model "$REFERENCE_MODEL" \
  --train-data "$TRAIN_JSON" \
  --val-data "$VAL_JSON" \
  --run-dir "$RUN_DIR" \
  --model-root "$MODEL_ROOT" \
  --rounds 9 \
  --recovery-batch-size 4 \
  --recovery-effective-batch-size 16 \
  --recovery-epochs 2 \
  --lora-rank 8 \
  --lora-alpha 32 \
  --lora-dropout 0.05
放大的实验图