(김기현님의 강의를 참고한 내용입니다.)
처음 실습환경에서 jupyter를 유용하게 사용하곤 한다. 각 task를 코딩하고 바로바로 확인할 수 있기 때문이다.
하지만 실제 딥러닝과 같이 대량의 실험 환경에서는 Jupyter Notebook이 적합하지 않다.
셀들을 하나씩 실행시켜 가는 구조이기 때문이다. 그래서 jupyter Notebook은 시각적으로 바로바로 결과를 체크해야할 때 적합하다. 실제 결과를 확인하고 다음 셀의 작업에 적용하는 task일 때 좋다는 것이다.
그래서 복잡한 프로그램을 구성할 때에는 적합한 형태가 아니다. 특히 실무에서의 베포는 python script를 만들어서 베포하는 환경이므로 Jupyter로 딥러닝을 구현하기에 적합하지 않다.
딥러닝 실험 과정은 CLI(Command line Interface), Console모드에서 이루어진다.
모델을 만들고, 모델에 데이터를 입력해 여러번 돌려야 하고, 그에 따라 하이퍼 파라미터를 수정해가며 튜닝해줘야 하는 등 대량의 실험이 필요하다. 그리고 코드의 일부분을 수정해도 다른 부분은 큰 수정 없이 독립적으로 동작하도록 설계해야, 나중에 모델의 아키텍쳐를 수정할 때도 그 부분만 찾아가서 수정하면 되므로 용이하다. 따라서 모델 구현에 필요한 부분들을 분리해 독립인 각 모듈을 만들어 조립하는 형태로 만들어야 한다. soft하게 코딩해야 하는 것이다.
예를 들어 딥러닝 모델을 여러 모듈로 구성하자면,
model.py: 아키텍쳐가 정의된 클래스
trainer.py: 모델을 학습하기 위한 코드
dataloader.py: 데이터를 불러와 전처리 수행 및 신경망에 입력하기 좋은 형태로 변환
train.py: 하이퍼 파라미터를 받아, model trainer loader 선언하고 학습
predict.py: model과 input을 받아 예측 수행
와 같이 구성할 수 있다. 이후 만들어놓은 .py 파일을 console 모드에서 불러와 실행하는 것이다.
논외로 Mac에서는 terminal에서 실행하면 되고, Windows에선 anaconda prompt에서 실행하면 된다.
(tip: Linux의 경우, Screen 기능을 사용하면 SSH 접속이 끊어져도 프로그램이 종료되지 않는다. 딥러닝 학습은 모델이 크고 데이터가 많으면 시간이 오래걸리기 때문에 통상 접속이 끊어지면 학습이 중단될 수도 있는데, 이 기능을 사용하면 계속 학습을 진행시킬 수 있다.)
결론:
딥러닝의 각 블럭을 독립적인 모듈로 구현해 합친다고 생각하면 됨.**
즉, 통용되는 인터페이스를 만들어두고 수정해가기.**