[AI] Experiment Setting

JAsmine_log·2026년 2월 4일

Random seed^★

  • 가장 중요
import random, numpy as np, torch

def set_seed(seed):
    random.seed(seed)
    np.random.seed(seed)
    torch.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)

    torch.backends.cudnn.deterministic = True
    torch.backends.cudnn.benchmark = False
  • 고정해야 하는 것:
    • weight init
    • data shuffle
    • client sampling
    • augmentation

Dataset split 고정

  • 매번 새로 생성 ❌
random_split(dataset, [train, test])
generator = torch.Generator().manual_seed(seed)
random_split(dataset, [train, test], generator=generator)
  • split 결과를 파일로 저장
  • train.txt / test.txt 식으로 고정

DataLoader 설정

DataLoader(
    dataset,
    shuffle=True,
    worker_init_fn=seed_worker,
    generator=g
)
def seed_worker(worker_id):
    worker_seed = torch.initial_seed() % 2**32
    np.random.seed(worker_seed)
    random.seed(worker_seed)
  • num_workers > 0 이면 꼭 필요함

CUDA deterministic 모드

torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False

모델 초기화 방식 고정

model = Net()  # 내부에서 random init
  • ⭕ seed 먼저 설정하면,
set_seed(seed)
model = Net()

환경 고정

  • 예시
    OS: Ubuntu 22.04
    Python: 3.10
    PyTorch: 2.1.0
    CUDA: 12.1
    GPU: RTX 3090
pip freeze > requirements.txt

코드 버전 고정

git commit -m "exp alpha=1 seed=44"

실험 로그로 저장

  • config 저장
{
  "seed": 44,
  "alpha": 1,
  "rounds": 1000
}
  • argparse dump
json.dump(vars(args), f)
profile
Everyday Research & Development

0개의 댓글