From dc27781a72d3c4b21f4ec2e874de5310680b1378 Mon Sep 17 00:00:00 2001 From: cbb <2625274797@qq.com> Date: Tue, 20 Oct 2026 03:40:15 +0800 Subject: [PATCH] =?UTF-8?q?exp(dagger-deploy):=20=E9=87=87=E9=9B=86?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20fb=5Fgain+safety=EF=BC=88=E8=AE=AD?= =?UTF-8?q?=E7=BB=83=E5=88=86=E5=B8=83=3D=E9=83=A8=E7=BD=B2=E5=88=86?= =?UTF-8?q?=E5=B8=83=EF=BC=89=EF=BC=9B=E6=96=B0=E5=A2=9E=20base=5Fdag2=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=EF=BC=88=E5=90=8C=20base=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ml/configs/base_dag2.json | 11 +++++++++++ ml/dagger/collect.py | 4 +++- ml/dagger/run.sh | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 ml/configs/base_dag2.json diff --git a/ml/configs/base_dag2.json b/ml/configs/base_dag2.json new file mode 100644 index 0000000..3d48d3b --- /dev/null +++ b/ml/configs/base_dag2.json @@ -0,0 +1,11 @@ +{ + "model": {"d": 192, "heads": 8, "ff": 768, "enc": 4, "dec": 4}, + "train": { + "batch": 1024, "lr": 1e-3, "warmup": 1000, "steps": 24000, "wd": 0.01, "betas": [0.9, 0.95], + "amp": "bf16", "grad_clip": 1.0, + "w_mf": 1.0, "w_fk": 0.5, "w_smooth": 0.05, "w_value": 0.1, "w_sub": 0.1, + "p_neq": 0.5, "p_edge": 0.1, "p_neq_warm": 5000, "fk_tmax": 0.3, "fk_caps": 96, + "ema": 0.999, "aug_pre_drop": 0.15, "aug_pre_sigma": 0.1, "aug_dq_sigma": 0.3, + "ckpt_min": 10, "eval_every": 2000, "eval_tasks": 512, "log_every": 50, "patience_evals": 5 + } +} diff --git a/ml/dagger/collect.py b/ml/dagger/collect.py index d601e79..a083a08 100644 --- a/ml/dagger/collect.py +++ b/ml/dagger/collect.py @@ -28,6 +28,8 @@ def main(): ap.add_argument('--parts', type=int, default=8); ap.add_argument('--out', required=True) ap.add_argument('--bs', type=int, default=64) ap.add_argument('--device', default='cuda' if torch.cuda.is_available() else 'cpu') + ap.add_argument('--fb_gain', type=float, default=0.0, help='部署分布采集:目标反馈增益(与 rollout 一致)') + ap.add_argument('--safety', type=int, default=0, help='部署分布采集:是否开安全层') a = ap.parse_args() gap_min = float(os.environ.get('MIN_GAP_MM') or 3) os.makedirs(a.out, exist_ok=True) @@ -41,7 +43,7 @@ def main(): for i in range(0, len(tasks), a.bs): tb = tasks[i:i + a.bs] with torch.no_grad(): - _, per = rollout(model, kin, tb, a.device, K=8, safety=False, seed=a.seed * 100003 + i, return_traj=True) + _, per = rollout(model, kin, tb, a.device, K=8, safety=bool(a.safety), seed=a.seed * 100003 + i, return_traj=True, fb_gain=a.fb_gain) tr = per['traj'].to(a.device) # [B,T,6] B, Tn, _ = tr.shape _, T, R, _, _ = tasks_to_tensors(tb, a.device) diff --git a/ml/dagger/run.sh b/ml/dagger/run.sh index daa72af..ed038d7 100644 --- a/ml/dagger/run.sh +++ b/ml/dagger/run.sh @@ -24,7 +24,7 @@ for ((r=1; r<=R; r++)); do SAMPLES="$SAMPLES $SD" if [ -f $OUT/done ]; then echo "[dagger] 第 $r 轮已完成,跳过"; CK=$($PY -m ml.common.ckpt pick $OUT); continue; fi if [ -f $D/collect.json ]; then echo "[dagger] 第 $r 轮起点已采集,跳过" - else echo "[dagger] 第 $r 轮:用 $CK 闭环采起点($N 题)"; $PY -m ml.dagger.collect --ckpt $CK --samples ml/data/samples --n $N --seed $r --parts $P --out $D; fi + else echo "[dagger] 第 $r 轮:用 $CK 闭环采起点($N 题)"; $PY -m ml.dagger.collect --ckpt $CK --samples ml/data/samples --n $N --seed $r --parts $P --out $D --fb_gain ${FB_GAIN:-0} --safety ${DAG_SAFETY:-0}; fi cat $D/collect.json pids=() for f in $D/tasks_*.jsonl; do