메인 콘텐츠로 건너뛰기
Hydra는 연구 및 기타 복잡한 애플리케이션 개발을 간소화하는 오픈 소스 Python 프레임워크입니다. 핵심 기능은 조합을 통해 계층적 설정을 동적으로 생성하고, 설정 파일과 명령줄로 이를 재정의할 수 있다는 점입니다.
Hydra를 계속 설정 관리에 사용하면서도 W&B의 강력한 기능을 활용할 수 있습니다.

메트릭 추적

평소처럼 wandb.init()wandb.Run.log()를 사용해 메트릭을 추적합니다. 여기서 wandb.entitywandb.projecthydra 설정 파일에서 정의합니다.
import wandb


@hydra.main(config_path="configs/", config_name="defaults")
def run_experiment(cfg):

    with wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project) as run:
      run.log({"loss": loss})

하이퍼파라미터 추적

Hydra는 설정 딕셔너리와 상호작용하는 기본 방식으로 omegaconf를 사용합니다. OmegaConf의 딕셔너리는 기본 dict의 하위 클래스가 아니므로 Hydra의 Configwandb.Run.config에 직접 전달하면 대시보드에서 예상치 못한 결과가 발생합니다. wandb.Run.config에 전달하기 전에 omegaconf.DictConfig를 기본 dict 유형으로 변환해야 합니다.
@hydra.main(config_path="configs/", config_name="defaults")
def run_experiment(cfg):
  with wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project) as run:
    run.config = omegaconf.OmegaConf.to_container(
        cfg, resolve=True, throw_on_missing=True
    )
    run = wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project)
    run.log({"loss": loss})
    model = Model(**run.config.model.configs)

멀티프로세싱 문제 해결

프로세스 시작 시 멈춘다면 이 알려진 문제 때문일 수 있습니다. 이를 해결하려면 다음과 같이 wandb.init()에 설정 매개변수를 추가해 wandb의 멀티프로세싱 프로토콜을 변경해 보세요.
wandb.init(settings=wandb.Settings(start_method="thread"))
또는 셸에서 전역 환경 변수를 설정하는 방법도 있습니다:
$ export WANDB_START_METHOD=thread

하이퍼파라미터 최적화

W&B Sweeps는 매우 뛰어난 확장성을 갖춘 하이퍼파라미터 검색 플랫폼으로, 최소한의 코드만으로 W&B 실험에 대한 유용한 인사이트와 시각화를 제공합니다. Sweeps는 별도의 코드 작성 없이 Hydra 프로젝트와 원활하게 통합됩니다. 필요한 것은 평소처럼 스윕할 다양한 매개변수를 설명하는 설정 파일뿐입니다. 간단한 sweep.yaml 파일 예시는 다음과 같습니다:
program: main.py
method: bayes
metric:
  goal: maximize
  name: test/accuracy
parameters:
  dataset:
    values: [mnist, cifar10]

command:
  - ${env}
  - python
  - ${program}
  - ${args_no_hyphens}
sweep를 실행합니다:
wandb sweep sweep.yaml
W&B는 프로젝트 안에 sweep을 자동으로 생성하고, sweep을 실행할 각 머신에서 실행할 wandb agent 명령어를 반환합니다.

Hydra 기본값에 없는 매개변수 전달하기

Hydra는 기본 설정 파일에 없는 추가 매개변수도 명령줄을 통해 전달할 수 있으며, 이를 위해 명령 앞에 +를 붙입니다. 예를 들어, 다음과 같이 호출하면 값을 지정한 추가 매개변수를 간단히 전달할 수 있습니다:
$ python program.py +experiment=some_experiment
Hydra Experiments를 구성할 때처럼 이러한 + 설정에 대해 sweep을 수행할 수는 없습니다. 이를 우회하려면 experiment 파라미터를 기본 빈 파일로 초기화한 다음, 각 호출 시 W&B Sweep을 사용해 해당 빈 설정을 덮어쓰면 됩니다. 자세한 내용은 이 W&B 리포트를 참조하세요.