32 lines
2.0 KiB
Bash
Executable File
32 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 后训练主循环(方案 §7):APG 首轮 → 挖错 3–6 轮(每轮:挖错 → [E2 老师补路径] → APG 微调 → 门禁/回滚)
|
|
# bash ml/mining/loop.sh [轮数=6] [每轮 APG 步数=1000] [每轮出题数=50000]
|
|
# 2026-10-18:APG 采样池只用本轮错题(此前累积所有历史轮,后期分布偏向老错题);老错题的保持由门禁"上轮修好仍对"负责。
|
|
# 统一 $PYTHON;门禁加 R7(左右比例 / 行程)。
|
|
set -e
|
|
cd "$(dirname "$0")/../.."
|
|
PY=${PYTHON:-python}
|
|
ROUNDS=${1:-6}; STEPS=${2:-1000}; N=${3:-50000}
|
|
mkdir -p ml/runs/mine
|
|
[ -f ml/runs/gate_tasks.jsonl ] || $PY -m ml.mining.mine_round --make-gate 2000 --seed 777 --out ml/runs
|
|
[ -f ml/runs/current.pt ] || cp ml/runs/apg/best.pt ml/runs/current.pt
|
|
SAMPLES="ml/data/samples"; FIXED=""; small=0
|
|
for ((r=1; r<=ROUNDS; r++)); do
|
|
D=ml/runs/mine/r$r; mkdir -p $D
|
|
$PY -m ml.mining.mine_round --ckpt ml/runs/current.pt --seed $((1000+r)) --n $N --out $D
|
|
# E2(局部极小)请老师补少量路径(唯一保留的后训练老师用途)
|
|
if [ -s $D/e2_tasks.jsonl ]; then
|
|
node ml/gen/gen_dataset.cjs --tasks $D/e2_tasks.jsonl --seed $((5000+r)) --out ml/data/e2/shard_e2_r$r.jsonl
|
|
node ml/prep/build_dataset.cjs ml/data/e2/shard_e2_r$r.jsonl ml/data/samples_e2
|
|
SAMPLES="ml/data/samples ml/data/samples_e2"
|
|
fi
|
|
$PY -m ml.apg.apg_finetune --init ml/runs/current.pt --samples $SAMPLES --pool $D/pool.jsonl --out ml/runs/apg_r$r --steps $STEPS
|
|
$PY -m ml.mining.gate --old ml/runs/current.pt --new ml/runs/apg_r$r/best.pt --tasks ml/runs/gate_tasks.jsonl --out $D/gate.json $FIXED
|
|
FIXED="--fixed $D/gate_fixed.jsonl"
|
|
gain=$($PY -c "import json;print(json.load(open('$D/gate.json'))['gain_pp'])")
|
|
echo "round $r gain ${gain} pp"
|
|
if $PY -c "import sys;sys.exit(0 if $gain < 0.5 else 1)"; then small=$((small+1)); else small=0; fi
|
|
if [ $small -ge 2 ]; then echo "连续 2 轮提升 < 0.5 pp,停止"; break; fi
|
|
done
|
|
echo "最终模型:ml/runs/current.pt"
|