학습의 시작 가중치는 두 곳에서 옵니다. 마법사 3단계에서 모델을 고를 때 함께 고릅니다.

출처experiment.jsonpretrained트레이너가 할 일
카탈로그(기본): 모델 변형의 공개 체크포인트{"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 는 반드시 쓰고, 없으면 실패

sourcetenant 이면 트레이너는 experiment.jsonpretrained.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()          # 프레임워크 기본 (미러가 있으면 거기서)

실제로는 가중치 파일을 놓지 못하면 준비 단계가 먼저 실패해 학습 컨테이너가 뜨지 않습니다. 트레이너가 보는 경우는 "파일이 있다" 뿐이지만, 위 검사는 규칙을 코드로 남기는 안전장치입니다.

2026-09-21 기준 플랫폼에 맞춰 작성했습니다.

© Geo-MLOps