본문 바로가기
일기

오늘 뭐했나-10/28, 10/31

by soypablo 2022. 10. 31.

개요

실험을 하기위해, victory-resque의 pytorch-template를 사용해왔다.

pytorch-lightning을 wandb를 배우고, 이를 pytorch-template에 이식을 하는 작업을 수행했다.

issue1: wandb의 json config인식 불가 문제!

그런데, pytorch-template의  json config file이 wandb 프로젝트의 config에 인식이 안되는 issue가 있었다.

(wandb는 json 대신 yaml을 config file로 사용하는 것을 권장함.)

wandb의 프로젝트 관리 용이성과, sweep를 통한 hyperparameter최적화를 이용하기 위해서는 템플릿 수정이 불가피했다.

해결

yaml기반의 config관리로 템플릿을 수정했다.(NLP멘토 오수지님의 yaml-base를 참고하였다.)

 

issue2: wandb sweep은 nested config사용이 불가능함!

yaml기반으로 하는 config파일을 제작했는데, 문제는 wandb sweep이 nested config를 지원하지 않는다는 점이었다.

wandb sweep는 단순하게 sweep_config.yaml 에 있는 파라미터를 cli argument로 전달하여, 반복적으로 실험을 시작하기 때문에, 1차원 config의 값을 수정하는 것이 기본적으로 지원하는 wandb sweep의 한계였다.

nested -> 파이썬으로 치면, 객체안에 객체가 중첩되어있는 구조라고 이해했다.

ex: mydict = {a: {c: {}, d:1}, b:{}}(클래스안에 클래스가 중첩되어있는 구조도 동일할 것.)

해결

먼저 base-config파일을 호출하고, 그안의 attribute를 load한 뒤, sweep yaml을 호출해 그 base-config의 attribute를 수정하는 방식으로 구성했다.

객체의 nested한 값을 수정하기 위해 재귀함수 베이스의 setattr을 사용했다.참고내용:https://stackoverflow.com/questions/31174295/getattr-and-setattr-on-nested-subobjects-chained-properties

 

getattr and setattr on nested subobjects / chained properties?

I have an object (Person) that has multiple subobjects (Pet, Residence) as properties. I want to be able to dynamically set the properties of these subobjects like so: class Person(object): def

stackoverflow.com

 

issue3: hyper parameter config의 범용성을 넓힐 필요가 있다!

기본 베이스라인의 코드는 model_name, batch_size, max_epoch, shuffle, lr등의 hyper parameter을 cli argument로 제공하는데, 나는 그 외에 변수가 될 수 있는 loss함수, optimizer, lr scheduler, metric 등을 base_config.yaml 파일을 통해 관리하고 싶었다.(기존의 베이스라인에서는 loss, optimizer등이 하드코딩으로 되어있었음)

해결

config에 loss, optimizer, lr_scheduler, metric등을 저장해 놓고, 모듈에 해당 함수가 존재하면 선언했다.(getattr사용)

참고:https://stackoverflow.com/questions/3061/calling-a-function-of-a-module-by-using-its-name-a-string

 

Calling a function of a module by using its name (a string)

How do I call a function, using a string with the function's name? For example: import foo func_name = "bar" call(foo, func_name) # calls foo.bar()

stackoverflow.com

issue4: wandb project생성 위치 관련 이슈!

train.py를 실행하면, 팀프로젝트에 wandb가 생겨야 하는데, 내 개인계정에 프로젝트가 생성되는 issue가 있었다.

해결

터미널에서 wandb init을 하는 것으로 저장할 프로젝트 위치를 설정했다.

 

추가로 한것: 잘못예측한 데이터순으로 csv파일을 생성하여 확인해 볼 수 있게 하는 코드 작성.

'일기' 카테고리의 다른 글

근데 이제 뭐함?: 부스트캠프4기가 끝나고 한달 뒤 후기 1편  (0) 2023.03.23
어제 오늘 뭐했나. 11/4  (0) 2022.11.04
오늘 뭐했나 11/1  (0) 2022.11.02
10_4  (0) 2022.10.04