关于 launch
用于在启动、重启或终止长期 ML 训练任务前执行检查的 Skill,面向管理训练任务的 Agent 和用户,涵盖配置、路径、监控、时长及旧产物。
主要功能
- 01将配置与参考任务比较
- 02使用描述性任务名称
- 03验证数据集、检查点和输出路径
- 04检查实验监控设置
- 05按本地时区估算运行时间
- 06重启或终止时清理产物
适用场景
- 01提交前审查训练命令
- 02为长期任务准备启动检查
- 03重启失败任务并清除旧状态
- 04终止任务并清理相关产物
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ fcakyon/ phd-skills --skill launch安装后在 Claude Code 中输入/launch确认已加载。
详细介绍
启动:长时间 ML 训练任务的启动前检查清单
训练任务失败的代价很高。运行 12 小时,却因为数据集路径缺失或在 NFS 挂载上使用默认值 workers=8,在第 3 个 epoch 时崩溃,就会白白损失一整天。这项技能会在你占用 GPU 前,带你快速完成五项检查。
当助手尝试启动任务却未先完成检查清单时,此插件中的 Agentic Stop 钩子会通过 reason 路由到这里。
何时运行
用户刚刚要求:
- 启动/开始训练任务
- 重启已中断的任务
- 终止当前任务(同时执行检查清单中的清理部分)
- 在提交前检查启动命令
或者用户即将运行以下任一命令:python train.py、accelerate launch、torchrun、deepspeed、sbatch train.sh、tmux new-session ... python ... train、wandb sweep。
检查清单
1. 与参考运行配置进行差异比较
使用错误的参数启动,是代价最高的失败。在开始前:
find configs/ recipes/ experiments/ -maxdepth 3 \( -name '*.yaml' -o -name '*.yml' -o -name '*.json' -o -name '*.toml' \) -mtime -30 2> /dev/null | head
选取最近修改且与预期运行相似的配置(模型系列和任务相同)。将其与预期配置进行差异比较:
diff -u configs/baseline_v1.yaml configs/intended.yaml
逐行检查差异。对每一项都要问:这个差异是有意为之且有依据的吗?还是我忘了设置的过时默认值? 常见的隐性性能回退因素:
num_workers/数据加载器工作进程数(许多代码库的默认值是 8:在 NFS 上不合适)batch_size(在 DDP 下,每设备批次大小与全局批次大小可能不一致)learning_rate(随批次大小线性缩放;如果批次大小变了,学习率也应相应调整)optimizer的 betas/weight decay(论文默认值与框架默认值不同)mixed_precision(对某些模型而言,fp16与bf16的差异很重要)gradient_accumulation_stepsseed(如果你在意可复现性,就要设置)
如果项目中没有参考配置,请让用户指定一个。不要只使用框架默认值启动。
2. 规范运行名称
运行名称会在整个运行周期内出现在 wandb/neptune/检查点目录/状态报告中。它必须用通俗易懂的语言描述实验,不能使用内部代号:
- 不佳:
run-1、wave-2、cs-ad、phase2-internal - 良好:
7src-fastvit-s-featmap-mlp-dinov3、coco-baseline-bs256-lr3e-4、swin-t-imagenet-distill-from-vit-l
命名模式:<dataset/task>-<model>-<key-config>-<distinctive-recipe-piece>。如果无法根据名称用一句话说明实验内容,这个名称就不合适。Stop 钩子会标记使用会话局部标签的运行引用。
3. 验证路径
启动前,必须确认运行所依赖的每个路径都存在:
# Dataset path
ls -la /path/to/dataset | head
# Pretrained checkpoint (if loading)
ls -la /path/to/checkpoint.pt
# Output directory parent (must exist; the run dir will be created)
ls -la /path/to/runs/
# Config file
cat configs/intended.yaml | head
绝不要相信凭记忆想起来的路径。destructive_path_guard.sh 钩子会拦截 rm/mv 的明显风险操作,但启动路径也需要同样严格地核查:如果数据集路径不存在,任务会在运行 30 分钟后崩溃,而不是立即失败。
4. 设置监控
自动检测实验跟踪工具:
- 设置了
WANDB_API_KEY或启动器中导入了wandb→ wandb - 设置了
NEPTUNE_API_TOKEN→ neptune - 设置了
MLFLOW_TRACKING_URI或启动器中使用了mlflow→ mlflow - 存在
runs/或lightning_logs/→ tensorboard - 以上情况都没有 → 询问用户;对于持续数小时的运行,“不监控”很少是正确选择
确认运行会显示在正确的项目/实体/实验名称下。确认已设置用于对比不同组别的标签/分组。
5. 按本地时区估算预计完成时间
估算实际耗时:epochs × seconds-per-epoch / 3600 = hours。按本地时区(即系统时区,timezone_scrub.sh 钩子会验证此设置)说明预计完成时间。如果运行会跨越会议/睡眠/不在岗时段,请决定是延后还是拆分运行。
重启和终止清理
如果这是一次此前失败的运行的重启,或者是在启动替代运行前终止运行,请严格按以下顺序清除过期产物:
- 启动机器上的本地检查点目录:
rm -rf /local/runs/<run-name>(先验证路径;destructive_path_guard.sh会发出警告)。 - 集群 / NFS / 对象存储上的远程产物目录:
rm -rf /remote/runs/<run-name>(或等效操作)。 - 实验跟踪器运行记录:通过跟踪器的 API 删除(
wandb api.run(...).delete()、neptune 的run.stop() + delete via UI等)。过期的跟踪器运行记录会影响后续比较。 - 调度器预留资源:取消 SLURM 作业(
scancel <jobid>)、lambda labs 预留、cron 条目等。出现“运行已终止,但 GPU 仍被分配”的情况,是反复发生的资源浪费。
跳过上述任何一步都会产生幽灵状态,干扰下一次启动或比较。
输出
用户调用此技能时,执行五项检查(如果是终止运行,则执行三项检查 + 清理),并报告哪些通过、哪些未通过。除非用户明确豁免某项检查,否则任何一项未通过都必须阻止启动。
对于干净的启动,请以代码围栏中的启动命令结尾,以便直接复制。