Reproducibility checklist · updated 2026-06-15

재현성 체크리스트와 Artifact 추적

이 문서는 같은 실험을 다시 실행하거나, 팀원이 결과를 검증하거나, 논문 appendix를 만들 때 필요한 최소 재현 패키지와 artifact ledger 기준을 정의한다.

재현 가능하다는 말의 기준

재현 가능하다는 것은 “똑같은 숫자가 1자리까지 나온다”만 의미하지 않는다. 같은 코드, 같은 데이터, 같은 split, 같은 config, 같은 seed 정책으로 실행했을 때 결론이 바뀌지 않는 범위의 결과가 다시 나와야 한다.

현재 실험 기록 상태

52 metric runs W&B export와 local metrics.json 기준으로 보관된 전체 metric run 수.
40 main runs 8개 config x 5 folds로 공정 비교에 사용하는 main matrix.
12 screening runs 초기 탐색, legacy, 불완전 비교 결과. 최종 우열 판단에서는 분리한다.
runtime pending Android 실기기 ONNX 추론, latency, memory, artifact checksum은 별도 QA로 남아 있다.

Minimum Reproducibility Package

범주 필수 기록 상태 표기
Code GitHub repo, branch, commit hash, 변경 diff 또는 release tag. recorded / missing
Dataset dataset root, dataset fingerprint, archive checksum, class count, record count. recorded / pending
Split split file path, seed, folds, test ratio, leakage policy. recorded / invalid
Config config file path, model name, loss, unfreeze policy, optimizer, scheduler, batch, epochs. recorded / mismatch
Environment OS, GPU, CUDA, Python, PyTorch, open_clip/mobileclip package version. recorded / partial
Run output W&B run id, local run directory, metrics export, checkpoint path, logs. recorded / missing
Artifact best.pt, ONNX, INT8/NPU artifact, tokenizer/config, embedding index, checksum. recorded / not exported

Runbook Template

실제 경로와 config는 run마다 바뀐다. 아래는 문서에 남길 명령어 형태다.

# 1. repo root
cd /workspace/landmark-assis/landmark-assistant-model-ver2
source .venv/bin/activate
export PYTHONPATH=$PWD/src:${PYTHONPATH:-}
export DATA_ROOT=/workspace/landmark-assis/Dataset

# 2. dataset split
python -m landmark_candidate.split_data \
  --data-root "$DATA_ROOT" \
  --out "$DATA_ROOT/splits/kfold_seed20260513.json" \
  --seed 20260513 \
  --folds 5 \
  --test-ratio 0.15

# 3. train one fold
torchrun --nproc_per_node=4 -m landmark_candidate.train_multitask \
  --config configs/experiments/{config_name}.yaml \
  --data-root "$DATA_ROOT" \
  --split-file "$DATA_ROOT/splits/kfold_seed20260513.json" \
  --fold 0 \
  --output-dir runs/{run_name}_fold0

# 4. collect metrics
# W&B scalar export 또는 runs/{run_name}/metrics.json을 docs/experiments/paper registry에 반영한다.

Artifact Ledger Schema

모델 파일은 이름만으로 추적하지 않는다. 어떤 데이터와 config에서 나온 파일인지 함께 기록한다.

{
  "artifact_id": "mobileclip2_s4_partial_arcface_hardneg_fold0_best",
  "artifact_type": "pytorch_checkpoint | onnx | int8 | embedding_index",
  "source_run": "",
  "dataset_fingerprint": "",
  "split_manifest": "",
  "config_path": "",
  "git_commit": "",
  "file_path": "",
  "file_size_bytes": null,
  "sha256": "",
  "created_at": "",
  "validation": {
    "pytorch_metric_recorded": false,
    "onnx_parity_checked": false,
    "int8_parity_checked": false,
    "mobile_latency_checked": false
  },
  "notes": []
}

Artifact 검증 단계

  1. Checkpoint sanity: class count, embedding dim, config, state_dict load 가능 여부를 확인한다.
  2. PyTorch evaluation: validation/test metric과 run folder의 best epoch를 연결한다.
  3. ONNX export: 같은 입력 fixture에서 Top-3와 embedding cosine parity를 확인한다.
  4. INT8/mobile artifact: Top-3 일치성, 파일 크기, cold/warm latency, memory를 분리 기록한다.
  5. Demo regression: 이미지 검색, 자연어 검색, 상세보기, confidence policy, logging을 앱에서 확인한다.

허용 오차와 재검증 기준

항목 해석 기준 재검증 조건
5-fold 평균 차이 0.1-0.3%p 수준 차이는 std와 hard-case를 같이 본다. 결론이 바뀌는 수준이면 seed/fold 재실행 또는 paired error analysis를 수행한다.
ONNX parity Top-3가 같고 embedding cosine이 매우 높으면 통과 후보. Top-1이 바뀌거나 hard-case에서 rank가 뒤집히면 export 경로를 재검토한다.
INT8 parity 파일 크기/latency가 좋아도 accuracy collapse가 있으면 배포 후보가 아니다. cosine collapse, class mode collapse, Top-3 불일치가 크면 실패 실험으로 보존한다.
Latency 측정 기기, runtime, cold/warm 조건을 분리한다. 측정 환경이 다르면 같은 latency 표에서 직접 비교하지 않는다.

재현성 완료 체크리스트

아직 결론으로 쓰면 안 되는 것

현재 main matrix는 PyTorch 평가 기준의 공정 비교 근거다. 앱 최종 모델이라고 쓰려면 image/text ONNX binary 배치 후 Android runtime에서 session load, sample inference, score schema, latency, memory, text search regression을 다시 연결해야 한다. 따라서 문서에서는 모델 성능 결론앱 배포 검증 결론을 분리한다.