Catalog registration
The training catalog format that puts a new framework, model variant or hyperparameter in the wizard, and how to register it with an image label, the admin screen or hp_preset.yaml
The choices in wizard steps 2, 3 and 7 (framework cards, model variants, hyperparameters) come from the training catalog. There is one catalog per framework key (the framework value of a training runtime variant). Importing an image and creating an external variant makes the image runnable, but without a catalog for the key that framework cannot be chosen in the wizard.
There are three ways to register a catalog. Whichever you use, the result is stored in the platform DB, and the on-screen defaults and ranges use the same values as the server's submission checks.
| Way | Who | Notes |
|---|---|---|
| Image label (recommended) | Image author | The image carries its catalog. It is registered in the DB automatically on import, and travels with the image to another site |
| Admin screen | Tenant admin | For images without a label. Enter it as YAML on the Training catalog screen |
| Deliver hp_preset.yaml | Image author → admin | The older format with hyperparameters only. The admin merges it with Import hp_preset.yaml (hp_preset.yaml 가져오기) in the editor |
New tasks and new data kinds cannot be added through the catalog; choose from the fixed lists in the format below.
Catalog format
geo-mlops/catalog/v1, written in YAML or JSON.
schema: geo-mlops/catalog/v1
framework:
key: defect-clf # framework key; must match the training runtime variant's framework
label: Defect classifier # wizard step 2 card name
description: Predicts defects from tabular measurements
badges: [tabular] # card badges
license: Proprietary
data_kind: tabular # image | tabular | pointcloud
split_methods: [random, stratified]
requires_gpu: false # true rejects submissions without a GPU
models:
- key: okng # passed as GEO_PARAM_MODEL
task: classification
label: OK/NG prediction
classes_mode: none # required | optional | none
hyperparameters:
iterations: {type: int, default: 300, min: 50, max: 2000, description: iterations}
lr: {type: float, default: 0.08, min: 0.005, max: 0.5, description: learning rate}
- key: type
task: classification
label: Defect type
classes_mode: optional
label_column: defectType # required for tabular data that uses classes
hyperparameters:
iterations: {type: int, default: 300, min: 50, max: 2000}
backbone: {type: str, default: catboost}
| Field | Rule |
|---|---|
framework.key | Starts with a lowercase letter or digit, 2–63 characters of letters, digits and -. The built-in keys yolo, rf-detr, pointcept are not allowed |
models[].task | One of object_detection, instance_segmentation, semantic_segmentation, classification, interactive_segmentation, semi_supervised_segmentation |
split_methods | From random, stratified, datasets, collections — only what the trainer actually implements |
classes_mode | required: at least one class. optional: empty means every class. none: no class axis (binary, unsupervised) |
| Hyperparameter keys | ^[a-z][a-z0-9_]*$. The environment variable name is the key upper-cased as is (lr → GEO_HP_LR) |
type | int, float, bool, str. min/max only for numbers; default must be within range |
Unknown fields only produce a warning and are ignored. Validation errors are shown with line numbers.
Putting it in an image label
Turn the catalog into one line of JSON and put it in the OCI label io.geo-mlops.catalog.v1. The size limit is 64 KiB.
python3 -c 'import json, yaml; print(json.dumps(yaml.safe_load(open("catalog.yaml")), ensure_ascii=False, separators=(",", ":")))' > catalog.json
docker build --label io.geo-mlops.catalog.v1="$(cat catalog.json)" -t defect-clf-trainer:v1 .
docker image inspect --format '{{ index .Config.Labels "io.geo-mlops.catalog.v1" }}' defect-clf-trainer:v1
For a multi-architecture image the label of the first platform image is read; keep the label the same on every architecture.
The platform reads labels only from images in the platform registry: when an import finishes, when the same tag is pushed to the registry, and when an admin creates or edits a training runtime variant. It applies the label to the DB when:
- the variant's training framework equals the label's
framework.key. Set the same key with Enter own key (자체 키 입력) when creating the variant. - there is no tenant catalog for the key yet, or the existing one came from a label. A catalog an admin edited by hand is not overwritten; it only shows Differs from label (라벨과 다름).
See Training catalog for the full rules.
Values passed by the wizard
The wizard passes the model key chosen in step 3 as GEO_PARAM_MODEL and the step 7 values as GEO_HP_*. One image may handle several model variants. Out-of-range values are rejected at submission.
If you run an external image as a built-in framework (for example YOLO), the step 7 keys are checked against that framework's allowed keys (for YOLO epochs, batch, imgsz, lr0 and so on) and only those are passed as GEO_HP_*. For the built-in runtimes' catalog combinations see Built-in training runtimes.
A model that trains in units other than epochs (for example boosting iterations) logs that value to MLflow as the param epochs; progress is computed from it.
Deliverables checklist
- Image tar (
docker save, gzip recommended) + tag name + sha256 - Catalog: the image label
io.geo-mlops.catalog.v1, or acatalog.yaml(format above), or anhp_preset.yaml(format below) with the list and descriptions of model variants - Proof that
mlflow models servepasses: the model name and version used, request/response examples (Local verification) - Input data: file kinds, label format (annotation files, CSV column, properties inside files); for tabular or time-series data, the column list, dtypes, missing-value handling, sampling period, window length
- Who performs the train/val split (the image by default)
- Inference response JSON structure and how the decision basis is expressed
- Resources: CPU/GPU count, memory and expected time for one training run; whether serving needs a CPU or GPU and the target response time. If it cannot run without a GPU, set
requires_gpu: truein the catalog. - A sample dataset to try training with
hp_preset.yaml format
Write the hyperparameters each model variant exposes in the wizard as {default, min, max, description}. An admin merges it into the current catalog text with Import hp_preset.yaml (hp_preset.yaml 가져오기) in the editor. A model already present gets its whole hyperparameter table replaced; a missing model is added (it borrows the task of the first existing model, so check it before saving).
# hp_preset.yaml: hyperparameters per model variant
small-cnn:
epochs:
default: 20
min: 1
max: 500
description: training epochs (progress basis)
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: training epochs
- The type is inferred from
default(integer, float, boolean, string). A fractional range makes it a float. - Key rules and environment variable names are the same as in the catalog format above.
Pre-set experiments (presets)
Frequently used setting combinations are defined as "go straight" presets. A preset fills every wizard step 1–10 and jumps to the review step. The format is the same as the submission config.
id: person-detect-yolo26n
name: Person detection (YOLO26n)
description: Train YOLO26n object detection on the Person dataset with default settings
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 }