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()