메인 콘텐츠로 건너뛰기
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 설정 객체(예: omegaconf.DictConfig)는 일반 Python dict 인스턴스가 아닙니다. wandb.Run.config는 읽기 전용 속성이므로, OmegaConf 설정 객체를 전달하려고 wandb.Run.config = ...로 할당하면 AttributeError 예외가 발생합니다. cfgOmegaConf.to_container()를 사용해 일반 dict로 변환한 다음 wandb.init(config=...)에 전달하세요(또는 wandb.Run.config.update(...)를 호출하세요).
import hydra
import omegaconf
import wandb


@hydra.main(version_base=None, config_path="configs/", config_name="defaults")
def run_experiment(cfg):
    cfg_dict = omegaconf.OmegaConf.to_container(
        cfg, resolve=True, throw_on_missing=True
    )
    # 선택 사항: entity/project 등 W&B 메타데이터가 run 설정에 포함되어 로깅되지 않도록 제외
    cfg_dict.pop("wandb", None)
    with wandb.init(
        entity=cfg.wandb.entity,
        project=cfg.wandb.project,
        config=cfg_dict,
    ) as run:
        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 리포트를 참조하세요.