Documents
지인의 추천으로 알게 된 Hydra. argparse 대신 사용하기 좋다 하니 사용해보도록 하자.
pip install hydra-core --upgrade
를 입력해 설치한다. 무척 금방 된다.
우선 docs에 있는 코드를 그대로 따라해보도록 하자.
import hydra
from omegaconf import DictConfig, OmegaConf
@hydra.main(config_path="conf", config_name="config")
def my_app(cfg : DictConfig) -> None:
print(OmegaConf.to_yaml(cfg))
if __name__ == "__main__":
my_app()
만들었다.
my_app에 달린 decorator는 어떤 폴더에(config_path
), 어떤 이름으로(config_name
) config.yaml
파일을 만들었는지 잡아주는 코드다.
이 말을 잘 생각해보면, 우리는 .py 파일과 같은 레벨에 conf/config.yaml
파일을 만들어야 함을 알 수 있다.
우선, conf
폴더 안에 config.yaml
파일을 만들어 보도록 하자.
그렇다면 아래와 같은 구조를 띄게 될 것이다.
.
├── conf
│ └── config.yaml
└── main.py
우선은 config.yaml
은 비워두도록 하자.
(blabla) teang1995@YongTaekui-MacBookAir blabla % python main.py
{}
와 같이 출력되는 것을 확인할 수 있다.
왜냐면 현재 config.yaml
파일이 비어있으니까!
typing에서 Dict라고 적어준 것처럼 config.yaml
파일은 dictionary 형태로 관리된다.
우선 아래 내용을 따라 쳐보자. 물론 아래의 형태만 맞춘다면 다르게 써도 무방하다.
# this is content for config.yaml
teang1995:
name: ytlim
age: 28
height: 188
weight: secret
이를 저장한 뒤, 다시 main.py
를 실행해보면..
(blabla) teang1995@YongTaekui-MacBookAir blabla % python main.py
teang1995:
name: ytlim
age: 28
height: 188
weight: secret
와 같이 출력되는 것을 알 수 있다.
위의 my_app
함수 내용을 아래와 같이 바꿔보자.
def my_app(cfg: DictConfig) -> None:
print(cfg)
print(type(cfg))
그렇다면
(blabla) teang1995@YongTaekui-MacBookAir blabla % python main.py
{'teang1995': {'name': 'ytlim', 'age': 28, 'height': 188, 'weight': 'secret'}}
<class 'omegaconf.dictconfig.DictConfig'>
와 같이 결과가 출력되는데, 출력된 cfg
가 꼭 dict
처럼 생겼다. 무언가 해보고 싶은 게 생겼으니 my_app
함수를 아래와 같이 바꿔주자.
def my_app(cfg: DictConfig) -> None:
print(cfg)
print(type(cfg))
print(cfg['teang1995'])
그러면
(blabla) teang1995@YongTaekui-MacBookAir blabla % python main.py
{'teang1995': {'name': 'ytlim', 'age': 28, 'height': 188, 'weight': 'secret'}}
<class 'omegaconf.dictconfig.DictConfig'>
{'name': 'ytlim', 'age': 28, 'height': 188, 'weight': 'secret'}
와 같이 출력되는 것을 볼 수 있다.
아하 그렇다면?
my_app
함수를 다시 한 번 아래와 같이 바꿔주자.
def my_app(cfg: DictConfig) -> None:
profile = cfg['teang1995']
name = profile['name']
age = profile['age']
height = profile['height']
weight = profile['weight']
print(name, age, height, weight)
그러면
(blabla) teang1995@YongTaekui-MacBookAir blabla % python main.py
ytlim 28 188 secret
처럼 출력되는 것을 확인할 수 있다.
이렇게 하면 hydra의 아주 기본적인 사용법을 익힌 셈인데.. 이를 돌리다 보면 경로에 outputs
라는 폴더가 생성되어있을 것이다.
이를 다루는 법은 다음 포스팅에 적도록 하겠다.
[ Python ] argparse 대신에 Hydra를 사용해보자 - 2 ( config groups ) (0) | 2022.02.20 |
---|
댓글 영역