remote-gpu-trainer — 深層学習実験のライフサイクル
概要
深層学習実験の全工程をカバーするスキル:RUN → VERIFY → DELIVER。
- RUN — 長時間のGPUジョブを起動し、持続させ、完了させ、結果をマシンから取得する。自分所有のマシンではメーターはありません。レンタルしたマシンでは、核となる洞察は 「あなたは他人のマシン上の短期テナントである」 ということです。そのため、ジョブは 作業をデタッチし、結果をインスタンスより長持ちさせ、安全にメーターを停止する ことであり、クラスターをプロビジョニングすることではありません。エッジではプラットフォーム固有(各
profiles/<platform>.mdがすべてのパス、プロキシ、請求動詞、スポットルールを管理)、コアでは不変です。 - VERIFY — この数値はバグか、実際の効果か、それともノイズか? 驚くべき結果は仮説であり、報告すべき事実ではありません。プラットフォーム非依存です。
- DELIVER — 出荷するすべての数値/図/表が 1つの不変のエビデンスレイヤーの決定論的な関数 となるように結果を整理します。来歴と文書間の一貫性は、人間が3つのドキュメントを更新することを覚えていることではなく、メカニズムによって固定されます。プラットフォーム非依存です。
VERIFYとDELIVERには2つのスタンスがあります:ユーザー主権(科学 — シード数、どのサンプル、auxチャネルが存在するか — はユーザーの判断に委ねられます。スキルは一度トレードオフを整理して開示し、その後はしつこく促しません)と 監査→開示、強制しない(スキルは正直な監査人であり、門番ではありません。整合性の問題はそれが影響する結論とともに表面化しなければなりませんが、スキルはユーザーが出荷することを決して妨げません)。モットー:「開示するか、主張しないか」。
最初にルートを決める
- RUN — マシンを所有しているか、レンタルしているか?
- ローカル(自分所有のワークステーション/ラップトップ、メーターなし) →
references/run-local/およびprofiles/local.md。 - レンタル / リモート(自分所有ではないメーター制または共有マシン) →
references/run-remote/に進み、最初に**profiles/<platform>.md** を選択します(これはフェーズが委任するすべてのパス/動詞/プロキシを管理します)。
- ローカル(自分所有のワークステーション/ラップトップ、メーターなし) →
- その後、常に → 結果を VERIFY(
references/verifying/) → DELIVER(references/delivering/)します。これら2つはプラットフォーム非依存であり、ジョブがローカルでトレーニングされたかレンタルでトレーニングされたかに関係なく同じように実行されます。ここで何もスキップしないでください。実行が成功したからといって、それは本当の数値ではなく、本当の数値はまだクリーンなデリバラブルではありません。
モデルが収束しない/OOM/ハング/NaNになるデバッグを既に行っている場合(実行場所に関係なく)、直接
references/training/(8ファイルのデバッグレイヤー) にジャンプし、報告する前にVERIFYに戻ってきてください。
運用原則(背骨)
耐荷重不変条件。1行ずつ。完全なクロスプラットフォームセット(リモートライフサイクルの10の不変条件)は references/run-remote/principles.md にあります — リモート実行のフェーズ0の前に読んでください。
- チェックポイントから耐久ストレージへ + べき等再開は普遍的な背骨です。 ファイルチェックポイントを耐久ストレージに保存 + 起動時に無条件に最新をロードすることは、SSH切断、Slurm walltimeキル、K8s再スケジュール、スポットプリエンプション、Colab切断を生き残る唯一のメカニズムです。デタッチプリミティブ(tmux / sbatch / Job)は交換可能なプラグです。これが不変条件です。
- ロードしたアーティファクトを信頼し、成功を主張するログ行を信頼しないでください。 「同期済み / 保存済み / 完了」は、サイレントに失敗した書き込みの下で嘘をつきます。ウォッチャー自身の状態も主張です — 実際のプロセス / アーティファクト / ピクセル / バイトと照合してください。
- 高価な計算の前に安価なチェックを行ってください。 1~2バッチのCPUスモークテスト(ロガーオフ)は、GPU課金時間が発生する前に、インポート/設定/形状/スケールのバグをほぼ無料で排除します。
- コストと破壊的なアクションはユーザーの判断です。 自動解放/終了は絶対に行わず、確認なしに耐久ファイルを削除しないでください。クリーンアップで空き容量を増やせない場合は、ディスクを拡張するように依頼し、実験を静かに縮小しないでください。
- 監査→開示、強制しない。 必須なのは開示であり、修正ではありません。整合性の発見(バラバラのvalがない、リーク、選択中にテストに触れた、再導出できない数値)は結論とともに提示されなければなりません — しかしスキルは開示し、ブロックしません。
RUN — ローカル(自分所有のマシン)
メーターなし、解体時計なし — リスクはお金からリソース競合とマシンの安定性に移ります。緩めない規律:環境衛生、リソース認識、アーティファクト/チェックポイントの管理、「シードを明示する」。profiles/local.md から始め、次に対応するドキュメントに進みます:
- 環境衛生 — 永続的なマシンのconda
baseでトレーニング/インストールを決して行わない。4ステップのゲート(列挙 → プロジェクト環境を選択 →sys.executableを確認 → 実行) →references/run-local/env-hygiene.md。 - 起動とデタッチ — nohup/tmux、ログ + 生存プローブ、フォアグラウンドブロックしない →
references/run-local/launch.md。 - シングルノードマルチGPU —
torchrun/accelerateDDP環境コントラクト、初回実行のランク/ハングの基本 →references/run-local/multi-gpu.md(マルチノード →references/run-remote/multinode.md)。 - ローカルOOM — これ以上大きくレンタルできないハードウェアでの修正はしご →
references/run-local/local-oom.md。
RUN — リモート(レンタルマシン)
最初にプロファイルを選択 — これにより、フェーズが委任するすべての具体的なパス/プロキシ/認証情報/請求動詞/スポットルールがバインドされます。メンタル動詞モデル(プラットフォーム間で1つのAPI。プロファイルは各動詞を実際のコマンドにバインド):up(レンタル+到達) → push(コード/データを配置) → run(デタッチ+チェックポイント) → watch(耐久監視) → pull(結果を取得+検証) → down(メーターを停止)。
| 利用中のプラットフォーム… | プロファイル | メーター停止動詞(トラップ) |
|---|---|---|
| AutoDL(最も深く、戦闘テスト済み) | profiles/autodl.md | シャットダウンでメーター停止、ディスク保持(AutoDLの例外) |
| RunPod | profiles/runpod.md | terminate(停止は2倍課金、ボリュームディスクを破棄) |
| vast.ai | profiles/vastai.md | destroy(停止は永久にディスク課金) |
| Lambda | profiles/lambda.md | terminate(停止状態なし) |
| Paperspace | profiles/paperspace.md | destroy + IP解放 + ストレージ削除 |
| 恒源云 / 矩池云 / Featurize / 揽睿星舟 | profiles/china.md | プラットフォームごと(データディスクは停止中も課金されることが多い) |
| Bare SSH / Slurm / K8s / Colab | profiles/generic-ssh.md | 手動(忘れられたマシンは24時間365日課金) |
6フェーズのライフサイクル(完全なプラットフォームごとのチェックリスト → references/run-remote/lifecycle_checklist.md):
0 環境監査(df -hだけでなくdf -i、cgroup memory.max、チェックポイントディスク予算) · 1 SSH + 認証情報(事前構築イメージは環境です — レンタルでconda createしないでください。シークレットはstdin経由) · 2 ラッパー + レンタル前のCPUスモークゲート · 3 デタッチ起動(プローブしてから制御を戻す — ブロッキングsleepは絶対にしない) · 4 耐久監視(4層アーキテクチャ → references/run-remote/monitoring_patterns.md。セッションにバインドされたウォッチャーはセッションとともに死ぬ) · 5 集約 + 検証 + 解体。
鉄則 — 解体ゲート: チェックポイントが ローカルにプルされ、ロードによって検証されるまで(
scripts/verify_local.py)、release/terminate/destroy/ ファイル削除は行わない。また、ユーザーがコストに影響するアクションを明示的に承認するまで行わない。「ログでは完了して見えた」は証拠ではありません。ほとんどのプラットフォームでは、メーター停止アクションは元に戻せません(ディスクを削除する) — 確認はより重要であり、より軽くはなりません。
その他のリモート参照:ssh_transport.md(rsync/scp再開可能、シークレット-via-stdin、CRLF) · spot-resilience.md(プリエンプション猶予、Young/Daly周期、アトミック書き込み再開) · china-network.md(ミラー + HF_ENDPOINT + no_proxyトラップ) · parallel_ablation.md(ファンアウト独立性 + 調整) · multinode.md(NCCL/fabric、高度) · gotchas_universal.md(grepインデックス付きの完全なU1–U43カタログ)。
トレーニング自体が壊れたとき(モデル、プラットフォームではない)
マシンが実行されると、トレーニングは独自の方法で壊れます — ローカルでもリモートでも、同じデバッグレイヤー(references/training/、8ファイル、各エントリは症状 → 根本原因 → 引用されたドキュメント付きの修正)。症状でルーティング:
- OOM / 収まらない(CUDA-VRAMまたはホストRAM、ステップ単位のOOM、修正はしご) →
oom-memory.md。 - マルチGPU起動 / HANGS(
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、ビジョンdet/seg、拡散、RL、マルチモーダル/VLM) →
by-domain.md。 - 実行されるが学習しない(ワンバッチオーバーフィット、パラメータ更新なし、LR/スケジュール、損失関数の落とし穴、フリーズ) →
convergence-debugging.md。 - データローダーの正確性(ワーカー-RNG拡張重複、IterableDatasetシャーディング、RGB-vs-BGR / ÷255 /
set_epoch) →data-pipeline.md。
VERIFY — 数値は本物か?
任意のメトリック、アブレーションデルタ、または「これでうまくいった」を信頼または報告する前に:それをバグ/効果/ノイズに分類し、正確に1つの変更変数との比較を保持し、リーク/公平比較/分散/メトリック方向をプローブします。保存されたアーティファクトから再導出できない数値は、まだ結果ではありません。スタンス:監査→開示 — 結論とともに整合性の問題を表面化し、決して黙って通過させたり、ハードブロックしたりしないでください。
- 完全な方法論(14セクションのプローブはしご + 6つの不変条件) →
references/verifying/methodology.md。 - 定数/退化出力、
real == shuffle、モデルが入力を無視 →references/verifying/representation-collapse.md。 - 未学習を隠すグリーンスモークと実際のバグ、損失は低いがサンプルは悪い →
references/verifying/smoke-hidden-failures.md。
比較するときにメトリックの方向を明示する(PSNR/SSIM/mAP ↑が良い、LPIPS/NMSE/損失 ↓が良い) — 決して推測しない。トラッカーフォレンジック / 重複実行の整理 →
scripts/wandb_forensics.py。
DELIVER — 整理 → 単一ソース → 図
デリバラブルを、1つの不変でバージョン管理されたエビデンスレイヤーの決定論的な関数にします。来歴と文書間の一貫性をメカニズムによって固定し、手作業では固定しません。8つの原則、階層化(references/delivering/principles.md):
- CORE(最初の本当の数値から配線) — P1 エビデンス/プレゼンテーションレイヤーをきれいに分離(プレゼンテーションレイヤーに手入力された数値はゼロ) · P2 数値は
results.jsonから生成され、転記されない(したがって、古い数値は物理的に不可能) · P3 コンテンツアドレス指定 + 追記専用の不変実行(再実行は新しい<run-id>を生成し、上書きしない) · P7 図チェーン追跡可能性(results.json → source_data.csv → figure+.provenanceサイドカー)+ ピクセル再オープンゲート(保存された図は正しい図ではない) · P8 デリバリー = 開示ゲートであり、ブロッキングゲートではない。 - 高度(提出近くで有効にする — YAGNIは来歴にも適用される) — P4 データ/分割をバージョン管理 + ハッシュピン留め(リークが機械的にチェック可能になる) · P5 クリーンなクローンからのワンコマンド再現(
scripts/repro.sh.template)。
メカニクス:ディスク上のツリー → references/delivering/data-architecture.md;2つのマニフェストスキーマ → references/delivering/evidence-manifest-schema.md;図ごとの1フォルダ規約 + ピクセルゲート → references/delivering/figures.md;数値ごとの開示チェックリスト → references/delivering/delivery-gate.md。
EVIDENCE.jsonはプロジェクトレベルの単一の真実の情報源です — 機械可読な主張↔エビデンスマップ(各主張 ← それをサポートする実験ID / メトリック / 図 + 論文アンカー + リポジトリfile:line)。scripts/reconcile.pyはリポジトリ全体をその権威ある値に対してgrepし、文書間のドリフトをキャッチします。scripts/manifest_scaffold.pyは構造をスタンプします。
コンパニオンスキル(すべてオプション — このスキルはスタンドアロン)
RUN / VERIFY / DELIVER を強化する推奨される個別インストール。このスキルはどれも必要とせず、完全にスタンドアロンで動作します。各行に1つ、各スキルが追加するもの、およびコンパニオンなしの代替手段 → 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:根本原因が特定され、再現可能で、一般化可能な落とし穴のみを堆積させる(1回限りのフレークは仮説であり、落とし穴ではありません)。ユーザー/プロジェクト固有の事実はホストのメモリにルーティングし、一般化可能な事実は提案されたカタログ編集にルーティングします。スキルファイルを黙って書き換えないでください — 症状 → 根本原因 → 修正 をドラフトし、ユーザーに承認させてください。プラットフォームの事実には verified <月> スタンプが付いています。お金やデータを賭ける前に、現在のドキュメントに対して解体/請求の事実を再検証してください(scripts/check_staleness.py)。
バンドルされたリソース
現在のフェーズが必要とするものだけをロードしてください(上記の本文セクションは個々のファイルを指定しています)。
references/run-local/— マシンを所有: 環境衛生 · 起動 · マルチGPU · ローカルOOM。references/run-remote/— レンタルマシン: 原則 · lifecycle_checklist · monitoring_patterns · ssh_transport · spot-resilience · china-network · parallel_ablation · multinode · gotchas_universal (U1–U43)。references/training/— DLトレーニングデバッグレイヤー(8ファイル、ローカル/リモート非依存) — 上記でルーティング済み。references/verifying/— 数値は本物か: 方法論 · representation-collapse · smoke-hidden-failures。references/delivering/— デリバラブル: 原則 · data-architecture(+EVIDENCE.json) · evidence-manifest-schema · figures · delivery-gate。references/companions.md(オプションスキル + 代替手段) ·references/self-improvement.md(落とし穴キャプチャループ)。profiles/<platform>.md— プラットフォームごとの基盤(7つのレンタルプロファイル +local.md、_schema.md= フィールド)。scripts/— ラッパー(run_one
…
[翻訳のため省略]