The starting weights of a training run come from one of two places. You choose them together with the model in wizard step 3.

Sourcepretrained in experiment.jsonWhat the trainer does
Catalog (default) — the public checkpoint of the model variant{"source": "catalog"}Nothing. The framework finds it as usual
Weights uploaded by the tenant{"source": "tenant", "name": "…", "path": "/geo/work/weights/tenant/<file>"}Must use the file at path

Catalog weights — the mirror is only an optimization

The platform mirrors the public checkpoints of catalog models to object storage, and places them where the framework looks before the training container starts. For YOLO that is the working directory (/geo); for RF-DETR it is RF_HOME (/geo/work/weights). If the file is already there, the framework skips the download. This is also what lets training run without internet access in an air-gapped network.

If the mirror is empty, the first training run downloads from the internet and fills the mirror. The actual log looks like this.

-> 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

From the next training run on, it reads -> weights: yolo26n.pt 5MB from mirror in 0s.

Managing the mirror (pre-filling, clearing) is the system administrator's job — see the Administration guide.

Weights uploaded by the tenant

Use these when you want to continue training from your own checkpoint. Go to the Pretrained weights (사전학습 가중치) link at the top of the Training (학습) screen (address /training/weights) and upload a .pt/.pth file with Upload weights (가중치 올리기).

  • When uploading, choose the framework and model variant. A checkpoint is tied to an architecture, so the wizard shows only weights for the chosen variant, and the server checks again at submission.
  • Even after the upload finishes, the weights cannot be chosen while the server assembles and inspects the file. Once the status is ready, they appear under Starting weights (시작 가중치) in wizard step 3.

Trainer rule — always use pretrained.path, and fail if it is missing

If source is tenant, the trainer must start from the file that pretrained.path in experiment.json points to. If it cannot read that file, it must end in failure. If it silently falls back to public weights, a run trained on weights nobody chose is reported as a success.

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"selected pretrained weights not found: {weights}")
    model = load_from_checkpoint(weights)      # must start from this file
else:
    model = load_default_pretrained()          # framework default (from the mirror if present)

In practice, if the weight file cannot be placed, the preparation step fails first and the training container never starts. The trainer only ever sees the case "the file is there", but the check above is a safeguard that writes the rule down in code.

Written for the platform as of 2026-09-21.

© Geo-MLOps