0.5から始める機械学習

Machine Learning, Deep Learning, Computer Vision に関する備忘録

【JupyterHub】JupyterHubを複数ユーザーで使用するための環境構築方法

JupyterHub

こんにちは

今日はJupyter notebook/lab をグループ開発で使うためのJupyterHubを複数ユーザーで使えるようにするための設定方法についてまとめます。

最終ゴールは

  • 複数ユーザーでログイン
  • 各ユーザーが自由に仮想環境を作成することができる
  • 各ユーザーが作成した仮想環境を共有できる

とういところを目指して設定方法を説明していきます。

大まかに流れを説明すると

  1. Jupyter Hubへログインするユーザーの作成
  2. Anacondaを特定のユーザーグループが使えるようにインストール
  3. JupyterHubのインストールと設定
  4. Anaconda仮想環境の作成とJupyterのkernelへ追加

といった流れになります。

おまけでJupyter Labを使用する際に便利な拡張機能を紹介します。

導入環境

  • Ubuntu 16.04
  • Anaconda(4.6.12)

目次

1. Jupyter Hubへログインするユーザーの作成

ユーザーの作成

Jupyter Hubにおけるユーザー認証の方法は様々に用意されていますが、今回はデフォルトの認証方法を利用していきます。

デフォルトではUbuntuのシステムユーザーおよびそのパスワードを用いて認証を行うため、Ubuntuシステムへユーザーを作成します。

# rootとしてログイン
# 以降はrootユーザーとして操作
sudo su -

# ユーザーを追加
adduser myuser

ユーザーグループへの追加

後ほどインストールするAnacondaを使えるようにするユーザーグループを作成します。

# ユーザーグループの作成
groupadd jupyterhub

# ユーザーグループへの追加
gpasswd -a myuser jupyterhub

2. Anacondaを特定のユーザーグループが使えるようにインストール

複数のユーザーが同一のAnaconda環境を使用できるようにインストールしていきます。

Anacondaインストール

まずはAnacondaのインストールの準備を行います。

# Anacondaのダウンロード
wget https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh

# インストール
bash Anaconda3-2019.03-Linux-x86_64.sh

ここで注意点が一つ。

インストールするフォルダを/opt/anaconda3/など全ユーザーがアクセスできる場所にします。

デフォルトではrootユーザーでインストールした場合、/root/以下に保存されますが、それではその後に各ユーザーがアクセスできなくなってしまいます。

Anacondaインストールフォルダの所有者権限を変更

このままではAnacondaがroot所有のため他のユーザーが使えないままです。

そのため公式を参考にグループ所有者を変更していきます。

support.anaconda.com

chgrp -R jupyterhub /opt/anaconda3
chmod 770 -R /opt/anaconda3

これで各ユーザーが同一Anaconda環境を使えるようになりました。

3. JupyterHubのインストールと設定

JupyterHubのインストールは簡単です。

conda install -c conda-forge jupyterhub

JupyterHubの設定をするためのconfigファイルを生成します。

# デフォルトではカレントディレクトリにconfigファイルが生成されるためカレントディレクトリを変更
cd /opt/anaconda3
jupyterhub --generate-config

JupyterHub上でJupyterLabを使用するためにjupyterhub_config.pyの以下の部分を変更します。

c.Spawner.default_url = '/lab'

これでデフォルトでJupyterLabを使えるようになります。

以上がJupyterHubのインストールになります。

4. Anaconda仮想環境の作成とJupyterのkernelへ追加

JupyerHubへのログイン

まずJupyerHubを起動します。

jupyterhub 

デフォルトではport番号が8000になっているのでhttp://ip_adress:8000にアクセスします。

するとログイン画面が表示されるので先ほどjupyterhubグループに登録したmyuserでログインします。

Anaconda仮想環境の作成

JupyterHubにログインするとJupyterLabの画面に遷移するので、Terminalを起動します。

まず最初にconda initを実行します。

# conda activateを実行できるようにするため
conda init

conda initによる変更を適用するためにTerminalを起動し直します(New Launcher ⇨ Terminal)。

ここから仮想環境を作成していきます。

conda create -n env_name ipython ipykernel

これで「env_name」の仮想環境が作成されました。

ここでipython, ipykernelを同時にインストールしておきます。これは後ほど作成した仮想環境をipythonのカーネルとして追加するのに必要となるためです。

作成されたかは以下のコマンドで確認できます。

conda info -e

JupyterLab kernelへ仮想環境を追加

先ほど作成した仮想環境をJupyterLab上でも使えるようにkernelとして登録します。

# 仮想環境のアクティベート
conda activate env_name

# kernelへ追加
ipython kernel install --user --name=env_name

これでkernelへの追加が完了しました。

変更を適用するためにブラウザをリロードしましょう。

するとLauncherのkernelにenv_nameが追加されているはずです!!

仮想環境を共有するための変更

こうして作成した仮想環境に各自必要なパッケージをインストールしていくわけですが、インストールされたパッケージはインストールしたユーザーが所有者となっているため、他の人がアクセスできない(パッケージとして認識されない)状態になっています。

そこで他の人も共有できるようにインストールしたパッケージのグループ所有者を変更します。

chgrp -R jupyterhub /opt/anaconda3
# root所有の部分はエラーがでるが、インストールしたパッケージのグループ所有者は変更されるので無視する(これで大丈夫かは不明)

以上がJupyterHub環境構築方法です。

新たにユーザーを追加したい場合はユーザーを作成しjupyterhubグループに追加するだけです。

JupyterLab Hub-extensionの有効化

JupyterLabをJupyterHubのnotebookとして使用するとそのままではLogoutおよびQuitのコマンドが消えてしまうため不便になってしまいます。

そこでHub-extensionを有効にすることでコントロールパネルを開けるようにすることができます!

Hub-extensionのインストールと有効化

jupyter labextension install @jupyterlab/hub-extension

上記コマンドでインストールは完了しますが、このままでは以下の図のようなコマンドが表示される訳ではありません。

f:id:nodaki:20190417220005p:plain

有効化するためにjupyterhub_config.pyの以下の部分を修正します。

c.Spawner.cmd = ['jupyter-labhub']

これで上の図のように「Hub」からLogoutを選択できるようになります。

まとめ

グループ開発にもJupyterを活用して便利さを享受しましょう!!