GEO_* 환경 변수와 /geo/… 경로는 플랫폼이 실제로 넣어 주는 이름 그대로입니다.

디렉터리

/geo
├── dataset/            # GEO_DATA_DIR: 데이터셋 원본, 읽기 전용. 학습 시작 전에 전부 놓여 있다
│   ├── manifest.json   # 파일 목록 · 종류 · 메타
│   ├── images/         # kind 별 하위 디렉터리 (image)
│   ├── annotations/    # (annotation)
│   ├── timeseries/     # (timeseries)
│   ├── tabular/        # (tabular)
│   ├── pointclouds/    # (pointcloud)
│   └── other/          # 그 밖
├── work/               # GEO_WORK_DIR: 쓰기 가능한 작업 공간. 실행이 끝나면 사라진다
└── experiment.json     # GEO_CONFIG: 실험 설정 스냅샷 (고급)
경로환경 변수내용
/geo/datasetGEO_DATA_DIR데이터셋 파일 원본(읽기 전용). 여러 실행이 같은 캐시를 다시 쓸 수 있으니 여기에 쓰지 마세요
/geo/workGEO_WORK_DIR체크포인트 · 변환한 라벨 · 중간 산출물. 파드와 함께 사라집니다
/geo/experiment.jsonGEO_CONFIG설정 전체 스냅샷. 환경 변수로 부족할 때만 읽으면 됩니다

manifest.json

GEO_DATA_DIR 바로 아래에 있습니다. pathGEO_DATA_DIR 기준 상대 경로이므로 그대로 이어 붙여 엽니다.

{
  "dataset": { "id": "ds-…", "name": "…" },
  "files": [
    { "path": "images/site_008.jpg", "kind": "image",
      "meta": { "width": 640, "height": 480, "format": "JPEG",
                "label_files": [{ "filename": "site_008.json", "format": "labelme" }] } },
    { "path": "annotations/site_008.json", "kind": "annotation",
      "meta": { "format": "labelme", "annotation_count": 2, "match_rate": 1.0 } },
    { "path": "tabular/features.csv", "kind": "tabular",
      "meta": { "row_count": 300, "columns": [{ "name": "label", "dtype": "object" }] } }
  ]
}
  • kindimage · annotation · timeseries · tabular · pointcloud 중 하나이고, 놓이는 하위 디렉터리와 짝을 이룹니다.
  • 업로드 때 zip 안의 폴더 구조는 평평해집니다. 같은 이름이 겹치면 뒤쪽에 -2 가 붙습니다. 클래스별 하위 폴더 같은 구조에 의존하지 마세요.
  • meta 는 플랫폼 검증기가 채운 값입니다(이미지 크기와 짝지어진 라벨 파일, 어노테이션 형식, 표의 행 수·컬럼 등). 예시는 줄인 것이고 실제로는 키가 더 있을 수 있습니다.
  • 라벨이 오는 모양은 종류마다 다릅니다. 이미지 계열은 어노테이션 파일(COCO JSON · LabelMe JSON · VOC XML)로, tabular 은 CSV 안의 컬럼으로, 포인트클라우드는 PLY 파일 안의 정수 속성으로 옵니다.
  • timeseriestabular 은 같은 .csv/.parquet 을 씁니다. 데이터셋을 만들 때 고른 모달리티가 둘을 가릅니다. tabularmeta 에는 time_column 키가 아예 없습니다.
  • train/val 분할은 트레이너가 합니다. 플랫폼은 파일을 나눠 주지 않고, experiment.jsonsplit 에 비율과 시드만 적어 줍니다.

환경 변수

변수내용
GEO_DATA_DIR데이터셋 디렉터리(/geo/dataset)
GEO_WORK_DIR작업 공간(/geo/work)
GEO_CONFIG실험 설정 파일(/geo/experiment.json)
GEO_PARAM_TASK태스크(예: object_detection)
GEO_PARAM_MODEL모델 변형(예: yolo26n)
GEO_PARAM_DATASET_ID데이터셋 ID
GEO_PARAM_DEVICE0 또는 cpu. 파드 안에서 GPU 는 언제나 0번부터 보입니다
GEO_HP_<이름>마법사에서 고른 하이퍼파라미터(예: GEO_HP_EPOCHS=50, GEO_HP_LR=0.001)
CUDA_VISIBLE_DEVICESGPU 마스킹. GPU 가 없으면 빈 값
MLFLOW_TRACKING_URI플랫폼 MLflow 주소
MLFLOW_TRACKING_TOKEN실행마다 발급되고 끝나면 회수되는 토큰. MLflow 클라이언트가 알아서 읽습니다
MLFLOW_EXPERIMENT_NAME플랫폼이 미리 만든 실험 이름. 이 값을 그대로 씁니다
MLFLOW_RUN_ID플랫폼이 미리 만든 run. mlflow.start_run() 이 이 run 에 붙습니다
  • GEO_HP_* 이름 규칙: 하이퍼파라미터 키는 ^[a-z][a-z0-9_]*$ 만 허용하고, 환경 변수 이름은 그 키를 그대로 대문자로 바꾼 것입니다(lrGEO_HP_LR). 중첩 구조나 리스트는 환경 변수로 표현할 수 없어 experiment.json 에만 들어갑니다.
  • 값은 모두 문자열입니다. 기본값의 타입으로 바꿔 읽으세요(예제의 hyperparameter() 함수 참고).
  • 들어오지 않는 것: 오브젝트 스토리지 주소·키. 데이터는 플랫폼이 미리 받아 두므로 학습 컨테이너에는 스토리지 자격 증명이 가지 않습니다.
  • PYTHONUNBUFFERED 는 플랫폼이 넣지 않습니다. 로그를 실시간으로 보려면 Dockerfile 에 ENV PYTHONUNBUFFERED=1 을 넣으세요.

experiment.json (고급)

주요 값은 모두 환경 변수로도 오므로 대부분의 이미지는 이 파일을 읽지 않아도 됩니다. classes 목록, split 비율, 중첩된 하이퍼파라미터가 필요할 때만 읽으세요. 자격 증명은 이 파일에 없으므로 로그로 남겨도 안전합니다.

{
  "experiment_id": "7abfb12e3a8d…",
  "name": "mnist-external-smoke-3",
  "tenant": "DEMO",
  "created_at": "2026-09-21T06:59:47Z",

  "task": "object_detection",
  "framework": "yolo",
  "model": "yolo26n",
  "classes": ["head", "helmet"],

  "split": { "method": "random", "train_percent": 80, "seed": 0 },
  "hyperparameters": { "epochs": 2 },

  "device": "cpu",
  "gpu": 0,

  "evaluation": { "benchmark": true, "speed_test": false },
  "export": { "onnx": false, "tensorrt": false },
  "serving": { "runtime": "cpu" },
  "register": { "enabled": false, "model_name": "" },
  "pretrained": { "source": "catalog" },

  "dataset": { "id": "ds-…", "name": "…", "file_count": 16,
               "path": "/geo/dataset", "manifest": "/geo/dataset/manifest.json" },
  "paths": { "data_dir": "/geo/dataset", "work_dir": "/geo/work" },
  "mlflow": { "experiment_name": "mnist-external-smoke-3", "run_id": "…" }
}
묶음
experiment_id · name · tenant · created_at이 실행이 무엇인지. name = MLflow 실험 이름
task · framework · model · classes무엇을 학습하는지. classes이번 실험에 고른 클래스만
split분할 지시. 분할 자체는 트레이너가 합니다
hyperparametersGEO_HP_* 와 같은 값의 파싱된 객체
device · gpu계산 자원
evaluation · export · serving학습 뒤 요청 사항. 지원하지 않으면 무시해도 됩니다
register등록 여부와 모델 이름. 등록 자체는 플랫폼이 합니다
pretrained시작 가중치의 출처. 사전학습 가중치 참고
dataset · paths · mlflow위치와 run 확인용(참고)

2026-09-21 기준 플랫폼에 맞춰 작성했습니다.

© Geo-MLOps