사전학습 가중치
카탈로그 가중치 미러, 테넌트가 올린 가중치, 그리고 트레이너가 지켜야 할 pretrained.path 규칙
학습의 시작 가중치는 두 곳에서 옵니다. 마법사 3단계에서 모델을 고를 때 함께 고릅니다.
| 출처 | experiment.json 의 pretrained | 트레이너가 할 일 |
|---|---|---|
| 카탈로그(기본): 모델 변형의 공개 체크포인트 | {"source": "catalog"} | 없음. 프레임워크가 평소대로 찾습니다 |
| 테넌트가 올린 가중치 | {"source": "tenant", "name": "…", "path": "/geo/work/weights/tenant/<파일>"} | path 의 파일을 반드시 써야 합니다 |
카탈로그 가중치: 미러는 최적화일 뿐
플랫폼은 카탈로그 모델의 공개 체크포인트를 오브젝트 스토리지에 미러(복사본)로 받아 두고, 학습 컨테이너가 뜨기 전에 그 프레임워크가 찾는 자리에 미리 놓습니다. YOLO 는 작업 디렉터리(/geo), RF-DETR 은 RF_HOME(/geo/work/weights) 입니다. 파일이 이미 있으면 프레임워크는 다운로드를 건너뜁니다. 폐쇄망에서 인터넷 없이 학습이 도는 것도 이 덕분입니다.
미러가 비어 있으면 첫 학습이 인터넷에서 받아 미러에 채워 넣습니다. 실제 로그는 이렇습니다.
-> weights: mirror miss (… yolo26n.pt: … Not Found), trying upstream
-> weights: mirrored s3://mlflow/runtime-weights/yolo/…/yolo26n.pt
-> weights: yolo26n.pt 5MB from upstream in 1s
그다음 학습부터는 -> weights: yolo26n.pt 5MB from mirror in 0s 입니다.
미러 관리(미리 채우기, 비우기)는 시스템 관리자의 일입니다. 관리자 가이드 를 보세요.
테넌트가 올린 가중치
이미 학습해 둔 자기 체크포인트에서 이어서 학습하고 싶을 때 씁니다. 학습 화면 위쪽의 사전학습 가중치 링크(주소 /training/weights)로 가서 가중치 올리기 로 .pt/.pth 파일을 올립니다.
- 올릴 때 프레임워크와 모델 변형을 고릅니다. 체크포인트는 아키텍처에 묶여 있어서, 마법사는 고른 변형의 가중치만 보여 주고 서버도 제출 때 다시 확인합니다.
- 업로드가 끝나도 서버가 파일을 합치고 검사하는 동안에는 고를 수 없습니다. 상태가 준비 완료가 되면 마법사 3단계의 시작 가중치에 나타납니다.
트레이너 규칙: pretrained.path 는 반드시 쓰고, 없으면 실패
source 가 tenant 이면 트레이너는 experiment.json 의 pretrained.path 가 가리키는 파일에서 시작해야 합니다. 그 파일을 읽지 못하면 실패로 끝내야 합니다. 알리지 않고 공개 가중치로 대신 시작하면, 아무도 고르지 않은 가중치로 학습한 실행이 성공으로 보고됩니다.
import json, os, sys
from pathlib import Path
config = json.loads(Path(os.environ["GEO_CONFIG"]).read_text())
pretrained = config.get("pretrained") or {"source": "catalog"}
if pretrained["source"] == "tenant":
weights = Path(pretrained["path"])
if not weights.is_file():
sys.exit(f"선택한 사전학습 가중치가 없습니다: {weights}")
model = load_from_checkpoint(weights) # 반드시 이 파일에서 시작
else:
model = load_default_pretrained() # 프레임워크 기본 (미러가 있으면 거기서)
실제로는 가중치 파일을 놓지 못하면 준비 단계가 먼저 실패해 학습 컨테이너가 뜨지 않습니다. 트레이너가 보는 경우는 "파일이 있다" 뿐이지만, 위 검사는 규칙을 코드로 남기는 안전장치입니다.