티스토리 뷰
Google Cloud Platform (GCP) 에서 제공해주는 notebook 인 datalab 은 정말 편한 개발 도구라고 할 수 있다. 어디서든 개발이 가능한 환경을 제공해 줄 뿐만 아니라 Markdown 을 지원함으로써 주석보다 훨씬 더 나은 효과를 기대할 수 있게 해주는데 딱 한 가지 아쉬운 점이 있다.
그것은 바로 활용성이다. 노트북 자체가 교육 용도나 소규모 프로젝트에 많이 사용되다보니 콘솔에서 실행을 해야 하는 다른 것들과 호환이 어렵다는 점이다. 예를 들어, datalab 에서 개발되는 스크립트가 crontab 에서 주기적으로 돌아야 하는 Python 스크립트이거나, CloudML 을 통해 기계학습을 수행해야 하는 코드 등이 있겠다. 사실 이런 문제는 비단 datalab 뿐만 아니라 Jupyter Notebook 자체적인 한계라고 할 수 있다. (장점 또한 datalab 이외에 모든 노트북에 해당되는 부분이다)
이런 한계를 극복할 수 있도록 도와주는 것이 바로 notebook 에 내장되어 있는 magic command 인데, system call 까지 가능하게 해주니 적극적으로 활용해볼 수 있겠다. 아래는 system call 을 설명하기 위해 @carpedm20 님이 페이스북 메시지 API 를 wrapping 해서 만든 메시지 전송 모듈 예제를 노트북으로 변경했다. 사실 코드의 내용은 중요한게 아니고 마우스 표시가 되어 있는 부분이 핵심이다.
마우스가 오버되어 있는 부분의 코드를 보면 아래와 같다.
!jupyter nbconvert --to script fbchat.ipynb
이 Cell 이 실행되면 노트북 코드가 fbchat.py 라는 python 파일로 convert 될 것이다. 그럼 우리는 이 코드를 활용해서 다음 단계를 진행하면 된다. 예를 들어 crontab 에서는 convert 된 경로에 있는 fbchat.py 를 활용할 수 있을 것이고, CloudML 의 경우에는 노트북의 마지막에 마찬가지로 system call 을 넣어서 활용할 수 있겠다. 대략적으로 아래와 같은 형식이겠다.
!gcloud ml-engine jobs submit training $JOB_NAME ...
노트북 코드를 python 코드로 재생성하는 다른 방법은 %%writefile 이라는 magic command 를 사용하는 것이다. cell 상단에 아래와 같은 구문을 삽입하게 되면 cell 에 있는 모든 내용이 지정된 파일로 저장된다. [a] 옵션을 통해 append 또한 가능하니 참고.
%%writefile [-a] fbchat.py
번외적인 이야기지만 magic command 에서 % 는 Line magics, %% 는 Cell magics 를 의미한다. 한 라인에 해당되는 것인지, 여러 라인에 나뉘어 적용/연속되는 명령인지의 차이 정도가 되겠다. 하지만 이 방법의 경우에는 Cell 을 구문단위로 쪼개서 사용하는 노트북의 특성과는 잘 맞지 않아서 개인적으로는 선호하지 않게 된다. 다시 말하면, 모든 Cell 위에 Cell magic command 를 넣어줘야 하는 불편함이 존재한다는 이야기다. 그 불편함이 싫다면 노트북의 장점을 버리고 한 개 cell 로 코드를 작성하던지.
여튼 별거 아닌 내용 같지만 활용성에 큰 도움을 준다. 특히 내 경우에는 주기적으로 미세먼지 농도를 슬랙을 통해 받고 있는데 노트북을 통해 개발하게 되니 상당히 편리해졌다. 기존에는 간단한 코드인데 굳이 무겁게 pycharm 을 열거나 Vim 을 통하다보니 여러가지 아쉬운 부분이 있었는데 노트북으로 옮기고 나서 생각날 때 마다 코드를 편집할 수 있게 되었다 (datalab 은 24시간 connect 상태). 누군가 비슷한 고민을 하고 있었다면 해소될 수 있기를 기대한다.
※ 추가적인 magic commands 는 아래 링크에서 확인 가능하다.
http://ipython.readthedocs.io/en/stable/interactive/magics.html
'개발 > Cloud (GCP)' 카테고리의 다른 글
speech api 사용해보기 (6) | 2017.08.17 |
---|---|
Container Engine 종료(중지) 시키기 (2) | 2017.08.14 |
Container Engine (GKE #2. cluster 생성) (0) | 2017.07.12 |
Container Engine (GKE #1. 개념) (0) | 2017.07.07 |
CloudML - 기본 (6) | 2017.06.28 |
- Total
- Today
- Yesterday