CDP 규칙 가이드

YAML 설정 파일 규칙

프레임워크가 읽는 3개 파일 — 무엇을, 어디에, 어떻게 작성하는가

YAML 설정 규칙

3개 파일의 역할 분리와 작성 방법

project/
├── project.yaml                      ← 팀 공통 (프로젝트 전체)
└── {experiment_topic}_{algorithm}/   ← 내 실험 디렉토리
    └── config/
        ├── model.yaml                ← 실험 정의 (필수)
        └── user.yaml                 ← 실험 메모 (선택)
ℹ️ 3개 외에 yaml 파일을 추가하면 안 됩니다. 프레임워크는 이 3개만 인식합니다.

project.yaml — 팀 공통 설정

팀 내 모든 DS가 동일한 project.yaml을 공유합니다. 프로젝트 시작 시 팀 리드가 작성하고, DS 추가 시 workers_id만 업데이트합니다.

📋 복사해서 붙여넣기

# project/project.yaml
project_nm: ml_lab_test              # 프로젝트 식별자 (S3 경로, MLflow에 사용)
region: ap-northeast-2               # AWS 리전

workers_id:                          # 이 프로젝트에 참여하는 DS 목록
  - hjsong
  - jylee
  - mskim

environments:
  dev:
    bucket: gs-cdp-mllab-dev         # S3 버킷 (개발용)
    mlflow_url: https://dpa-mlflow.dp.gslook.com/
  prd:
    bucket: gs-cdp-mllab-prd         # S3 버킷 (운영용)
    mlflow_url: https://dpa-mlflow.dp.gslook.com/
규칙내용
workers_id 사전 등록 필수목록에 없는 worker_id로 실행 시 ValueError 즉시 발생
environments 키 선택dev 또는 prd 중 하나 (model.yaml의 env_nm이 결정)
project_nm 변경 금지S3 경로와 MLflow experiment_name에 사용되므로 중간 변경 금지
⚠️ 새 DS가 합류하면 첫 실험 실행 전에 workers_id에 추가해야 합니다. 먼저 추가하지 않으면 실행 즉시 에러가 납니다.

model.yaml — 실험 정의

내 실험 하나를 정의하는 파일입니다. 실험마다 DS가 직접 작성합니다.

📋 복사해서 붙여넣기

# project/{model_dir}/config/model.yaml
worker_id: hjsong                    # 본인 ID (project.yaml workers_id에 있어야 함)
experiment_topic: titanic_survival   # 실험 주제 (영문, 언더스코어)
algorithm: lightgbm                  # 사용 알고리즘

env_nm: dev                          # environments 키 선택: dev 또는 prd

data_sources:
  - name: train
    path: s3://gs-cdp-mllab-dev/titanic/data/train.csv
  - name: test
    path: s3://gs-cdp-mllab-dev/titanic/data/test.csv

algorithm_params:                    # 하이퍼파라미터 (자유롭게 추가 가능)
  n_estimators: 300
  learning_rate: 0.05
  max_depth: 6
  num_leaves: 31

task_type: classification            # classification / regression / ranking / clustering
target_col: Survived

디렉토리명 = experiment_topic + "_" + algorithm

model.yaml 내용:
  experiment_topic: titanic_survival
  algorithm: lightgbm

→ 디렉토리명 반드시: titanic_survival_lightgbm/
⚠️ 이 이름이 불일치하면 ValueError 발생합니다.

env_nm으로 환경 선택

env_nm: dev    # → project.yaml의 environments.dev.bucket 사용
env_nm: prd    # → project.yaml의 environments.prd.bucket 사용

user.yaml — 실험 메모 (선택)

📋 복사해서 붙여넣기

# project/{model_dir}/config/user.yaml
# 자유 형식 — 아무 필드나 추가 가능
experiment_note: "encoding v2 적용 버전. 이전 버전 대비 AUC +0.03"
reference_run: "20260520_143012_a3f9bc"
data_version: "2026-05-01 기준 스냅샷"
ℹ️ 인증 정보(AWS_PROFILE, EXECUTOR_ID)는 user.yaml이 아니라 project/.env에서 관리합니다.

ctx API로 YAML 필드 접근하기

📋 복사해서 붙여넣기

# project.yaml 필드 접근
project_nm = ctx.project['project_nm']
bucket     = ctx.project['environments'][ctx.project['env_nm']]['bucket']

# model.yaml 필드 접근
worker_id  = ctx.model['worker_id']
n_est      = ctx.model['algorithm_params']['n_estimators']
task_type  = ctx.model['task_type']

# user.yaml 필드 접근 (없으면 None)
note = ctx.user.get('experiment_note') if ctx.user else None

커스텀 필드 추가

# model.yaml에 추가
threshold: 0.45
feature_version: v3
# 노트북에서 사용
threshold = ctx.model['threshold']
⚠️ 예약어는 커스텀 키로 사용할 수 없습니다. 아래 목록 참조.

예약어 목록

# 실행 메타
run_id            test_dt           current_dt        dry_run
stage             run_name          run_name_base

# 경로
project_root      model_dir_name    runs_root         run_dir
input_dir         output_dir        artifacts_dir

# 시스템
logger

# MLflow
mlflow_experiment_name

# Git
commit_hash       commit_msg        branch_name

# 실행 정보
config_hashes     duration_seconds  keep_local_runs

DO / DON'T 요약

상황✅ DO❌ DON'T
새 실험 시작model.yaml 작성 후 디렉토리명 일치 확인디렉토리명과 yaml 따로 관리
새 DS 합류workers_id에 먼저 추가 후 실험추가 없이 실험 실행 → 에러
설정값 관리model.yaml에 필드 추가노트북 코드에 하드코딩
실험 메모user.yaml에 자유 기록새 yaml 파일 추가
인증 정보project/.env 관리user.yaml 또는 model.yaml에 기재
예약어 키다른 이름 사용run_id, test_dt 등 예약어 사용