mcpField
L
launch

launch

github.com/fcakyon云与 DevOps43864 次安装3 周前更新
代码仓库

关于 launch

用于在启动、重启或终止长期 ML 训练任务前执行检查的 Skill,面向管理训练任务的 Agent 和用户,涵盖配置、路径、监控、时长及旧产物。

主要功能

  1. 01将配置与参考任务比较
  2. 02使用描述性任务名称
  3. 03验证数据集、检查点和输出路径
  4. 04检查实验监控设置
  5. 05按本地时区估算运行时间
  6. 06重启或终止时清理产物

适用场景

  1. 01提交前审查训练命令
  2. 02为长期任务准备启动检查
  3. 03重启失败任务并清除旧状态
  4. 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_steps
  • seed(如果你在意可复现性,就要设置)

如果项目中没有参考配置,请让用户指定一个。不要只使用框架默认值启动。

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 钩子会验证此设置)说明预计完成时间。如果运行会跨越会议/睡眠/不在岗时段,请决定是延后还是拆分运行。

重启和终止清理

如果这是一次此前失败的运行的重启,或者是在启动替代运行前终止运行,请严格按以下顺序清除过期产物:

  1. 启动机器上的本地检查点目录:rm -rf /local/runs/<run-name>(先验证路径;destructive_path_guard.sh 会发出警告)。
  2. 集群 / NFS / 对象存储上的远程产物目录:rm -rf /remote/runs/<run-name>(或等效操作)。
  3. 实验跟踪器运行记录:通过跟踪器的 API 删除(wandb api.run(...).delete()、neptune 的 run.stop() + delete via UI 等)。过期的跟踪器运行记录会影响后续比较。
  4. 调度器预留资源:取消 SLURM 作业(scancel <jobid>)、lambda labs 预留、cron 条目等。出现“运行已终止,但 GPU 仍被分配”的情况,是反复发生的资源浪费。

跳过上述任何一步都会产生幽灵状态,干扰下一次启动或比较。

输出

用户调用此技能时,执行五项检查(如果是终止运行,则执行三项检查 + 清理),并报告哪些通过、哪些未通过。除非用户明确豁免某项检查,否则任何一项未通过都必须阻止启动。

对于干净的启动,请以代码围栏中的启动命令结尾,以便直接复制。

评论

支持 Markdown