본문 바로가기
Backend MLOps/MyTemplate

[DLTemplate] #2 모듈의 패키지화

by SteadyForDeep 2021. 9. 21.
반응형

#1 에서 main이 아닌 브랜치에서 main이 아닌 브랜치로 push 하였으므로

merge를 요청하는 pull request가 와 있다. 

간단하게 메모를 남기고 TODO까지 적어준다.

그리고 Merge해주면

merge가 정상적으로 되었고 브랜치를 삭제할 것이냐는 질문이 나온다.

이제 설계한 실험단위가 종료되었으므로 브랜치를 삭제한다.

브랜치가 정상적으로 삭제 되었다.

 

항상 코딩을 진행할 때는

 

1. 실험 단위 설계

2. 브랜치 생성

3. 실험 단위 진행

4. 단위 종료

5. push

6. pull request 작성

7. merge 후 브랜치 삭제

 

위의 과정을 거쳐야 하는 것을 잊지 말아야한다.

나도 자꾸 까먹는데 일단 하루에 하나씩은 꼭 브랜치를 만들어서 깃을 십분 활용하도록 하자.

브랜치를 즉각 확인할 수 있는 z 쉘을 이용하는 것도 좋은 방법이다.

아직 기능을 적용하지는 않았지만 조만간 시간을 내서 꼭 zsh를 설치해야겠다.

 

로컬에서는 아직 merge가 진행되지 않은 상태다.

따라서 main으로 돌아갈 경우 모든 자료가 지워진다.

보이는 것 처럼 모든 파일이 삭제됨으로 뜨고 탐색기도 깔끔하게 지워진 것을 볼 수 있다.

이제 아까 만들었던 simple_training 브랜치를 로컬의 main에 merge 하자.

밑으로 아까 내가 만들었던 파일들이 쭉 따라 오면서 merge되는 것을 볼 수 있다.

깃은 아직도 낯설고 신기하다.

이제 다 쓴 브랜치는 잘라내도 되지만 굳이 그렇게 하지는 않고 가져가도록 하자.

main 브랜치에서 pull을 한번 해서 origin과 버전을 서로 맞춰 준 후 이후의 실험을 진행하자.

 

이후에 할 작업은 패키지화 작업으로 이전 글에서 모듈화해두었던 py파일들을

좀더 세부적으로 나눠보도록 할 것이다.

 

sweep_config와 trainer 두가지 모듈이 생겼는데 우선은 sweep_config를 패키지화 해보자.

 

역시 코딩을 시작하기 전에는 반드시 브랜치를 새로 파주자.

이제 시작이다.

 

 

main.py 가 이렇게 구성이 되어 있고

sweep_config를 잘 정리를 하면 된다.

 

sweep_config.py는 이런식으로 구성을 해두었는데

만약 bayes를 사용한다던지 grid를 사용한다던지 하는 경우를 대비하여

sweep_config 라는 디렉토리를 만들고 3가지의 경우를 모두 저장해 두도록 하겠다.

grid는 단순히 method를 grid로 바꿨다.

bayes를 사용하기 위해서는 metric을 추가하면서 최대화 할 것인지 최소화 할 것인지 설정해야 한다.

여기서는 accuracy를 최대화 해주도록 설정 했다.  

 

각각의 딕셔너리는 기능에 맞게 이름을 바꾸어 주었다.

 

이제 각 딕셔너리들이 정확한 역할을 수행하는지 테스트 해보자.

 

sweep_config_bayes를 먼저 실행해보도록 하자.

패키지를 못읽어오는 오류가 발생하여 __init__.py 파일을 넣어주고 빈 상태로 저장했다.

경우에 따라서 반드시 필요할때가 있으므으로 찝찝할 경우 그냥 넣어주는 것이 좋다.

만족 할만한 결과다.

 

역시 베이지안을 사용하니 점점 더 좋아지는 방향으로 서치를 해주는 것을 볼 수 있다.

이번에는 그리드 서치도 잘 동작하는지 확인하자.

해결할 수 있는 버그는 발견될때마다 "아싸 신난다" 라고 입밖으로 소리내서 말하라는 소리를 어디서 들은적이 있다...

개발자들의 멘탈에 아주 좋은 행동이라고 한다.

아무튼 학습률을 범위로 지정해 주어 실행이 안된다고 나온다.

min, max 값만 주었던 부분을 다시 설정했다.

 

그리고 이제 코드를 실행하면 된다.

잘 된다.

 

이제는 이 파일들의 구체적인 내용과 구성을 알고 있으므로

내용을 수정했을 때 돌아갈 수 있을지 없을지 판단하는 unittest를 만들 수 있다.

이런식으로 내가 예상하고 컨트롤할 수 있는 범위 내에서 코딩을 진행할 수 있도록

스스로의 자유를 어느 정도는 포기하면서 일을 하는 것이 정말 좋은 방법이다.

이런식으로 해당 코드를 실행하면 바로 간단한 테스트가 가능하도록 만들어두면 나중에 편하다.

 

이번에는 main.py 에서 이 코드들을 간단한 변경으로 사용할 수 있도록 코드를 수정하자.

 

main.py 를 이렇게 수정하면 py 파일 외부에서 CLI를 통해 원하는대로 컨트롤이 가능해 진다.

이 기능을 넣기 위해서 sweep_config에는 config_generator.py 파일을 하나 만들어서

원하는 입력이 들어오면 그에 맞는 config를 return하도록 해주었다.

파이썬은 어떤 스크립트를 실행하느냐에따라 __name__ 값이 바뀌기 때문에

항상 __name__으로 부터 환경변수를 계산하여 패키지를 관리하는 것이 좋다.

여기서는 main.py 에서 부터 출발하는 경로를 계산하여 불러오기 때문에

from 을 사용하기 위해서 sys의 path 리스트에 현재 디렉토리인 sweep_config를 넣어줬다.

 

세가지 모두에 대해서 잘 파싱되어 동작하는 것을 확인했다.

 

시간이 늦어 이만 하고 자려고 한다.

 

아마 브랜치를 파놓고 시작하지 않았으면 불안해서 여기저기 메모를 남겨야 했을 것이다.

 

내일은 작업을 이어서 마저 하려고 하는데

작성한 unittest가 github에 push될 때 자동으로 돌아가게 하는

github action 기능을 레포지토리에 추가할 것이다.

그러면 이 단계에서 commit을 하고 메세지를 적당히 남긴 후

push를 하고 pull request를 잘 남기면 내일 바로 작업을 이어나갈 수 있다.

 

trainer 정리하는것도 한 일이겠지만

k-fold 적용되게 하기, wandb 랑 tensorboard 연동하기 등

손이 많이 가는 작업이 꽤나 남아있다.

 

푹 자고 내일 바로 다시 시작 하자.

반응형

댓글