metrics.json 기준으로 보관된 전체 metric run 수.
Reproducibility checklist · updated 2026-06-15
재현성 체크리스트와 Artifact 추적
이 문서는 같은 실험을 다시 실행하거나, 팀원이 결과를 검증하거나, 논문 appendix를 만들 때 필요한 최소 재현 패키지와 artifact ledger 기준을 정의한다.
재현 가능하다는 말의 기준
재현 가능하다는 것은 “똑같은 숫자가 1자리까지 나온다”만 의미하지 않는다. 같은 코드, 같은 데이터, 같은 split, 같은 config, 같은 seed 정책으로 실행했을 때 결론이 바뀌지 않는 범위의 결과가 다시 나와야 한다.
현재 실험 기록 상태
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 검증 단계
- Checkpoint sanity: class count, embedding dim, config, state_dict load 가능 여부를 확인한다.
- PyTorch evaluation: validation/test metric과 run folder의 best epoch를 연결한다.
- ONNX export: 같은 입력 fixture에서 Top-3와 embedding cosine parity를 확인한다.
- INT8/mobile artifact: Top-3 일치성, 파일 크기, cold/warm latency, memory를 분리 기록한다.
- 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 표에서 직접 비교하지 않는다. |
재현성 완료 체크리스트
- code commit hash가 기록되어 있다.
- dataset fingerprint와 split manifest가 기록되어 있다.
- config와 실제 run name이 일치한다.
- full/partial/LoRA 이름이 실제 trainable policy와 일치한다.
- W&B run id와 local run folder가 연결되어 있다.
- metrics export 원본이 보관되어 있다.
- checkpoint와 artifact checksum이 기록되어 있다.
- 결과표에 mean/std와 fold별 값이 함께 있다.
- 실패/제외 실험이 삭제되지 않고 사유가 기록되어 있다.
- 최종 모델 선택 전 ONNX/INT8/mobile runtime 검증 계획이 있다.
아직 결론으로 쓰면 안 되는 것
현재 main matrix는 PyTorch 평가 기준의 공정 비교 근거다. 앱 최종 모델이라고 쓰려면 image/text ONNX binary 배치 후 Android runtime에서 session load, sample inference, score schema, latency, memory, text search regression을 다시 연결해야 한다. 따라서 문서에서는 모델 성능 결론과 앱 배포 검증 결론을 분리한다.