Communitygithub.com

Hanyuyuan6/remote-gpu-trainer

一個 AI Agent 技能,涵蓋深度學習實驗生命週期:執行(在自有或租用的 GPU 上)→ 驗證(確認數值真實可靠)→ 交付(產出可重現、單一來源的圖表與數據)。

remote-gpu-trainer 是什麼?

這是一個專為深度學習實驗生命週期設計的 AI Agent 技能,將整個流程劃分為三個核心階段:RUN(執行)、VERIFY(驗證)和 DELIVER(交付)。在 RUN 階段,它支援在自有機器(無計費)與租用 GPU 實例(例如 AutoDL、RunPod、vast.ai 等平台)上執行訓練任務,重點在於透過斷點續傳、檢查點持久化、分離式執行與安全的資源釋放機制,來管理租用環境中的成本與穩定性。VERIFY 階段則專注於區分數值結果是錯誤、真實效應還是隨機雜訊,並透過詳盡的探測程序與完整性檢查來確保科學結論的可靠性。最後的 DELIVER 階段確保每個輸出的數字與圖表都是基於不可變的證據層,透過 `EVIDENCE.json` 清單與機械化的交叉文件一致性檢查,實現真正的可重現性。此技能附帶豐富的參考文件(包含訓練除錯、平台設定檔、驗證方法與交付原則),並整合了多種腳本與工具(如 `scripts/reconcile.py`、`scripts/verify_local.py`),以協助使用者嚴格執行實驗紀律。

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

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

remote-gpu-trainer — 深度學習實驗生命週期

概述

一個技能涵蓋深度學習實驗的完整流程:執行 → 驗證 → 交付。

  • 執行 — 讓長時間的 GPU 工作順利啟動、存活並完成,然後從機器上取得結果。在自有機器上沒有計費問題;在租用機器上的核心洞見是你只是別人機器上的短期租戶——因此任務是將工作分離、讓結果比實例存活更久,並安全地停止計費,而不是建立一個叢集。邊界處有平台特定性(一個 profiles/<platform>.md 負責所有路徑、代理、計費指令與競價規則),核心則是不變的。
  • 驗證 — 這個數字是錯誤、真實效應還是雜訊? 一個令人驚訝的結果是假設,而非可報告的事實。與平台無關。
  • 交付 — 組織結果,使每個送出的數字/圖表/表格都是一個不可變證據層的確定性函數;可追溯性與跨文件一致性由機制鎖定,而非由人類記得更新三份文件。與平台無關。

貫穿驗證與交付的兩個立場:使用者主權(科學決策——種子數量、哪些樣本、是否存在 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 牆時間終止、K8s 重新排程、競價搶佔、Colab 斷線中倖存的機制。分離原始語(tmux / sbatch / Job)是可替換的插頭;這是不變性。
  • 信任你載入的工件,而非聲稱成功的日誌行。 「已同步 / 已儲存 / 已完成」可能在靜默寫入失敗時說謊;監控器自身的狀態也是一種聲明——根據實際進程/工件/像素/位元組進行比對。
  • 昂貴計算前的廉價檢查。 1–2 批次 CPU 冒煙測試(關閉記錄器)可以幾乎免費地消滅匯入/配置/形狀/縮放錯誤,避免它們消耗 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/框架,進階)· gotchas_universal.md(完整的 U1–U43 目錄,附 grep 索引)。

當訓練本身出錯時(模型問題,而非平台問題)

一旦機器開始運行,訓練會以其自身的方式出錯——本地或遠端,同樣的除錯層(references/training/,8 個檔案;每個條目症狀 → 根本原因 → 附有引用文件的修復)。依症狀導航:

  • OOM / 放不下(CUDA-VRAM 或主機-RAM、步驟層級 OOM、解決階梯)→ oom-memory.md。
  • 多 GPU 啟動 / 掛起(torchrun/accelerate/deepspeed 環境合約、DDP/FSDP/ZeRO)→ distributed-launch.md。
  • NaN / Inf / 損失突增(fp16/bf16/tf32、AMP/GradScaler、LLM 分歧)→ precision-stability.md。
  • 太慢(GPU 密集型 vs 資料密集型 vs 通訊密集型、資料載入器調整、torch.compile 陷阱)→ throughput-profiling.md。
  • 恢復錯誤(完整狀態 + 分片儲存/恢復;週期重新啟動、重新洗牌、Scaler/EMA 遺失)→ checkpoint-resume.md。
  • 領域特定陷阱(LLM、視覺偵測/分割、擴散模型、強化學習、多模態/VLM)→ by-domain.md。
  • 可以運行但學不到(過擬合一個批次、參數未更新、學習率/排程、損失函數地雷、凍結)→ convergence-debugging.md。
  • 資料載入器正確性(工作者 RNG 增強重複、IterableDataset 分片、RGB-vs-BGR / ÷255 / set_epoch)→ data-pipeline.md。

驗證 — 數字是真的嗎?

在你信任或報告任何指標、消融實驗差異,或「它現在可以運作」之前:將其分類為錯誤 / 效應 / 雜訊,與恰好一個變數變更的結果進行比較,並探測資料洩漏 / 公平比較 / 變異性 / 指標方向。你無法從已儲存的工件中重新推導的數字還不是結果。立場:稽核→揭露——將完整性問題與結論一同呈現,永遠不會靜默通過或強硬阻擋。

  • 完整方法論(14 節探測階梯 + 6 個不變性)→ references/verifying/methodology.md。
  • 常數 / 退化輸出、real == shuffle、模型忽略輸入 → references/verifying/representation-collapse.md。
  • 隱藏訓練不足的綠色冒煙測試 vs 真正的錯誤;損失低但樣本差 → references/verifying/smoke-hidden-failures.md。

比較時陳述指標的方向(PSNR/SSIM/mAP ↑ 較好;LPIPS/NMSE/損失 ↓ 較好)——切勿假設。追蹤器鑑識 / 修剪重複運行 → 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

…

[因篇幅限制而截斷]

相關技能