-
Google Colaboratory를 활용하여 Keras 개발환경 구축Programming & Machine Learning/Python X 머신러닝 2018. 6. 8. 01:54
오랜만에 딥러닝 프레임워크 관련 글을 작성하는 것 같다. 근래에는 분산처리, 파이썬 개발, 추천 시스템 공부에 치중하다 보니 딥러닝을 접할 시간이 부족했었다. 하지만 이제 추천 시스템에도 딥러닝 적용을 해야 하기도 하고, 역시나 개발은 딥러닝 개발이 가장 재미있으므로, 본격적으로 딥러닝 공부를 시작하지 않을까 싶다.
우연한 기회에 Google Colaboratory(이하 Colab)와 Keras를 함께 사용하는 스터디를 했었는데, 오늘은 이에 대한 개발환경 구축 포스팅을 하고자 한다.
Colab이 발표된 지 꽤 많은 시간이 지났지만, 아직까지 딥러닝 프레임워크 사용자들에게 많이 각광받는 툴은 아닌 것 같다. Colab은 Jupyter Notebook으로 협업을 진행하게 될 때의 문제점, 협업 진행자들 소유의 서버로 jupyter port를 상시 오픈해야 한다는 단점을 상쇄함과 동시에, 꽤 괜찮은 성능의 GPU 부스팅을 마우스 클릭 몇번으로 가능하게 해주는 강력한 툴이다. 얼마 전에 Naver가 발표한 NSML을 사용해 볼 기회가 있었는데, 범용성이나 접근성 측면에서는 게임이 안 될 만큼 Colab이 좋다(..)
물론, 무료로 오픈된 클라우드 플랫폼이기 때문에 치명적인 단점도 존재한다. jupyter 문서와 거의 동일하게 동작하는 Colab은 docker 이미지와 유사한 VM 위에서 동작하는데, 여기서 문제는 이 VM이 (정확한 시간은 모르겠다)사용자가 일정시간 이상 사용하지 않으면 완전히 리셋된다는 것이다. 어찌보면 너무도 당연한 것이지만, 기껏 문서로 작업해서 학습한 모델파일들을 서둘러 손쓰지 않으면 전부 날려먹는다는 이야기다.
또한 GPU 부스팅은 이 단일 VM당 최대 12시간만을 지원한다. (사실 이는 별 문제는 아니다)
다시 돌아와서, VM이 내 답안지를 날려버리기 전에 저장해야 하는 문제를 해결해야 할 것이다. 이 문제와 관련하여 Colab과 Keras를 연동하는 예제를 실험해 보았다. API나 Docu가 역시나 상당히 잘 되어있어서, 생각보다 많이 헤매지 않고 이 문제를 해결하는 방법을 정리했다.
코드와 이미지를 보기 전에, Keras와 Colab을 이용하여 VM 세션에 구애받지 않고 연속적인 개발환경을 구축하는 방법을 요약하면 다음과 같다.
1. Colab에서 Keras를 실행한다. GPU도 써보고 시각화도 해보자.
2. 학습이 완료된 모델을 json, h5와 같은 파일 형태로 저장하자.
3. VM file path에 저장된 모델 파일을 google drive 혹은 local 저장소로 복사하여 저장한다.
여기까지가 일반적인 개발의 한 사이클이고, 이 사이클을 이어서 개발을 한다고 가정하자.
4. google API, module을 이용하여 새로운 VM 위에, 지난 개발에서 학습했던 모델 파일 등을 불러온다.
5. 불러온 파일을 이용하여 하던 개발을 계속하고, 다시 1~3을 반복하여 연속성을 만들어준다.
이러한 workflow를 만들었으면, 이제 자동화만 하면 마치 local에서 작업을 하는 것 같은 편안함을 느낄 수 있을 것이다. 그러나 자동화를 방해하는 몇 가지 요소들이 있다. 먼저 google drive의 working directory(혹은 로컬)를 잘 정의하여 그곳에서만 파일관리를 해야 한다. 또한 구글 API 혹은 모듈로 이러한 파일들을 가져오면 버퍼 형태로 파일이 읽어와진다. 그래서 모델파일을 버퍼로 불러온 뒤 이를 새로운 VM의 임시폴더에 다시 저장을 해야한다.
이제부터는 백문이 불여일타. Colab 파일을 하나 생성하고, Gdrive에 자신이 관리할 폴더를 하나 만들어놓고 아래 코드를 따라해보자.
1. 언어 설정 및 GPU 설정
수정 -> 노트설정 : GPU 가속
2. 드라이브에 파일 읽기 / 쓰기
Colab에서 느낌표를 입력한 뒤의 한 줄의 문장은, linux 명령어로 인식되어 실행된다. 역시나 매우 좋은 기능이다.
위 코드를 입력하면, 나의 드라이브 id에 텍스트 파일과 내용이 생성된다. 인증과정은 생략.
3. 케라스 모델파일 읽기 / 쓰기
일반적인 케라스 코드이다. mnist 데이터셋으로 모델을 학습시킨 후, VM 위에 파일을 저장한다.
- root 경로에 저장된 모델파일을 드라이브의 원하는 폴더에 저장
위 코드를 실행하면, 앞선 과정에서 저장했던 h5 파일이 드라이브의 내 폴더 안에 저장된다.
- REST API로 드라이브에 있는 모델파일을 BytesIO로 다운로드
REST API를 이용해 위에서 저장했던 파일을 다운받는다. 이 파일의 형태는 buffer의 형태이므로, VM의 tmp 폴더에 저장해준다.
그리고 tmp 폴더에 저장해둔 파일을 load하면 한 사이클이 끝이 난다.
제대로 되었는지에 대한 의심을 없애주기 위해, predict까지 한번 돌려보자.
'Programming & Machine Learning > Python X 머신러닝' 카테고리의 다른 글
MNIST로 알아보는 비지도 학습 - [클러스터링과 차원 축소의 적용] (8) 2019.08.06 Python으로 Custom Sparse Matrix 생성하기 (0) 2018.12.08 Python으로 logistic regression 학습 구현하기 (0) 2018.05.27 파이썬 언어에 대한 참고사항들 (0) 2018.05.23 Python으로 regression 학습 구현하기 (4) 2018.05.06 댓글