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

메트릭 추적

wandb.init()wandb.Run.log()을 사용하여 평소처럼 메트릭을 추적합니다. 여기서 사용하는 wandb.entitywandb.project는 Hydra 구성 파일에서 정의됩니다.
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의 Config를 그대로 wandb.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() 호출에 settings 매개변수를 하나 더 추가하여 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}
스윕을 실행하세요:
wandb sweep sweep.yaml
W&B는 프로젝트 내에 스윕을 자동으로 생성하고, 스윕을 실행하려는 각 머신에서 실행할 wandb agent 명령을 반환합니다.

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

Hydra는 명령어 앞에 +를 붙여, 기본 설정 파일에 없는 추가 매개변수를 명령줄로 전달하는 것을 지원합니다. 예를 들어, 다음과 같이 호출하면 원하는 값을 가진 추가 매개변수를 전달할 수 있습니다:
$ python program.py +experiment=some_experiment
Hydra Experiments를 설정할 때와 같이 이러한 + 구성에 Sweep을 적용할 수는 없습니다. 이를 우회하려면 실험 파라미터의 기본값을 빈 파일로 설정한 뒤, 각 호출 시 W&B Sweep을 사용해 그 빈 설정을 덮어쓰면 됩니다. 자세한 내용은 이 W&B Report를 참고하세요.