Communitygithub.com

Hanyuyuan6/远程GPU训练器

一个涵盖深度学习实验完整生命周期的智能体技能:运行(你拥有或租用的GPU)→ 验证数字是真实的 → 交付可复现、单一来源的图表。

远程GPU训练器 是什么?

这是一个专为深度学习实验生命周期设计的AI智能体技能,名为远程GPU训练器(remote-gpu-trainer)。它通过三个核心阶段(运行、验证、交付)无缝管理从GPU任务启动到最终结果交付的完整流程。在运行阶段,该技能能处理本地自有机器和远程租赁GPU两种场景,针对租赁环境特别强调“分离工作、让结果超越实例生命周期、安全停止计费”的核心理念,并支持AutoDL、RunPod、vast.ai、Lambda等多种主流GPU租赁平台的配置文件。验证阶段则专注于区分结果是bug、真实效果还是噪声,确保每个数字都经过严格检验。交付阶段将所有数据和图表组织为确定性函数形式,通过不可变的证据层保证可追溯性和一致性,并利用EVIDENCE.json作为项目级别的单一事实源,跨文档检查防漂移。该技能还包含8个训练调试文件,覆盖OOM、NaN、分布式启动、收敛问题等常见场景。整体设计遵循“用户主权”(用户决定科学参数)和“审计→披露,而非强制执行”的原则,技能本身完全独立,无需依赖其他技能即可运行。

兼容平台✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI
npx skills add Hanyuyuan6/remote-gpu-trainer

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

remote-gpu-trainer — 深度学习实验生命周期

概述

一个技能覆盖深度学习实验的完整弧线:运行 → 验证 → 交付。

  • 运行 — 让一个长期的GPU任务启动、存活并完成,然后从机器上获取结果。在你拥有的机器上没有计费;在租赁的机器上,核心洞察是你只是他人机器上的短期租户 — 因此任务是分离工作、让结果超越实例生命周期、并安全停止计费,而不是配置一个集群。边缘部分具有平台特定性(一个 profiles/<platform>.md 文件掌管所有路径、代理、计费动词和竞价规则),核心是不变的。
  • 验证 — 这个数字是 bug、真实效果还是噪声? 一个令人惊讶的结果是假设,不是需要报告的事实。平台无关。
  • 交付 — 组织结果,使每个交付的数字/图表/表格都是一个不可变证据层的确定性函数;可追溯性和跨文档一致性由机制锁定,而不是由人类记忆更新三个文档。平台无关。

贯穿验证和交付的两种立场:用户主权(科学决策 — 种子数量、哪些样本、是否存在 aux 通道 — 由用户决定;技能组织并一次性揭示权衡,然后不再打扰)和审计 → 披露,而非强制执行(技能是诚实的审计师,不是门卫 — 完整性问题必须与它影响的结论一起浮出水面,但技能从不阻止用户交付)。格言:“披露它,否则不要声称它。”

首先选择路径

  1. 运行 — 拥有机器还是租赁机器?
    • 本地(你拥有的工作站/笔记本电脑,无计费) → references/run-local/ 和 profiles/local.md。
    • 租赁 / 远程(任何你拥有的带计费或共享的机器) → references/run-remote/,并首先选择你的 profiles/<platform>.md(它掌管各阶段委托的所有路径/动词/代理)。
  2. 然后始终 → 验证结果(references/verifying/) → 交付结果(references/delivering/)。这两个阶段是平台无关的;无论任务是在本地还是租赁机器上训练,它们都以相同方式运行。不要因为运行成功就跳过任何步骤 — 绿色运行不一定是真实数字,真实数字也不一定是干净的交付物。

已经在调试一个无论运行在哪里都不收敛/OOM/挂起/出现NaN的模型?直接跳转到 references/training/(8个文件的调试层),然后在你报告之前回到验证阶段。

操作原则(核心)

承载不变量的原则。每行一条;远程生命周期的完整跨平台集合(10条不变量)位于 references/run-remote/principles.md — 在远程运行的阶段0之前阅读它。

  • 检查点到持久存储 + 幂等恢复是通用核心。 文件检查点到持久位置 + 启动时无条件加载最新状态是一个能够在SSH断开、Slurm walltime终止、K8s重新调度、竞价抢占、Colab断开连接时存活的机制。分离原语(tmux / sbatch / Job)是可替换的插件;这是不变量。
  • 信任你加载的工件,而不是声称成功的日志行。 “已同步 / 已保存 / 已完成”在静默写入失败时是谎言;监视器自身状态也是一种声称 — 将其与真实进程/工件/像素/字节进行核对。
  • 昂贵计算前进行廉价检查。 一个1-2批次的CPU烟雾测试(关闭日志)几乎免费地消除导入/配置/形状/缩放类bug,在它们产生GPU小时计费之前。
  • 成本和破坏性操作由用户决定。 从不自动释放/终止,不确认从不删除持久文件;如果清理无法释放空间,要求扩展磁盘,而不是静默缩小实验。
  • 审计 → 披露,而非强制执行。 强制性的是披露,而不是修复。完整性发现(无不相交验证集、数据泄露、测试数据在调优期间接触过、无法重新推导的数字)必须伴随结论 — 但技能披露,不阻止。

运行 — 本地(你拥有的机器)

无计费,无销毁时钟 — 风险从金钱转移到资源争用和机器稳定性。不放松的纪律:环境卫生、资源感知、工件/检查点管理和“说明种子状态”。从 profiles/local.md 开始,然后是对应文档:

  • 环境卫生 — 在持久机器上,永远不要在 conda base 环境中训练/安装;4步门控(枚举 → 选择项目环境 → 确认 sys.executable → 运行) → references/run-local/env-hygiene.md。
  • 启动与分离 — nohup/tmux、日志 + 存活探测,不要前台阻塞 → references/run-local/launch.md。
  • 单节点多GPU — torchrun/accelerate DDP 环境契约、首次运行的rank/挂起基础 → references/run-local/multi-gpu.md(多节点见 references/run-remote/multinode.md)。
  • 本地OOM — 在无法租用更大硬件的硬件上进行适配梯级处理 → references/run-local/local-oom.md。

运行 — 远程(你租赁的机器)

首先选择你的配置文件 — 它绑定各阶段委托的所有具体路径/代理/凭证/计费动词/竞价规则。心理动词模型(跨平台的单一API;配置文件将每个动词绑定到实际命令):up(租用+可达) → push(代码/数据上传) → run(分离 + 检查点) → watch(持久监控) → pull(结果下载 + 验证) → down(停止计费)。

你在使用…配置文件停止计费动词(陷阱)
AutoDL(最深、经过实战检验)profiles/autodl.md关机停止计费,保留磁盘(AutoDL 例外)
RunPodprofiles/runpod.md终止(停止仍按2×计费;销毁卷磁盘)
vast.aiprofiles/vastai.md销毁(停止永久按磁盘计费)
Lambdaprofiles/lambda.md终止(无停止状态)
Paperspaceprofiles/paperspace.md销毁 + 释放IP + 删除存储
恒源云 / 矩池云 / Featurize / 揽睿星舟profiles/china.md平台相关(数据磁盘在停止状态下通常仍计费)
裸SSH / Slurm / K8s / Colabprofiles/generic-ssh.md手动(遗忘的盒子24/7计费)

6阶段生命周期(完整平台检查清单见 references/run-remote/lifecycle_checklist.md): 0 环境审计(df -i 不仅仅是 df -h、cgroup memory.max、检查点磁盘预算) · 1 SSH + 凭据(预构建镜像就是环境 — 不要在租赁机器上运行 conda create;通过 stdin 传递秘钥) · 2 包装器 + 在租赁前进行CPU烟雾测试 · 3 分离启动(探测,然后交回控制权 — 永远不要阻塞 sleep) · 4 持久监控(四层架构见 references/run-remote/monitoring_patterns.md;会话绑定的监视器随会话消亡) · 5 聚合 + 验证 + 销毁。

铁律 — 销毁门控: 在检查点已拉取到本地并已验证可加载(通过 scripts/verify_local.py),并且用户已明确批准影响成本的操作之前,不允许 release / terminate / destroy / 删除文件。“看起来日志里显示完成了”不是证据。在大多数平台上,停止计费的操作是不可逆的(删除磁盘)— 确认更加重要,而非相反。

其他远程参考:ssh_transport.md(rsync/scp 可恢复、通过 stdin 传递秘钥、CRLF) · spot-resilience.md(抢占宽限期、Young/Daly 节奏、原子写入恢复) · china-network.md(镜像 + HF_ENDPOINT + no_proxy 陷阱) · parallel_ablation.md(扇出独立性 + 对账) · multinode.md(NCCL/fabric,高级) · gotchas_universal.md(完整U1–U43目录,带grep索引)。

当训练本身出问题时(模型问题,而非平台问题)

一旦机器运行,训练会以其自身的方式出问题 — 本地或远程,使用相同的调试层(references/training/,8个文件;每个条目遵循:症状 → 根因 → 修复,附带引用文档)。按症状路由:

  • OOM / 放不下(CUDA显存或主机内存、步骤级OOM、适配梯级) → oom-memory.md。
  • 多GPU启动 / 挂起(torchrun/accelerate/deepspeed 环境契约、DDP/FSDP/ZeRO) → distributed-launch.md。
  • NaN / Inf / loss spikes(fp16/bf16/tf32、AMP/GradScaler、LLM发散) → precision-stability.md。
  • 太慢(GPU界限 vs 数据界限 vs 通信界限、数据加载器旋钮、torch.compile 陷阱) → throughput-profiling.md。
  • 恢复 bug(全状态 + 分片保存/恢复;epoch重启、重新打乱、scaler/EMA丢失) → checkpoint-resume.md。
  • 特定领域陷阱(LLM、视觉检测/分割、扩散、强化学习、多模态/VLM) → by-domain.md。
  • 运行但学不会(过拟合单批次、参数未更新、LR/调度、损失函数脚枪、冻结) → convergence-debugging.md。
  • 数据加载器正确性(worker RNG增强重复、IterableDataset分片、RGB vs BGR / ÷255 / set_epoch) → data-pipeline.md。

验证 — 数字是真实的吗?

在信任或报告任何指标、消融差异或“它现在起作用了”之前:将其分类为 bug / 效果 / 噪声,与恰好一个改变的变量进行比较,并探测数据泄漏/公平比较/方差/指标方向。你无法从保存的工件重新推导出的数字还不是结果。立场:审计 → 披露 — 将完整性问题与结论一起浮出水面,从不静默通过或硬性阻止。

  • 完整方法论(14项探测梯级 + 6条不变量) → references/verifying/methodology.md。
  • 恒定/退化输出、real == shuffle、模型忽略输入 → references/verifying/representation-collapse.md。
  • 绿色烟雾测试掩盖了欠训练 vs 真实bug;loss低但样本差 → references/verifying/smoke-hidden-failures.md。

比较时说明指标的改进方向(PSNR/SSIM/mAP ↑ 更好;LPIPS/NMSE/loss ↓ 更好) — 永远不要假设。追踪器法医分析 / 修剪重复运行 → scripts/wandb_forensics.py。

交付 — 组织 → 单一来源 → 图表

使交付物成为一个不可变、版本化证据层的确定性函数;通过机制锁定可追溯性和跨文档一致性,而不是手动操作。八个原则,分层(references/delivering/principles.md):

  • 核心(从第一个真实数字开始连接) — P1 证据/表示层清晰分离(表示层中零手动输入的数字) · P2 数字从 results.json 生成,不是转录(因此过时数字物理上不可能) · P3 内容寻址 + 仅追加的不可变运行(重新运行生成新的 <run-id>,从不覆盖) · P7 图表链可追溯性(results.json → source_data.csv → 图表 + .provenance 侧车文件)+ 像素重新打开门控(已保存的图表不一定是正确的图表) · P8 交付是一个披露门控,而非阻塞门控。
  • 高级(临近提交时打开 — YAGNI 也适用于可追溯性) — P4 数据/分割版本化 + 哈希固定(数据泄漏变为机器可检查) · P5 从干净克隆的单一命令复现(scripts/repro.sh.template)。

机制:磁盘文件树 → references/delivering/data-architecture.md;两个清单模式 → references/delivering/evidence-manifest-schema.md;每图表一个文件夹的约定 + 像素门控 → references/delivering/figures.md;每数字披露清单 → references/delivering/delivery-gate.md。

EVIDENCE.json 是项目级别的单一事实源 — 一个机器可读的声明↔证据映射(每个声明 ← 支持它的实验ID/指标/图表 + 论文锚点 + 仓库的 file:line)。scripts/reconcile.py 在整个仓库中 grep 其权威值以捕获跨文档漂移;scripts/manifest_scaffold.py 生成结构框架。

配套技能(均为可选 — 本技能独立运行)

推荐的独立安装,用于深化运行/验证/交付;本技能不需要其中任何一个,完全独立运行。每行一个列表,每个技能添加什么,以及无配套时的回退方案 → references/companions.md。简而言之:图表绘制(nature-figure / publication-chart / scipilot-figure)、实验验证(experiment-verifier 代理)、并行消融(superpowers:dispatching-parallel-agents)、HF传输 + 托管的追踪器(huggingface-skills:hf-cli / huggingface-trackio)。

随时间改进

技能是静态的,但每次运行都可以教会它一个陷阱 — 而不会损坏它。协议 → references/self-improvement.md:仅沉淀根因已确定、可复现、可泛化的陷阱(一次性故障是假设,不是陷阱);将用户/项目特定的事实路由到宿主的记忆,将可泛化的路由到提议的目录编辑;永远不要静默重写技能文件 — 起草 症状 → 根因 → 修复 并让用户批准。平台事实带有 verified <月份> 戳记 — 在花费金钱或数据之前,根据当前文档重新验证任何销毁/计费事实(scripts/check_staleness.py)。

捆绑资源

仅加载当前阶段所需的内容(上面的正文部分命名了各个文件)。

  • references/run-local/ — 拥有机器:环境卫生 · 启动 · 多GPU · 本地OOM。
  • references/run-remote/ — 租赁机器:原则 · 生命周期检查清单 · 监控模式 · SSH传输 · 竞价弹性 · 中国网络 · 并行消融 · 多节点 · 通用陷阱(U1–U43)。
  • references/training/ — DL训练调试层(8个文件;本地/远程无关) — 上面已路由。
  • references/verifying/ — 数字是真实的吗:方法论 · 表示崩溃 · 烟雾测试隐藏的失败。
  • references/delivering/ — 交付物:原则 · 数据架构(+EVIDENCE.json) · 证据清单模式 · 图表 · 交付门控。
  • references/companions.md(可选技能 + 回退方案) · references/self-improvement.md(捕获陷阱循环)。
  • profiles/<platform>.md — 按平台的基板(7个租赁配置文件 + local.md;_schema.md = 字段)。
  • scripts/ — 包装器(`run_one

相关技能