sft-cleanup-hf-only
SkillDatabases & dataClean up a completed NON-AGENTIC / HF-only SFT model — HF upload WITHOUT Supabase DB registration. The counterpart to sft-job-cleanup (which uploads AND registers). Use when a completed SFT cell belongs to an HF-only series (config `enable_db_registration: false`, or a known HF-only series like the Delphi #6279 54-grid): upload the weights to laion/ and STOP — do NOT run manual_db_push. Covers cell→hub_model_id resolution (incl. the Delphi launch_54_map.tsv), the Leonardo sbatch-tunnel upload, and the downstream eval hand-off. For DB-registered models use sft-job-cleanup instead.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the sft-cleanup-hf-only skill
What this skill tells your AI
The instructions your AI receives, as published by open-thoughts/openthoughts-agent in .agents/skills/sft-cleanup-hf-only/SKILL.md and read by ahel’s review.
Publish the completed HF-only SFT model without Supabase registration. Use sft-job-cleanup for registered SFT.
When to use
- A completed SFT cell whose config sets
enable_db_registration: false, OR a known HF-only series (Delphi #6279delphi-*cells). - Discovered during a sweep, or "upload the completed Delphi cells (no DB)".
- If it's a normal registered SFT → use
sft-job-cleanup(don't skip the DB step there).
Procedure (per completed cell)
- Confirm HF-only completion. Check
enable_db_registration: false(or Delphidelphi-*) and final training progress. - Cancel that cell's pending restart chain (
squeue … | grep <job> | grep PENDING | awk … | xargs -r scancel). - Prepare weights: 8B uses root
model.safetensors; 32B/ZeRO-3 needs consolidation. Drop intermediatecheckpoint-*and.cache. - Resolve
hub_model_id:- Delphi: name is
laion/delphi-<base>-<recipe>_lr1e5-sft; the authoritative cell→hub_model_id↔jobid map is/leonardo_work/AIFAC_5C0_290/bfeuer00/experiments/delphi-prepared-tok/launch_54_map.tsv. Resolve from there (don't guess). - Otherwise read the rendered launch config's
hub_model_id. - Qwen3.5: copy
preprocessor_config.jsonfrom the base model into the checkpoint before upload. 4b. Check the tokenizer before upload:extra_special_tokensintokenizer_config.jsonmust be a dict, not a list (python -c "import json;d=json.load(open('<ckpt>/tokenizer_config.json'));assert isinstance(d.get('extra_special_tokens',{}),dict)"). If it is a list, set it to{}and re-save; the RL/SkyRL loader expects a dict.
- Delphi: name is
- Upload to HF (public default):
- Leonardo: use the sbatch compute-node + SSH-tunnel upload (
.agents/ops/leonardo/ops.md"Leonardo HF Upload"; usehf upload, notupload-large-folder). - Jupiter: login node has direct internet →
hf uploadin tmux. source "$DC_AGENT_SECRET_ENV"forHF_TOKEN(env var only — never inline).
- Leonardo: use the sbatch compute-node + SSH-tunnel upload (
- Do not run
manual_db_push.py. - Clean the cell's exp/checkpoint dir after the upload is verified (detached
rmon GPFS; nodu/find). - Verify: the
laion/<name>repo exists withmodel.safetensors(>500MB) + tokenizer/config. Note the cell as done.
Downstream chain (every sweep)
- SFT completes → HF upload (this skill; no DB).
- upload completes →
eval-standard-launchon the series' eval grid for the newly-uploaded cell(s). - eval completes → record scores in the experiment tracker — for Delphi, append the cell's result to
/Users/benjaminfeuer/Documents/experiments/active/delphi/rl-scaling-laws-6279/main_sft_evals/SCORES.md. Pull the score from the completeddelphi-eval/<RUN>/output + the eval job's metrics.
Skip work already done.
Delphi eval traps (carry into the eval hand-off)
HF_HUB_ENABLE_HF_TRANSFERMUST be 0/unset when pre-caching the-sftrepos into$HF_HUB_CACHEfor eval —hf_transferisn't in theevalchemyenv, so=1leaves an EMPTY.incompleteblob (silent no-op). Verify the snapshot hasmodel.safetensors(>500MB) before submitting.- The
-sftrepos ship the chat template as a separatechat_template.jinjafile (NOT intokenizer_config.json'schat_templatekey) — the eval sbatch'sdelphi_v0override reads/replaces that file. - Per-cell TP must divide
num_attention_heads: 9e18 heads=9→TP=1, 2e19 heads=11→TP=1, 3e19 heads=12→TP=2 (the sbatch's hardcoded TP=2 is WRONG for 9e18/2e19 — pass the optional TP_OVERRIDE 4th positional arg).
Full Delphi series data:
project_delphi_sft_hf_only_no_db; upload mechanics:.agents/ops/leonardo/ops.md.
Signals
- GitHub stars
- 289
- Forks
- 40
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
sft-cleanup-hf-only- Source
- github.com/open-thoughts/openthoughts-agent