Catalog registration requests
To show a new task, model variant or hyperparameter in the wizard, it must be added to the platform's code catalog — what to deliver and the hp_preset.yaml format
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 change | With the image alone |
|---|---|---|
| run my image with an existing task and model | Not needed | Just create an external variant |
| show a new model variant name in the wizard | Needed | — |
| take a new hyperparameter in the form | Needed | — |
| 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 servecheck — 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 (lr→GEO_HP_LR). There is no conversion rule, so thatlr-maxandlr_maxnever 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.yamland 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 }