Jupyter Notebook을 Shell 에서 수행하기

Jupyter 에서 Notebook 을 Shell 상에서 수행하기

Jupyter를 서버에 설치해 놓고 사용하다보면 트레이닝 중 일때 갑자기 자리를 옮겨야 할 때가 생기면 중간에 멈추고 다시 트레이닝 해야 할때가 종종 있습니다. 이럴때는 Jupyter의 Terminal 상에서 바로 nbconvert를 통해서 Notebook을 끊김 없이 수행할 수 있습니다.

테스트를 위해서 1초마다 i 값을 파일에 추가하는 Notebook 파일을 만듭니다.

In [1]:
import time

i = 0
for i in range(10):
    time.sleep(1)
    with open("test.log", "a") as f:
        f.write("{}\n".format(i))
    print(i)
    i += 1
0
1
2
3
4
5
6
7
8
9

Jupyter Nbconvert 는 노트북 셀의 응답이 기본 30초가 넘어가면 에러를 일으킵니다. 이것을 방지하기 위해서 nbconvert의 설정 파일에 timeout 값을 아래와 같이 -1 로 설정하여 무제한으로 늘립니다. (파일이 없다면 아래 내용으로 만들어 주면 됩니다, https://nbconvert.readthedocs.io/en/latest/config_options.html)

> cat /root/.jupyter/jupyter_nbconvert_config.py

# Configuration file for jupyter nbconvert.
import os
from IPython.lib import passwd

c = get_config()
c.ExecutePreprocessor.timeout = -1
print(c)

이제 Notebook 파일을 Jupyter Terminal 을 열고 아래 명령으로 수행하면 됩니다.

서버의 Docker 위에 Jupyter 가 올라가 있기 때문에 Terminal 창을 닫더라도 서버 또는 Docker 데몬전체가 죽지 않는 이상 다시 같은 Terminal 창에 접속하면 이전 화면을 이어서 다시 보실수 있습니다.

-rw-r--r-- 1 test.ipynb

> jupyter nbconvert --to notebook --execute test.ipynb
  • --to notebook: 수행후 결과를 Notebook 파일 형태로 저장
  • --execute test.ipynb: 수행하고자 하는 Notebook 파일

이제 Terminal 을 닫고 10초 정도 지난 뒤에 파일이 제대로 생성되었는지 확인해 보겠습니다.

-rw-r--r-- 1 test.ipynb
-rw-r--r-- 1 test.log
-rw-r--r-- 1 test.nbconvert.ipynb
> cat test.log
1
2
3
4
5
6
7
8
9

test.log 파일을 보면 노트북 파일이 제대로 수행되었음을 알 수 있습니다. 그리고 test.nbconvert.ipynb 파일을 Jupyter 상에서 열어보면 test.ipynb 파일의 결과 셀이 포함되어 있는 것을 확인하실 수 있습니다.

Comments

Comments powered by Disqus