The choices in wizard steps 1–3 and 7 — task, framework, model variant, hyperparameters — are not added on screen; they live in the platform code's catalog. Importing an image and creating an external variant does not add a new model name to the wizard.

There is one reason the catalog is in code. The defaults and ranges shown on screen and the ranges the server uses to validate submissions must live in one place so they never drift apart. Additions are rare, so there is no registration screen; the platform team adds them.

What is needed

I want to…Catalog changeWith the image alone
run my image with an existing task and modelNot neededJust create an external variant
show a new model variant name in the wizardNeeded
take a new hyperparameter in the formNeeded
accept a new task · new data kind (tables, point clouds, etc.)Needed

The combinations you can actually run with the current catalog are listed in Built-in training runtimes. The wizard passes the model chosen in step 3 as GEO_PARAM_MODEL and the step 7 values as GEO_HP_*, so one image can handle several model variants.

Deliverables checklist

  • Image tar (docker save, gzip recommended) + tag name + sha256
  • Record of passing the mlflow models serve check — the model name and version used, request/response examples (Local verification)
  • Hyperparameter preset hp_preset.yaml — format below
  • List of tasks · model variants and a description of each variant
  • Input data — file kinds, how labels arrive (annotation files · CSV columns · properties inside the file); for tables and time series, the column list · dtypes · missing-value handling · sampling interval · window length
  • Who does the train/val split (the image, by default)
  • JSON structure of the inference response and how the basis for a decision is expressed
  • Resources — CPU/GPU count · memory · expected time for one training run; whether serving uses CPU or GPU and the target response time. If it does not run at all without a GPU, say so (we mark it to be blocked at submission)
  • A sample dataset for testing training

hp_preset.yaml format

For each model variant, write the hyperparameters to expose in the wizard as {default, min, max, description}. A person reads the file and moves it into the catalog, so the shape below is an example; what matters is that these four meanings are all there.

# hp_preset.yaml — hyperparameters per model variant
small-cnn:
  epochs:
    default: 20
    min: 1
    max: 500
    description: Number of training epochs (basis for progress)
  batch:
    default: 64
    min: 1
    max: 1024
    description: Batch size
  lr:
    default: 0.001
    min: 0.000001
    max: 1.0
    description: Learning rate
large-cnn:
  epochs:
    default: 50
    min: 1
    max: 500
    description: Number of training epochs
  • Keys must match ^[a-z][a-z0-9_]*$. The environment variable name is the key converted to upper case as is (lrGEO_HP_LR). There is no conversion rule, so that lr-max and lr_max never collapse into the same variable.
  • The value type follows the type of default (integer · float · boolean · string). Out-of-range values are rejected at submission — better than dying inside the pod a few minutes later.
  • For a model that runs in units other than epochs (for example boosting iterations), record that value in MLflow as the param epochs. Progress is calculated from it.
  • To change values, edit hp_preset.yaml and send it again. The platform side updates the catalog to the same values.

Predefined experiments (presets)

You can also keep a frequently used configuration as a "run right away" preset. A preset fills wizard steps 1–10 entirely and skips to the review step. The format is the same as the submission settings.

id: person-detect-yolo26n
name: Person 탐지 (YOLO26n)
description: Person 데이터셋으로 YOLO26n 객체 탐지를 기본 설정으로 학습
config:
  task: object_detection
  framework: yolo
  model: yolo26n
  dataset_id: person
  classes: [person_poly, person_bmp]
  split: { method: random, train_percent: 80, seed: 0 }
  hyperparameters: ""        # empty means the framework defaults
  serving: { runtime: cpu }

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

© Geo-MLOps