Hydra는 연구용 애플리케이션을 비롯한 복잡한 애플리케이션의 개발을 간소화하는 오픈 소스 Python 프레임워크입니다. 핵심 기능은 여러 설정을 조합(composition)하여 계층적 설정을 동적으로 생성하고, 설정 파일과 명령줄에서 이를 재정의할 수 있다는 점입니다.이 페이지에서는 Hydra 기반 설정 관리와 W&B 실험 추적을 함께 사용하는 방법을 설명합니다. 이를 통해 Hydra의 조합 가능한 설정은 그대로 유지하면서 W&B의 시각화, 하이퍼파라미터 최적화, run 비교 기능을 활용할 수 있습니다. 다음 섹션에서는 메트릭 추적, Hydra 설정의 하이퍼파라미터 로깅, 멀티프로세싱 문제 해결, W&B Sweeps를 사용한 하이퍼파라미터 최적화를 다룹니다.
메트릭 추적
Hydra로 설정한 run에서 W&B로 메트릭을 보내려면 평소처럼wandb.init()과 wandb.Run.log()를 사용하세요. 다음 예시에서는 Hydra 설정 파일에 wandb.entity와 wandb.project를 정의하여 하나의 설정으로 Hydra와 W&B를 함께 제어합니다.
하이퍼파라미터 추적
Hydra의 설정을 W&B에 로깅하면 모든 하이퍼파라미터를 run의 메트릭과 함께 확인할 수 있어 실험을 더 쉽게 비교하고 재현할 수 있습니다. Hydra는 설정 딕셔너리를 처리하는 기본 인터페이스로 OmegaConf를 사용합니다. OmegaConf 설정 객체(예:omegaconf.DictConfig)는 일반 Python dict 인스턴스가 아닙니다.
wandb.Run.config는 읽기 전용 속성이므로, OmegaConf 설정 객체를 전달하려고 하면 wandb.Run.config = ...에서 AttributeError가 발생합니다.
OmegaConf.to_container()로 cfg를 일반 dict로 변환한 다음 wandb.init(config=...)에 전달하세요(또는 wandb.Run.config.update(...)를 호출하세요).
멀티프로세싱 문제 해결
프로세스가 시작된 후 응답하지 않는다면 분산 트레이닝에서 알려진 멀티프로세싱 문제가 원인일 수 있습니다. 이 문제를 해결하려면 W&B의 멀티프로세싱 프로토콜을 변경하세요. 다음과 같이wandb.init()에 settings 매개변수를 추가로 지정하거나:
하이퍼파라미터 최적화
W&B Sweeps는 최소한의 코드만으로 W&B 실험에 대한 인사이트와 시각화를 제공하는 하이퍼파라미터 검색 플랫폼입니다. Sweeps는 코드를 변경하지 않고도 Hydra 프로젝트와 통합됩니다. 스윕할 매개변수를 정의한 설정 파일만 있으면 됩니다. 다음은sweep.yaml 파일의 예시입니다.
wandb agent 명령을 반환합니다. 스윕을 실행할 각 머신에서 이 명령을 실행하세요.
Hydra 기본값에 없는 매개변수 전달하기
Hydra에서는 명령 앞에+를 붙여 기본 설정 파일에 없는 추가 매개변수를 명령줄로 전달할 수 있습니다. 예를 들어 다음과 같이 호출하면 추가 매개변수에 원하는 값을 지정해 전달할 수 있습니다.
+ 설정에 대해 스윕을 실행할 수 없습니다. 이 문제를 해결하려면 experiment 매개변수를 비어 있는 기본 파일로 초기화한 다음, W&B Sweep을 사용해 호출할 때마다 해당 빈 설정을 재정의하세요. 자세한 내용은 W&B 리포트 Configuring W&B Projects with Hydra를 참조하세요.