jupyterHub セットアップ (venv 利用)

以下では機械学習を行うことを意識して,そのためのライブラリも pip install するが, 演習で使っている計算機には GPGPU を積んでいないので,機械学習のプログラムは動かない可能性がある.

GPGPU を使う場合には,CUDA の設定など必要である.例えば以下のドキュメントなど参照して欲しい

Jupyter で必要なパッケージ

# apt-get install npm nodejs python3-venv

Python (機械学習)環境の構築 (venv 利用)

仮想環境 venv を利用する.venv が何者であるかは各自調べてみること.

プロジェクトの作成.

$ mkdir ~/jupyter
$ cd ~/jupyter
$ python -m venv venv

アクティベート

$ source venv/bin/activate
(venv) $ 

(venv) $ python -V
  Python 3.7.3

pip でパッケージをインストール. もし,pip インストールで「強制終了」というメッセージが出た場合はメモリ不足が考えられる.grafana など停止させるとよい (# /etc/init.d/grafana-server stop).

(venv) $ pip install -U setuptools pip
(venv) $ pip install wheel
(venv) $ pip install tensorflow
(venv) $ pip install keras
(venv) $ pip install matplotlib
(venv) $ pip install scipy
(venv) $ pip install scikit-image scikit-learn pandas
(venv) $ pip install Optuna
(venv) $ pip install cmake 
(venv) $ pip install opencv-python
(venv) $ pip install jupyterhub notebook ipywidgets jupyterlab
(venv) $ pip install jupyterthemes

npm で configurable-http-proxy をインストール

(venv) $ sudo npm install npm@latest -g
(venv) $ sudo npm install -g configurable-http-proxy

jupyter hub の起動. 起動ができたら jupyterhub を Ctrl-c 止める.

(venv) $ jupyterhub

設定ファイルを作る.

(venv) $ jupyterhub --generate-config  

(venv) $ vi jupyterhub_config.py 

  # デフォルトでjupyter labを用いたいため以下を修正
  c.Spawner.default_url = '/lab' 

   # アクセスしたら各ユーザーディレクトリを参照するように設定
  c.Spawner.notebook_dir = '~'

venv 環境から抜ける

(venv) $ deactivate

本運用

Multiple userで使うには、rootユーザでの起動が必要なので,改めて起動する.

$ sudo -s
# cd ~/jupyter
# source venv/bin/activate

(venv) #

自分の ip アドレスを指定して jupyterhub を起動する.

(venv) # jupyterhub -f jupyterhub_config.py --ip 10.176.0.XXX

動作確認

  • ブラウザからアクセスする.http://10.176.0.XXX:8000/ (XXX はサーバのIP) のように.
  • ログインの画面では,サーバへのパスワード認証で用いるユーザ名・パスワードを入力.
  • Notebook を開いて,python プログラムを実行する.但し,GPU を搭載していないので機械学習のライブラリは動かないかもしれない (試し切れていない.tensorflow (version > 2.1) は無理).
  • 以下はpythonコードのサンプル.動くか確認してみよ.

    import math
    
    # 円周率を定義
    pi = math.pi
    
    val_sin = math.sin(pi/6)
    val_cos = math.cos(pi/6)
    val_tan = math.tan(pi/6)
    
    print("sin(pi/6) : {}".format(val_sin))
    print("cos(pi/6) : {}".format(val_cos))
    print("tan(pi/6) : {}".format(val_tan))