关于 launch
面向 Claude Code 的 ML 训练检查技能,在启动、重启或取消训练前引导研究者核对配置、路径、监控、耗时和代码状态,并为中断运行提供清理步骤。
主要功能
- 01六项启动前检查
- 02与参考运行配置对比
- 03验证数据集和检查点路径
- 04检查跟踪器与预计耗时
- 05确认代码已提交并推送
- 06重启或取消时清理
适用场景
- 01提交前检查训练命令
- 02准备长时间训练任务
- 03清理后重启失败任务
- 04取消运行并清除遗留文件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ fcakyon/ labrat --skill launch安装后在 Claude Code 中输入/launch确认已加载。
详细介绍
Launch:长时间 ML 训练任务的启动前检查清单
长时间训练任务一旦失败,代价很高。一次运行 12 小时的任务,可能因为数据集路径缺失,或在 NFS 挂载上使用默认值 workers=8,在第 3 个 epoch 时崩溃,白白损失一整天。这项技能会在你占用 GPU 前,引导你快速完成六项检查。
当助手试图启动任务却未执行检查清单时,此插件中的 Agent 式 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的 beta 参数 / 权重衰减(论文默认值与框架默认值不同)mixed_precision(对于某些模型,fp16和bf16的差异很重要)gradient_accumulation_stepsseed(如果你在意可复现性,就要设置)
如果此项目中没有参考配置,请让用户指出一个。不要只使用框架默认值启动任务。
2. 规范命名运行
在整个运行周期中,运行名称都会出现在 wandb / neptune / 检查点目录 / 状态报告中。名称必须用通俗易懂的英文描述实验,不能使用内部代码:
- 不佳:
run-1、exp-b、final-v2、phase2-internal - 合适:
imagenet-resnet50-bs256-lr0.1-cosine、coco-baseline-bs256-lr3e-4、swin-t-imagenet-distill-from-vit-l
命名模式:<dataset/task>-<model>-<key-config>-<distinctive-recipe-piece>。如果无法根据名称用一句话描述实验,说明名称不合适。
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
绝不要相信凭记忆想起的路径。数据集路径不存在时,任务会在运行 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。使用本地时区(系统时区)说明预计完成时间。如果运行会跨越会议 / 睡眠 / 离岗时段,请决定推迟还是拆分运行。
6. 代码与已推送的提交一致
在运行任务的机器上,进入任务所用的代码库:
git status --porcelain # must print nothing
git fetch -q && git rev-parse HEAD @{u} # both hashes must match
未提交或未推送的更改,意味着之后无人能确认究竟是哪份代码产出了此次运行结果。如果任一检查未通过,请在本地编辑、提交并推送,然后在主机上运行 git pull 再启动。记录此次运行对应的提交哈希。
重启和终止清理
如果这是对之前失败运行的重启,或是在启动替代运行之前终止运行,请按以下确切顺序清除过时产物:
- 启动机器上的本地检查点目录:
rm -rf /local/runs/<run-name>(先验证路径)。 - 集群 / NFS / 对象存储上的远程产物目录:
rm -rf /remote/runs/<run-name>(或等效命令)。 - 实验跟踪器运行记录:通过跟踪器的 API 删除(
wandb api.run(...).delete()、neptunerun.stop() + delete via UI等)。过时的跟踪器运行记录会破坏后续比较。 - 调度器预留:取消 SLURM 作业(
scancel <jobid>)、lambda labs 预留、cron 条目等。“已终止但 GPU 仍被分配”的运行会反复造成资源浪费。
跳过其中任何一项都会产生幽灵状态,干扰下一次启动或比较。
输出
用户调用此技能时,请逐项检查六项内容(如果是终止运行,则检查三项内容加清理),并报告哪些通过、哪些失败。除非用户明确豁免该检查,否则任何检查失败都应阻止启动。
启动条件全部满足时,请在结尾的代码围栏中提供启动命令,方便直接复制。