카탈로그 등록
새 프레임워크·모델 변형·하이퍼파라미터를 마법사에 표시하기 위한 학습 카탈로그 형식과, 이미지 라벨·관리자 화면·hp_preset.yaml 로 등록하는 방법
마법사 2·3·7단계의 선택지(프레임워크 카드, 모델 변형, 하이퍼파라미터)는 학습 카탈로그가 결정. 카탈로그는 프레임워크 키(학습 런타임 변형의 프레임워크 값)마다 하나. 이미지를 반입해 외부 변형만 만들면 이미지는 실행되지만, 그 키의 카탈로그가 없으면 마법사에서 그 프레임워크를 선택할 수 없음.
카탈로그를 등록하는 방법은 세 가지. 어느 쪽이든 결과는 플랫폼 DB 에 저장되고, 화면의 기본값·범위와 서버의 제출 검증이 같은 값 사용.
| 방법 | 누가 | 특징 |
|---|---|---|
| 이미지 라벨 (권장) | 이미지 제작자 | 이미지에 카탈로그를 포함. 반입하면 자동으로 DB 에 등록되고, 이미지를 다른 사이트로 옮겨도 함께 이동 |
| 관리자 화면 입력 | 테넌트 관리자 | 라벨이 없는 이미지. 학습 카탈로그 화면에서 YAML 로 입력 |
| hp_preset.yaml 전달 | 이미지 제작자 → 관리자 | 하이퍼파라미터만 담은 옛 형식. 관리자가 편집 화면의 hp_preset.yaml 가져오기 로 합침 |
새 태스크와 새 데이터 종류는 카탈로그로 추가 불가. 아래 형식의 고정 목록 중에서 선택.
카탈로그 형식
geo-mlops/catalog/v1. YAML 이나 JSON 으로 작성.
schema: geo-mlops/catalog/v1
framework:
key: defect-clf # 프레임워크 키. 학습 런타임 변형의 프레임워크와 같아야 함
label: 결함 분류기 # 마법사 2단계 카드 이름
description: 표 형식 측정값으로 불량을 예측
badges: [tabular] # 카드 배지
license: Proprietary
data_kind: tabular # image | tabular | pointcloud
split_methods: [random, stratified]
requires_gpu: false # true 면 GPU 없이 제출 거절
models:
- key: okng # GEO_PARAM_MODEL 로 전달
task: classification
label: 양불 예측
classes_mode: none # required | optional | none
hyperparameters:
iterations: {type: int, default: 300, min: 50, max: 2000, description: 반복 수}
lr: {type: float, default: 0.08, min: 0.005, max: 0.5, description: 학습률}
- key: type
task: classification
label: 불량 유형 분류
classes_mode: optional
label_column: defectType # 표 형식에서 클래스를 쓰면 필수
hyperparameters:
iterations: {type: int, default: 300, min: 50, max: 2000}
backbone: {type: str, default: catboost}
| 항목 | 규칙 |
|---|---|
framework.key | 소문자 영숫자로 시작, 영숫자와 - 로 2~63자. 내장 키 yolo, rf-detr, pointcept 는 사용 불가 |
models[].task | object_detection, instance_segmentation, semantic_segmentation, classification, interactive_segmentation, semi_supervised_segmentation 중 하나 |
split_methods | random, stratified, datasets, collections 중에서. 트레이너가 실제로 구현한 방식만 |
classes_mode | required: 클래스 1개 이상 필수. optional: 비우면 전체 클래스. none: 클래스 축 없음(이진·비지도) |
| 하이퍼파라미터 키 | ^[a-z][a-z0-9_]*$. 환경 변수 이름은 키를 그대로 대문자로 바꾼 것(lr → GEO_HP_LR) |
type | int, float, bool, str. min·max 는 수 타입에만, default 는 범위 안 |
모르는 항목은 경고만 내고 무시. 검증 오류는 행 번호와 함께 표시.
이미지 라벨로 포함하기
카탈로그를 한 줄 JSON 으로 바꿔 OCI 라벨 io.geo-mlops.catalog.v1 에 넣음. 크기 상한은 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
멀티 아키텍처 이미지는 첫 번째 플랫폼 이미지의 라벨을 읽음. 아키텍처마다 같은 라벨 권장.
플랫폼은 플랫폼 레지스트리에 있는 이미지만 라벨을 읽음. 반입이 끝날 때, 레지스트리에 같은 태그로 push 될 때, 관리자가 학습 런타임 변형을 만들거나 수정할 때 읽고, 아래 조건이면 DB 에 반영.
- 변형의 학습 프레임워크가 라벨의
framework.key와 같음. 변형을 만들 때 자체 키 입력 으로 같은 키 지정. - 그 키의 테넌트 카탈로그가 없거나, 있어도 라벨에서 들어온 것. 관리자가 직접 편집한 카탈로그는 자동으로 덮어쓰지 않고 라벨과 다름 으로만 표시.
자세한 반영 규칙은 학습 카탈로그 참고.
마법사로 전달되는 값
마법사는 3단계에서 선택한 모델 키를 GEO_PARAM_MODEL 로, 7단계 값을 GEO_HP_* 로 전달. 한 이미지가 여러 모델 변형을 처리해도 무방. 범위를 벗어난 값은 제출 시 거절.
외부 이미지를 내장 프레임워크(예: YOLO)로 실행하면 7단계 키는 그 프레임워크의 허용 키(YOLO 는 epochs, batch, imgsz, lr0 등)로 검사되고 그 키만 GEO_HP_* 로 전달. 내장 런타임의 카탈로그 조합은 내장 학습 런타임 참고.
epoch 과 다른 단위로 학습하는 모델(예: 부스팅 반복 수)은 그 값을 param epochs 로 MLflow 에 기록. 진행률이 그 값으로 계산.
전달물 체크리스트
- 이미지 tar(
docker save, gzip 권장) + 태그 이름 + sha256 - 카탈로그: 이미지 라벨
io.geo-mlops.catalog.v1, 또는catalog.yaml(위 형식), 또는hp_preset.yaml(아래 형식)과 모델 변형 목록·설명 -
mlflow models serve검증 통과 기록: 사용한 모델 이름·버전, 요청/응답 예시(로컬 검증) - 입력 데이터: 파일 종류, 라벨 형식(어노테이션 파일, CSV 컬럼, 파일 내부 속성), 표·시계열이면 컬럼 목록, dtype, 결측 처리, 샘플링 주기, 윈도우 길이
- train/val 분할 수행 주체(기본은 이미지)
- 추론 응답 JSON 구조와 판정 근거 표현
- 자원: 학습 1건의 CPU/GPU 수, 메모리, 예상 시간, 서빙 CPU/GPU 여부와 목표 응답 시간. GPU 없이 실행되지 않으면 카탈로그에
requires_gpu: true. - 학습을 시험할 수 있는 샘플 데이터셋
hp_preset.yaml 형식
모델 변형마다 마법사에 노출할 하이퍼파라미터를 {default, min, max, description} 으로 작성. 관리자가 편집 화면의 hp_preset.yaml 가져오기 로 지금 카탈로그 본문에 합침. 같은 모델은 하이퍼파라미터 표 전체가 바뀌고, 없는 모델은 새로 추가(태스크는 기존 첫 모델의 것을 사용하므로 저장 전에 확인).
# hp_preset.yaml: 모델 변형별 하이퍼파라미터
small-cnn:
epochs:
default: 20
min: 1
max: 500
description: 학습 epoch 수 (진행률 기준)
batch:
default: 64
min: 1
max: 1024
description: 배치 크기
lr:
default: 0.001
min: 0.000001
max: 1.0
description: 학습률
large-cnn:
epochs:
default: 50
min: 1
max: 500
description: 학습 epoch 수
- 타입은
default에서 추정(정수, 실수, 참거짓, 문자열). 범위가 소수면 실수로 처리. - 키 규칙과 환경 변수 이름은 위 카탈로그 형식과 같음.
미리 지정된 실험(프리셋)
자주 사용하는 설정 조합은 "바로 진행" 프리셋으로 정의. 프리셋은 마법사 1~10단계 전체를 채우고 검토 단계로 건너뜀. 형식은 제출 설정과 동일.
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: "" # 비우면 프레임워크 기본값
serving: { runtime: cpu }