remote-gpu-trainer — 딥러닝 실험 생애주기
개요
하나의 스킬로 딥러닝 실험의 전체 아크(arc)를 다룹니다: RUN → VERIFY → DELIVER.
- RUN — 긴 GPU 작업을 시작하고, 유지하며, 완료한 후 결과를 머신에서 가져옵니다. 사용자가 소유한 머신에서는 요금이 발생하지 않습니다. 임대한 머신의 핵심 통찰은 당신은 다른 사람의 머신에서 단기 임차인이라는 점입니다. 따라서 작업은 작업을 분리하고, 결과가 인스턴스보다 오래 지속되도록 하며, 안전하게 요금을 중단하는 것이지, 클러스터를 프로비저닝하는 것이 아닙니다. 경계 부분은 플랫폼별로 다르며(하나의
profiles/<platform>.md가 모든 경로, 프록시, 결제 명령어, 스팟 규칙을 소유), 핵심은 불변합니다. - VERIFY — 이 숫자가 버그인가, 실제 효과인가, 아니면 노이즈인가? 예상치 못한 결과는 보고할 사실이 아니라 가설입니다. 플랫폼에 독립적입니다.
- DELIVER — 모든 전달된 숫자/그림/표가 하나의 불변 증거 레이어의 결정론적 함수가 되도록 구성합니다. 출처 및 교차 문서 일관성은 사람이 세 문서를 업데이트하는 것을 기억하는 것이 아니라 메커니즘에 의해 잠깁니다. 플랫폼에 독립적입니다.
VERIFY와 DELIVER를 관통하는 두 가지 입장: 사용자 주권(과학 — 시드 수, 어떤 샘플, aux 채널 존재 여부 — 은 사용자의 결정입니다. 스킬은 절충점을 한 번 정리하고 공개한 후 더 이상 잔소리하지 않습니다)과 감사 → 공개, 집행 아님(스킬은 정직한 감사자일 뿐, 게이트키퍼가 아닙니다 — 무결성 문제는 영향을 미치는 결론과 함께 표면화되어야 하지만, 스킬이 사용자의 전달을 막지는 않습니다). 만트라: "공개하든가, 아니면 주장하지 마라."
먼저 경로 선택
- RUN — 머신을 소유했나요, 임대했나요?
- 로컬 (사용자 소유의 워크스테이션/랩탑, 요금 없음) →
references/run-local/및profiles/local.md. - 임대 / 원격 (소유하지 않은 요금제 또는 공유 머신) →
references/run-remote/, 그리고profiles/<platform>.md를 먼저 선택하세요 (이 파일이 단계들이 위임하는 모든 경로/동사/프록시를 소유합니다).
- 로컬 (사용자 소유의 워크스테이션/랩탑, 요금 없음) →
- 그런 다음 항상 → VERIFY 결과 (
references/verifying/) → DELIVER 결과 (references/delivering/). 이 두 단계는 플랫폼에 독립적이며, 작업이 로컬에서든 임대 머신에서든 동일하게 실행됩니다. 실행이 성공했다고 해서 여기서 아무것도 건너뛰지 마세요 — 녹색 실행이 실제 숫자를 의미하지 않으며, 실제 숫자가 깔끔한 전달물을 의미하지 않습니다.
실행 위치에 관계없이 이미 수렴하지 않는 모델 / OOM / 멈춤 / NaN을 디버깅 중이신가요? 바로
references/training/(8개 파일 디버그 레이어)로 이동한 후, 보고하기 전에 VERIFY로 돌아오세요.
운영 원칙 (척추)
하중 지지 불변성. 각각 한 줄씩입니다. 원격 생애주기에 대한 전체 크로스 플랫폼 세트(10가지 불변성)는 references/run-remote/principles.md 에 있습니다 — 원격 실행의 Phase 0 전에 읽으세요.
- 내구성 저장소에 체크포인트 + 멱등성 재개가 보편적 척추입니다. 내구성 위치에 파일 체크포인트 + 시작 시 조건 없는 최신 로드는 SSH 드롭, Slurm walltime 종료, K8s 재스케줄, 스팟 선점, Colab 연결 끊김을 견디는 하나의 메커니즘입니다. 분리 프리미티브(tmux / sbatch / Job)는 교체 가능한 플러그입니다. 이것이 불변성입니다.
- 성공을 주장하는 로그 줄이 아닌, 로드한 아티팩트를 신뢰하세요. "동기화됨 / 저장됨 / 완료됨"은 조용히 실패한 쓰기 아래에서 거짓말을 합니다. 감시자의 자신의 상태도 주장입니다 — 실제 프로세스 / 아티팩트 / 픽셀 / 바이트와 조정하세요.
- 비용이 많이 드는 계산 전에 저렴한 검사를 수행하세요. 1-2 배치 CPU 스모크(로거 끄기)는 GPU 시간이 청구되기 전에 import/구성/형상/스케일 버그를 거의 무료로 잡아냅니다.
- 비용 및 파괴적 작업은 사용자의 결정입니다. 확인 없이 자동 해제/종료하지 말고, 확인 없이 내구성 파일을 삭제하지 마세요. 정리로 공간을 확보할 수 없으면 디스크 확장을 요청하고, 실험을 조용히 축소하지 마세요.
- 감사 → 공개, 집행 아님. 필수는 공개이지, 수정이 아닙니다. 무결성 발견(분리된 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 — 원격 (임대 머신)
먼저 프로필을 선택하세요 — 프로필이 단계들이 위임하는 모든 구체적인 경로/프록시/자격 증명/결제 동사/스팟 규칙을 바인딩합니다. 정신적 동사 모델(플랫폼 간 하나의 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/7 청구) |
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 재개 가능, 비밀-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 실행 / 멈춤 (
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, diffusion, RL, 멀티모달/VLM) →
by-domain.md. - 실행되지만 학습 안 됨 (원 배치 과적합, 매개변수 업데이트 안 됨, LR/스케줄, 손실 함수 발판, 프리징) →
convergence-debugging.md. - 데이터로더 정확성 (워커-RNG 증대 중복, IterableDataset 샤딩, RGB-vs-BGR / ÷255 /
set_epoch) →data-pipeline.md.
VERIFY — 숫자가 실제인가요?
어떤 메트릭, 절제 델타, 또는 "이제 작동함"을 신뢰하거나 보고하기 전에: 버그 / 효과 / 노이즈로 분류하고, 정확히 하나의 변경된 변수와 비교를 유지하며, 누출/공정 비교/분산/메트릭 방향을 조사하세요. 저장된 아티팩트에서 재유도할 수 없는 숫자는 아직 결과가 아닙니다. 입장: 감사 → 공개 — 결론과 함께 무결성 문제를 표면화하고, 조용히 통과시키거나 하드 블록하지 마세요.
- 전체 방법론(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.
DELIVER — 구성 → 단일 소스 → 그림
전달물을 하나의 불변, 버전 관리된 증거 레이어의 결정론적 함수로 만드세요. 출처 및 교차 문서 일관성을 손이 아닌 메커니즘으로 잠그세요. 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; 두 가지 매니페스트 스키마 → references/delivering/evidence-manifest-schema.md; 그림당 한 폴더 규칙 + 픽셀 게이트 → references/delivering/figures.md; 숫자당 공개 체크리스트 → references/delivering/delivery-gate.md.
EVIDENCE.json이 프로젝트 수준의 단일 진실 공급원입니다 — 기계 판독 가능한 주장↔증거 맵 (각 주장 ← 지원하는 실험 ID / 메트릭 / 그림 + 논문 앵커 + 저장소file:line).scripts/reconcile.py는 저장소 전체를 공식 값과 비교하여 교차 문서 드리프트를 잡아냅니다.scripts/manifest_scaffold.py는 구조를 스탬프합니다.
동반 스킬 (모두 선택 사항 — 이 스킬은 독립형)
RUN / VERIFY / DELIVER를 심화하는 권장 별도 설치; 스킬은 이들 중 어느 것도 필요로 하지 않으며 완전히 독립적으로 작동합니다. 각 항목 한 줄 요약, 각 스킬이 추가하는 기능, 동반 스킬 없는 대체 방법 → references/companions.md. 간단히: 그림 그리기 (nature-figure / publication-chart / scipilot-figure), 실험 검증 (experiment-verifier 에이전트), 병렬 절제 (superpowers:dispatching-parallel-agents), HF 전송 + 호스티드 트래커 (huggingface-skills:hf-cli / huggingface-trackio).
시간이 지남에 따라 개선하기
스킬은 정적이지만, 모든 실행이 스킬에 함정(gotcha)을 가르칠 수 있습니다 — 손상시키지 않고. 프로토콜 → references/self-improvement.md: 근본 원인이 파악되고, 재현 가능하며, 일반화 가능한 함정만 퇴적하세요(일회성 오류는 가설일 뿐 함정이 아님). 사용자/프로젝트 특정 사실은 호스트의 메모리로 라우팅하고, 일반화 가능한 사실은 제안된 카탈로그 편집으로 라우팅하세요. 절대 스킬 파일을 조용히 다시 쓰지 마세요 — 증상 → 근본 원인 → 수정 초안을 작성하고 사용자가 승인하게 하세요. 플랫폼 사실은 verified <월> 스탬프를 갖습니다 — 돈이나 데이터를 걸기 전에 현재 문서와 비교하여 모든 해제/청구 사실을 재검증하세요(scripts/check_staleness.py).
번들 리소스
현재 단계에 필요한 것만 로드하세요 (위 본문 섹션에서 개별 파일 이름을 명시).
references/run-local/— 머신 소유: 환경 위생 · 실행 · 멀티 GPU · 로컬 OOM.references/run-remote/— 머신 임대: 원칙 · 생애주기 체크리스트 · 모니터링 패턴 · SSH 전송 · 스팟 복원력 · 중국 네트워크 · 병렬 절제 · 멀티노드 · 보편적 함정 (U1–U43).references/training/— 딥러닝 훈련 디버그 레이어 (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
…
[번역을 위해 잘림]