s2pro-egy / scripts /chain_sweep3.sh
ehabnegm's picture
Phase 1: merged fast-AR LoRA step-1200 + full toolkit + phase-2 handoff
5c2beba verified
Raw
History Blame Contribute Delete
2.21 kB
#!/bin/bash
# User order: baseline -> step1200 -> A/B scores -> then 200/400/800 -> table.
set -uo pipefail
exec > /opt/work/sweep3.log 2>&1
CKPTDIR=/opt/work/fish-speech/results/s2pro_egy_fast/checkpoints
PY=/opt/work/fish-speech/.venv/bin/python
MEGA=/opt/work/scripts/eval_mega.jsonl
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
cd /opt/work/fish-speech
source /opt/work/scripts/soniox.env
echo "=== chain_sweep3 $(date) ==="
# wait for any in-flight synth (baseline) to finish
while ps aux | grep synth_eval.py | grep -v grep >/dev/null; do sleep 10; done
echo "== mega: baseline (fill if incomplete) =="
$PY /opt/work/scripts/synth_eval.py --sentences $MEGA --outdir /opt/work/eval/mega_baseline --skip-existing
echo "== mega: v2 step 1200 =="
$PY /opt/work/scripts/synth_eval.py --sentences $MEGA --outdir /opt/work/eval/mega_step1200 \
--lora-ckpt "$CKPTDIR/step_000001200.ckpt" --lora-config r_32_alpha_16_fast
/opt/work/asr_env/.venv/bin/python /opt/work/scripts/asr_eval_soniox.py --wavdir /opt/work/eval/mega_baseline
/opt/work/asr_env/.venv/bin/python /opt/work/scripts/asr_eval_soniox.py --wavdir /opt/work/eval/mega_step1200
echo "FIRST_AB_DONE"
for STEP in 200 400 800; do
echo "== mega: v2 step $STEP =="
$PY /opt/work/scripts/synth_eval.py --sentences $MEGA --outdir /opt/work/eval/mega_step$STEP \
--lora-ckpt "$CKPTDIR/step_$(printf %09d $STEP).ckpt" --lora-config r_32_alpha_16_fast
/opt/work/asr_env/.venv/bin/python /opt/work/scripts/asr_eval_soniox.py --wavdir /opt/work/eval/mega_step$STEP
done
echo "== MEGA COMPARISON =="
$PY - << "PYEOF"
import json
from pathlib import Path
for d in ["mega_baseline", "mega_step200", "mega_step400", "mega_step800", "mega_step1200"]:
p = Path(f"/opt/work/eval/{d}/asr_report_soniox.json")
if p.exists():
s = json.loads(p.read_text())["summary"]
tj = Path(f"/opt/work/eval/{d}/timing.jsonl")
rows = [json.loads(l) for l in tj.read_text().splitlines() if l.strip()]
ok = [r for r in rows if "rtf" in r]
dur = round(sum(r["dur_s"] for r in ok), 1) if ok else "-"
print(f"{d:14s} WER={s['mean_wer']:.3f} CER={s['mean_cer']:.3f} dur={dur}s")
PYEOF
echo "SWEEP_DONE"