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

環境構築

必要なパッケージのインストール

# apt install cmake

プロジェクトの作成.

$ mkdir /home/adm01/jupyter
$ cd /home/adm01/jupyter
$ python -m venv venv

アクティベート

$ source venv/bin/activate
(venv) $ 

(venv) $ python -V
  Python 3.7.3

pip でパッケージをインストール.

(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 dlib
(venv) $ pip install numba
(venv) $ pip install opencv-python
(venv) $ pip install torch torchvision
(venv) $ pip install jupyterhub notebook wheel ipywidgets jupyterlab
(venv) $ pip install jupyterthemes
(venv) $ pip install jupyterhub-systemdspawner jupyterhub-idle-culler   

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

(venv) $ sudo apt install node-configurable-http-proxy

jupyter hub の起動

(venv) $ jupyterhub

別のターミナルで起動を確認する. 起動確認できたら jupyterhub を一旦閉じる.

$ w3m http://localhost:8000

設定ファイルを作る. 設定したい内容は以下の通りである.

  • ユーザは誰でもログインできる
  • ユーザのホームディレクトリは NFS マウントされたディスク上にある
  • ユーザ認証に Kerberos と PAM を利用
  • 24 時間経過したらカーネルは強制再起動
  • Python プログラムが実行を終えてアイドル状態になったら,10 分経過したらカーネル再起動

    (venv) $ mkdir jupyterhub
    (venv) $ cd jupyterhub
    
    (venv) $ vi jupyterhub_config.py 
    
      import sys
      c = get_config()  #noqa
    
      # --- 認証設定 ---
      c.Authenticator.allow_all = True
      c.JupyterHub.authenticator_class = 'pam'
    
      # --- Spawner設定 (SystemdSpawner) ---
      c.JupyterHub.spawner_class = 'systemdspawner.SystemdSpawner'
      c.Spawner.default_url = '/lab'
      c.Spawner.notebook_dir = '~'
    
      # 環境変数の統合 (XLAやCUDAのパスをここにまとめる)
      c.SystemdSpawner.environment = {
         'IPYTHONDIR': '/tmp/ipython_history_{username}',
         'PATH': '/home/admin01/jupyter/venv/bin:/usr/sbin:/usr/bin:/sbin:/bin',
         'XLA_FLAGS': '--xla_gpu_cuda_data_dir=/usr/lib/cuda-xla'
      }
    
      # 環境変数の引き継ぎ.Kerberosチケット(KRB5CCNAME)を含む
      c.SystemdSpawner.env_keep = [
         'PATH', 'PYTHONPATH', 'CONDA_ROOT', 'CONDA_DEFAULT_ENV',
         'VIRTUAL_ENV', 'LANG', 'LC_ALL', 'KRB5CCNAME'
      ]
    
      # 24時間 (86400秒) で強制停止
      c.SystemdSpawner.extra_systemd_unit_settings = {
         'RuntimeMaxSec': '86400'
      }
    
      # --- アイドル停止設定 (10分 = 600秒) ---
      c.JupyterHub.services = [
          {
             'name': 'idle-culler',
             'admin': True,
             'command': [
                 sys.executable, '-m', 'jupyterhub_idle_culler',
                 '--timeout=600'
             ],
          }
      ]

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

(venv) $ sudo -s
(venv) # jupyterhub -f jupyterhub_config.py 

動作確認

Jupyter で notebook を開く.

GPU の使用状態の確認

!nvidia-smi

利用する GPU の ID を指定 (以下では, ID=2 を使う)

import os
os.environ["CUDA_VISIBLE_DEVICES"]="2"

計算を実行する.以下のようなコードが動くことを確認した.

import tensorflow as tf
import tensorflow.keras.backend as K
mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10)
])
predictions = model(x_train[:1]).numpy()
predictions
tf.nn.softmax(predictions).numpy()
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
loss_fn(y_train[:1], predictions).numpy()
model.compile(optimizer='adam',
              loss=loss_fn,
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=100)
model.evaluate(x_test,  y_test, verbose=2)
probability_model = tf.keras.Sequential([
  model,
  tf.keras.layers.Softmax()
])
probability_model(x_test[:5])
K.clear_session()