Jupyter 서버 설치 및 실행법
Data Science 분야와 과학분야에서 편하게 Python이 쓰이도록 개발된
Notebook에 대해서 살펴본다.
사용된 설치환경은 아래와 같다.
실행 명령어 (개인 환경) -나의 경우 이대로 따라하면 된다-
source ~/tensorflow/bin/activate # virtualEnv 활성화를 통한 TensorFlow library 연동
#활성화 성공
#활성화 한다음 아래의 config 파일이 있는 디렉터리로 이동한다음 jupyter를 실행 해야 한다!!!
(tensorflow)root@jemin-virtual-machine:~/.jupyter#
# jemin_config.py 환경으로 Jupyter 실행
# jemin_config.py는 SSL 설정을 Disable 한것이다.
jupyter notebook --config jemin_config.py
설치 및 실행
Ipython Notebook 보다 더 발전된 Interactive IDE이다.
Jupyter가 다중 kernel을 지원한다고 한다.
즉, python 2,3 모두를 지원 한다.
python2는 pip
이고 python3은 pip3
이다.
pip install jupyter
실행 방법
jupyter notebook
도움말 실행 방법
(tensorflow)root@jemin-virtual-machine:~/.jupyter# jupyter notebook --h
usage: jupyter-notebook [-h] [--certfile NOTEBOOKAPP.CERTFILE]
[--ip NOTEBOOKAPP.IP] [--pylab [NOTEBOOKAPP.PYLAB]]
[--log-level NOTEBOOKAPP.LOG_LEVEL]
[--port-retries NOTEBOOKAPP.PORT_RETRIES]
[--notebook-dir NOTEBOOKAPP.NOTEBOOK_DIR]
[--config NOTEBOOKAPP.CONFIG_FILE]
[--keyfile NOTEBOOKAPP.KEYFILE]
[--port NOTEBOOKAPP.PORT]
[--transport KERNELMANAGER.TRANSPORT]
[--browser NOTEBOOKAPP.BROWSER] [--script] [-y]
[--no-browser] [--debug] [--no-mathjax] [--no-script]
[--generate-config]
optional arguments:
-h, --help show this help message and exit
--certfile NOTEBOOKAPP.CERTFILE
--ip NOTEBOOKAPP.IP
--pylab [NOTEBOOKAPP.PYLAB]
--log-level NOTEBOOKAPP.LOG_LEVEL
--port-retries NOTEBOOKAPP.PORT_RETRIES
--notebook-dir NOTEBOOKAPP.NOTEBOOK_DIR
--config NOTEBOOKAPP.CONFIG_FILE
--keyfile NOTEBOOKAPP.KEYFILE
--port NOTEBOOKAPP.PORT
--transport KERNELMANAGER.TRANSPORT
--browser NOTEBOOKAPP.BROWSER
--script
-y, --y
--no-browser
--debug
--no-mathjax
--no-script
--generate-config
주피터의 다중 커널 개념 지원은 매우 간단하고, 강력하다. IPython이 실행되는 파이썬 실행기에 종속되지 않기 때문에, 다른 언어들의 커널을 지원할 뿐만 아니라, 환경만 갖춰져 있다면 같은 언어의 다양한 버전에 대해서도 별도의 커널을 만들어 사용할 수 있다. 나아가 파이썬의 virtualenv와 결합하면 환경별로도 커널을 분리해 사용할 수 있다. 이와 같이 다중 커널 개념은 Jupyter의 핵심 개념이며, 이를 통해서 좀 더 자유롭게 Notebook 생활이 가능해질 것이다.
참고사이트: http://jupyter-notebook.readthedocs.org/en/latest/public_server.html
설정 방법
실행방법
jupyter notebook
시작 디렉터리 위치 변경
원격 서버로 설정
우분투환경
Securing a notebook server
jupyter notebook --generate-config
profile 생성없이 defalut내용을 바로 변경한다. 전체 Jupyter에 영향을 미친다.
Writing default config to: /root/.jupyter/jupyter_notebook_config.py
Preparing a hashed password
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:f24baff49ac5:863dd2ae747212ede58125302d227f0ca7b12bb3'
jupyter_notebook_config.py
를 열어서 아래의 내용을 입력한다.
# Password to use for web authentication
c = get_config()
c.NotebookApp.password ='sha1:f24baff49ac5:863dd2ae747212ede58125302d227f0ca7b12bb3'
패스워드를 사용할 때 SSL을 사용하는것은 좋은 생각이다.
SSL을 이용해서 브라우저에서 패스워드가 암호화되서 보내지기 때문이다.
이를 위해서 self-signed certificate
를 생성 한다.
OpenSSL
을 이용해서 certificate을 생성할 수 있다. 유효기간은 365일이다.
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
jupyter_notebook_config.py
를 열어서 아래의 내용을 입력한다.
c.NotebookApp.certfile ='/absolute/path/to/your/certificate/mycert.pem'
서버 설정 내용을 jupyter_notebook_config.py
를 열어서 아래의 내용을 입력한다.
# The IP address the notebook server will listen on.
# c.NotebookApp.ip = 'localhost'
c.NotebookApp.ip = '192.168.174.131'
# c.NotebookApp.port_retries = 50
c.NotebookApp.port_retries = 8888
또는 아래의 명령어로 수작업으로 설정해 줄수도 있다.
jupyter notebook --ip=* --no-browser
특정 config 파일로 실행 하기
명렁어 --config jemin_config.py
를 설정해 준다.
(tensorflow)root@jemin-virtual-machine:~/.jupyter# jupyter notebook --config jemin_config.py
[I 00:46:15.432 NotebookApp] Serving notebooks from local directory: /root/DataScience/
[I 00:46:15.432 NotebookApp] 0 active kernels
[I 00:46:15.432 NotebookApp] The IPython Notebook is running at: http://192.168.174.132:8888/
[I 00:46:15.432 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
기타설정
#실행과 동시에 web-browser를 실행하지 않게 한다.
c.NotebookApp.open_browser = False
#시작 디렉터리를 변경한다.
c.NotebookApp.notebook_dir = u'/root/DataScience/'
c.NotebookApp.matplotlib='inline'
옵션은 사용하지 못하도록 변경되었다.
IPython shell에서 직접 magic 함수를 이용해야 한다.
%matplotlib inline
다중 Kernel 사용 하기
현재 설치된 커널 종류 확인
jupyter kernelspec list
(tensorflow_py2) jemin@jemin-desktop:~$ jupyter kernelspec list
Available kernels:
python3 /home/jemin/.local/lib/python3.5/site-packages/ipykernel/resources
python2 커널 설치
python2 -m pip install ipykernel
python2 -m ipykernel install --user
커널 설치 확인
(tensorflow_py2) jemin@jemin-desktop:~$ jupyter kernelspec list
Available kernels:
python3 /home/jemin/.local/lib/python3.5/site-packages/ipykernel/resources
python2 /home/jemin/.local/share/jupyter/kernels/python2
추가 설정 자료
https://songyunseop.github.io/post/2016/09/Using-Jupyter-inside-virtualenv/
업데이트 방법
버전어 맞춰서 아래 명령어를 이용한다.
python 3.5는 pip3
python 2.7는 pip
pip install --upgrade pip # pip update
pip install jupyter
백그라운드에서 실행하기
terminal window를 유지하지 않아도 connection이 보장된다.
nohup
명령어의 기능
- 표준 출력을
nohup.out
또는 다른곳으로 redirection하는 작업 수행 - 프로세스가 백그라운드에서 지속적으로 실행하도록 함.
물론 그냥 &
만 뒤에 붙여주면 shell
에서 백그라운드로 동작하지만 terminal
을 닫으면 프로세스가 terminate되기 때문에 보장되지 않는다.
nohup jupyter notebook &
이렇게 실행한 프로세스는 kill
로 terminate해야 한다.
lsof nohup.out
kill -9 <PID>
좀 더 일반적인 확인 후 종료
1. “ps -ef | grep 쉘스크립트파일명” 명령으로 데몬형식으로 실행
2. "kill -9 PID번호“ 명령으로 해당 프로세스 종료
부팅시 자동 실행 (19.5.8 수정)
service 생성
sudo vim /etc/systemd/system/jupyter.service
아래의 내용을 입력한다.
[Unit]
Description=Jupyter Notebook Server
[Service]
Type=simple
PIDFile=/run/jupyter.pid
User=<username>
ExecStart=/home/<username>/.local/bin/jupyter-notebook
WorkingDirectory=/your/working/dir
[Install]
WantedBy=multi-user.target
ExecStart
설정은 anaconda의 경우 /home/<username>/anaconda3/bin/jupyter-notebook
으로 설정한다. 각자 상황에 맞춰서 설정해야 한다.
service 등록
systemctl daemon-reload
systemctl enable jupyter.service
systemctl start jupyter.service
service 상태 알애내기
sudo systemctl status jupyter.service
● jupyter.service - Jupyter Notebook
Loaded: loaded (/etc/systemd/system/jupyter.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-05-08 15:07:55 KST; 17min ago
Main PID: 2057 (jupyter-noteboo)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/jupyter.service
└─2057 /home/jemin/anaconda3/bin/python /home/jemin/anaconda3/bin/jupyter-notebook
5월 08 15:07:56 jemin jupyter-notebook[2057]: [I 15:07:56.357 NotebookApp] JupyterLab extension loaded from /home/jemin/anaconda3/lib/python3.7/s
5월 08 15:07:56 jemin jupyter-notebook[2057]: [I 15:07:56.357 NotebookApp] JupyterLab application directory is /home/jemin/anaconda3/share/jupyte
5월 08 15:07:56 jemin jupyter-notebook[2057]: [I 15:07:56.358 NotebookApp] Serving notebooks from local directory: /home/jemin/development
5월 08 15:07:56 jemin jupyter-notebook[2057]: [I 15:07:56.358 NotebookApp] The Jupyter Notebook is running at:
5월 08 15:07:56 jemin jupyter-notebook[2057]: [I 15:07:56.358 NotebookApp] http://192.168.0.4:8888/
5월 08 15:07:56 jemin jupyter-notebook[2057]: [I 15:07:56.358 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to
5월 08 15:07:56 jemin jupyter-notebook[2057]: [W 15:07:56.360 NotebookApp] No web browser found: could not locate runnable browser.
5월 08 15:20:16 jemin jupyter-notebook[2057]: [I 15:20:16.468 NotebookApp] 302 GET / (192.168.0.2) 1.18ms
5월 08 15:20:16 jemin jupyter-notebook[2057]: [I 15:20:16.470 NotebookApp] 302 GET /tree? (192.168.0.2) 0.28ms
5월 08 15:20:18 jemin jupyter-notebook[2057]: [I 15:20:18.201 NotebookApp] 302 POST /login?next=%2Ftree%3F (192.168.0.2) 2.41ms
재시작: sudo systemctl restart jupyter.service
멈춤: sudo systemctl stop jupyter.service
해제: sudo systemctl disable jupyter.service
참고문서: https://wiki.ubuntu.com/SystemdForUpstartUsers
Trouble Shooting
1. IP 변경에 따른 에러
(tensorflow)root@jemin-virtual-machine:~/.jupyter# jupyter notebook --profile=jemin_config.py
[W 20:34:44.745 NotebookApp] Unrecognized alias: '--profile=jemin_config.py', it will probably have no effect.
Traceback (most recent call last):
File "/usr/local/bin/jupyter-notebook", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/jupyter_core/application.py", line 267, in launch_instance
return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/traitlets/config/application.py", line 591, in launch_instance
app.initialize(argv)
File "<string>", line 2, in initialize
File "/usr/local/lib/python2.7/dist-packages/traitlets/config/application.py", line 75, in catch_config_error
return method(app, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/notebook/notebookapp.py", line 1007, in initialize
self.init_webapp()
File "/usr/local/lib/python2.7/dist-packages/notebook/notebookapp.py", line 873, in init_webapp
self.http_server.listen(port, self.ip)
File "/usr/local/lib/python2.7/dist-packages/tornado/tcpserver.py", line 126, in listen
sockets = bind_sockets(port, address=address)
File "/usr/local/lib/python2.7/dist-packages/tornado/netutil.py", line 196, in bind_sockets
sock.bind(sockaddr)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 99] Cannot assign requested address
2. SSL 사용 오류
config file에서 아래의 SSL 설정관련 코드들이 문제가 된다.
보안상 문제가 있지만 그냥 주석처리하고 실행 한다.
파일위치: /root/.jupyter
c.notebookApp.certfile = u'/root/.jupyter/mycert.crt'
c.notebookApp.certfile = u'/root/.jupyter/mycert.key'
아래는 에러 코드이다.
(tensorflow)root@jemin-virtual-machine:~/.jupyter# jupyter notebook --profile="jemin_config.py"
[W 22:43:24.515 NotebookApp] Unrecognized alias: '--profile=jemin_config.py', it will probably have no effect.
[W 22:43:24.520 NotebookApp] Error loading config file: jupyter_notebook_config
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/jupyter_core/application.py", line 202, in load_config_file
path=path
File "<string>", line 2, in load_config_file
File "/usr/local/lib/python2.7/dist-packages/traitlets/config/application.py", line 75, in catch_config_error
return method(app, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/traitlets/config/application.py", line 564, in load_config_file
collisions = loaded[0].collisions(loaded[1])
File "/usr/local/lib/python2.7/dist-packages/traitlets/config/loader.py", line 212, in collisions
for key in mine:
TypeError: 'LazyConfigValue' object is not iterable
[I 22:43:24.545 NotebookApp] Serving notebooks from local directory: /root/DataScience/
[I 22:43:24.545 NotebookApp] 0 active kernels
[I 22:43:24.545 NotebookApp] The IPython Notebook is running at: http://192.168.174.132:8888/
[I 22:43:24.545 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
참고사이트
http://jdfreder-notebook.readthedocs.org/en/docs/examples/Notebook/Configuring%20the%20Notebook%20and%20Server.html
공식사이트
다중 커널 설치법 (공식)