Hydra의 @hydra.main(config_path=CONFIG_PATH, config_name=CONFIG_NAME) 데코레이터는 프로그램의 진입점을 구성할 때 설정(configuration)을 자동으로 로드하고 주입하는 역할을 합니다. 이 데코레이터가 구체적으로 어떻게 동작하는지 단계별로 자세히 설명하면 다음과 같습니다.
config_path:
CONFIG_PATH가 "config/simulation"으로 설정되어 있다면, Hydra는 이 디렉토리 안에서 설정 파일을 찾습니다.config_name:
.yaml은 생략 가능)을 지정합니다. CONFIG_NAME이 "default_simulation"이라면, Hydra는 "default_simulation.yaml" 파일을 찾습니다.Hydra는 config_path를 기준으로 설정 파일들을 검색합니다.
~/PycharmProjects/Diffusion-Planner일 때, config/simulation 폴더가 프로젝트 내에 존재한다면, Hydra는~/PycharmProjects/Diffusion-Planner/config/simulation/default_simulation.yaml 파일을 찾게 됩니다.구성 파일의 조합 및 상속:
defaults 리스트를 통해 다른 구성 파일들을 참조(구성 요소 합성)할 수 있습니다.명령줄 오버라이드:
+simulation=closed_loop 같은 오버라이드를 포함하면, 이 값이 최종 설정에 병합됩니다."default_simulation.yaml" 파일을 읽어옵니다.config_path=CONFIG_PATH는 설정 파일들이 있는 폴더를 지정하고, config_name=CONFIG_NAME는 불러올 기본 YAML 파일의 이름을 지정합니다."config/simulation"이고 CONFIG_NAME이 "default_simulation"이면, Hydra는~/PycharmProjects/Diffusion-Planner/config/simulation/default_simulation.yaml 파일을 찾아서 DictConfig로 로드합니다.이러한 방식으로, Hydra는 복잡한 설정 관리 과정을 단순화하고, 실험 실행 전에 필요한 모든 설정을 자동으로 준비해줍니다.
초기화 (initialize):
hydra.initialize(config_path=...)를 사용하여 설정 파일들이 위치한 디렉토리를 지정구성 합성 (compose):
hydra.compose(config_name=..., overrides=[...])를 통해 기본 설정 파일을 로드하고, 오버라이드를 적용해 최종 구성(cfg)을 만듦오버라이드 문자열:
key=value 형식으로 설정 값을 직접 덮어쓸 수 있습니다.hydra.searchpath와 같이 특별한 키를 사용해 Hydra의 동작 방식을 조정할 수 있습니다.패키지 검색 경로 (pkg://):
pkg:// 접두사는 Python 패키지 내부에서 설정 파일을 찾도록 지정합니다.pkg://diffusion_planner.config는 diffusion_planner 패키지 내의 config 디렉토리를 의미합니다.이와 같이 Hydra는 설정 파일의 위치를 지정하고, 기본 설정을 로드한 후 오버라이드 옵션을 통해 동적으로 설정을 변경할 수 있도록 해줍니다. 이를 통해 복잡한 애플리케이션의 구성 관리를 유연하게 처리할 수 있습니다.
hydra.core.global_hydra.GlobalHydra.instance().clear() # reinitialize hydra if already initialized
GlobalHydra.instance()는 Hydra의 전역 인스턴스를 반환합니다..clear() 메서드는 이미 초기화된 상태를 지워줍니다.hydra.initialize(config_path=CONFIG_PATH)
CONFIG_PATH = '../nuplan-devkit/nuplan/planning/script/config/nuboard'cfg = hydra.compose(config_name=CONFIG_NAME, overrides=[
'scenario_builder=nuplan',
f'simulation_path={ml_planner_simulation_folder}',
'hydra.searchpath=[pkg://diffusion_planner.config.scenario_filter, pkg://diffusion_planner.config, pkg://nuplan.planning.script.config.common, pkg://nuplan.planning.script.experiments]',
'port_number=6599'
])
config_name:
CONFIG_NAME = 'default_nuboard'CONFIG_PATH 내에서 'default_nuboard.yaml' 또는 이와 유사한 기본 설정 파일을 찾아서 로드합니다.overrides:
오버라이드 리스트는 기본 설정 파일의 값을 덮어쓰거나 추가 설정을 할 때 사용됩니다.
'scenario_builder=nuplan'
scenario_builder 키를 nuplan으로 설정합니다.f'simulation_path={ml_planner_simulation_folder}'
simulation_path라는 설정 값을 nuBoard에서 사용할 시뮬레이션 결과 파일들의 경로 리스트로 지정합니다.ml_planner_simulation_folder라는 리스트를 문자열로 변환하여 전달합니다.'hydra.searchpath=[pkg://diffusion_planner.config.scenario_filter, pkg://diffusion_planner.config, pkg://nuplan.planning.script.config.common, pkg://nuplan.planning.script.experiments]'
pkg:// 접두사는 Python 패키지 내부에서 설정 파일을 찾도록 지시합니다.'port_number=6599'
결과:
위 오버라이드들은 기본 설정 파일(default_nuboard)에 정의된 값들을 변경하거나 추가하여 최종적인 구성 객체(cfg)를 만듭니다. 이 객체는 nuBoard 실행 시 모든 필요한 설정 정보를 담고 있게 됩니다.