[AI] 실험 Cache

JAsmine_log·2026년 2월 7일

실험 Cache

같은 계산을 중간 결과를 저장해 두고, 같은 계산을 반복하지 않는다.

머신러닝 실험에서는 다음 항목에서 사용될 수 있고, 이런것들이 매번 반복되면 매우 비효율적이다.

  • 데이터 로딩
  • 임베딩 계산
  • cross-validation 결과
  • hyperparameter 평가 결과

중요성

다음의 문제 상황에 cache를 적용 해 볼 수 있다.

cache 없는 경우:

  • 파라미터 하나 바꿀 때마다
  • 임베딩 다시 계산
  • retrieval 다시 수행
  • Cross Validation 다시 수행

이로 인해서, 실험 하나 돌리는 데 몇 시간~며칠이 소요된다.

또한,

  • 실험 재현 어려움
  • 튜닝/ablation 불가능

cache의 기본 철학

“변하지 않는 것은 무조건 저장하고 재사용한다.”
일반적으로:

  • 하이퍼파라미터에 따라 바뀌는 것 → cache ❌
  • 데이터/모델/설정이 같으면 결과 동일 → cache ⭕

Cache 적용

(1) 데이터 split

  • train / val / test 인덱스
  • Stratified CV fold 인덱스
splits/
 ├── train_idx.npy
 ├── val_idx.npy
 └── cv_folds.pkl

(2) 전처리 결과

  • 토큰화 결과
  • 정규화된 feature
  • 필터링된 데이터

(3) 임베딩 / 특징 벡터 (가장 중요)

  • encoder가 같으면 항상 동일
  • 계산 비용 큼
embeddings/
 ├── encoderA.npy
 ├── encoderB.npy

(4) hyperparameter 실험 결과

  • 각 설정 → validation score
  • grid / random search 결과
tuning_results.csv

Cache 설계 핵심 패턴

  • Key = “결과에 영향을 주는 설정” 이기 때문에, Cache 파일 이름이나 key에는 반드시 포함하고, 이름만으로 뭘로 만든 건지 알 수 있어야 함
  • dataset : 이름
  • split : seed
  • encoder: 이름
  • 주요 : hyperparameter

예:

cache/
 ├── embed_pubhealth_encoder=bge_base.npy
 ├── retr_pubhealth_encoder=bge_base_top100.pkl

가장 단순한 cache 코드 패턴

이 패턴으로 실험 속도 체감이 완전 달라진 것을 알 수 있음

import os
import pickle

def load_or_compute(path, compute_fn):
    if os.path.exists(path):
        with open(path, "rb") as f:
            return pickle.load(f)
    else:
        result = compute_fn()
        with open(path, "wb") as f:
            pickle.dump(result, f)
        return result


#사용 예:

embeddings = load_or_compute(
    "cache/embeddings_encoderA.pkl",
    lambda: compute_embeddings(data, encoderA)
)

Hyperparameter Tuning + Cache 조합

튜닝할 때는:
중간 결과를 cache, 점수 계산만 반복
튜닝 비용이 N배 → 1배 + α

예:

  • 임베딩: cache
  • retrieval: cache
  • scoring만 반복
embedding (1회)
→ retrieval (1회)
→ scoring (N회)

Cache vs 재현성

(논문 관점)

Cache를 잘 쓰면:

  • 동일 실험 완전 재현 가능
  • seed 고정 가능
  • 실험 로그 명확

주의사항 ⚠️

하면 안되는 것

  • 설정을 바꾸었는데 cache 재사용
  • 파일 이름에 seed/encoder 안 넣음
  • cache 무효화 기준 없음

해결 방안:

  • 설정 hash 사용
  • config 기반 key 생성
profile
Everyday Research & Development

0개의 댓글