Ubuntuをデータ分析用サーバー化 - JupyterHub編
研究室で余っていたLinux PC(Ubuntu)を,リモート操作可能な機械学習・データ分析用サーバーとして利用できるよう環境構築を行なった.
今回はJupyterHub編.
はじめに
JupyterHubとは?
そもそもJupyterとは,機械学習やデータ解析用のツールであり,ノートブック形式でプログラムやMarkdown形式の文章,実行結果などをまとめることができる.Pythonをはじめとして,R,Juliaといった言語で利用することが可能である.
Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習
- 作者:Jake VanderPlas
- 発売日: 2018/05/26
- メディア: 単行本(ソフトカバー)
JupyterHubは,ブラウザからアクセス可能なユーザ認証つきJupyterサーバのことを指す.
今回は,Ubuntu上にJupyterHubを導入することで,各ユーザのPCからリモート接続でJupyterを利用する環境を構築する.
想定する運用
環境
準備
以下の設定はできているものとして進める.
導入手順
ホストPCからサーバーPCに接続
導入を行うため,ホストPCからサーバーPC(Ubuntu)にリモートアクセスし,端末を立ち上げる.
ssh <管理者ユーザ名>@<ipアドレス> -p <ポート番号>
なお, <管理者ユーザ名>
にはその名の通り管理者ユーザの名前, <ipアドレス>
にはサーバーPCのIPアドレスを入力, <ポート番号>
にはSSH接続用に開放しているポート番号を入力する.
Anacondaのインストール
JupyterHubの導入に関して色々調べてみたが,どうやらAnacondaを利用するのが一番簡単らしい.個人的に,Anacondaには何度も環境を壊された苦い思い出があるのであまり使いたくないが,仕方ない.
まず,https://www.anaconda.com/download/ からAnacondaの最新版をダウンロード
rootに切り替えてからダウンロードしたファイルを実行する.実行権限も付与しておく.
sudo su - cd /home/<管理者ユーザ名>/Downloads chmod 755 ./Anaconda3-5.3.1-Linux-x86_64.sh ./Anaconda3-5.3.1-Linux-x86_64.sh
ウィザードに沿って進み,ライセンスに同意する
・ ・ ・ Do you accept the license terms? [yes|no] [no] >>> yes
前述の通り,複数ユーザでJupyterHubを利用することを想定しているため,共有可能な場所にAnacondaをインストールする.ここでは, /usr/local/lib/anaconda3
を指定する.
Anaconda3 will now be installed into this location: /root/anaconda3 - Press ENTER to confirm the location - Press CTRL-C to abort the installation - Or specify a different location below [/root/anaconda3] >>> /usr/local/lib/anaconda3
PATHの設定は後ほどetcに対してやるので不要.
Do you wish the installer to initialize Anaconda3 in your /root/.bashrc ? [yes|no] [no] >>>
AnacondaへのPATHを設定する.
echo 'export PATH="/usr/local/lib/anaconda3/bin:$PATH"' >> /etc/profile.d/anaconda.sh
1回再起動してからcondaコマンドが呼び出せていればOK.
$ conda --version conda 4.5.11
JupyterHubのインストール
先ほどと同様,rootで進める.
sudo su -
condaを使ってJupyterHubをインストールする.
conda install jupyterhub
起動してみる.
jupyterhub --no-ssl
サービス化
Ubuntuを起動する度にJupyterHubを起動するのも面倒なので,自動的に起動するようにサービス化という設定を行う.
PATHを設定するファイル was_config
を作成する.次の手順で参照するだけなので,場所は基本どこでもよい.
echo 'PATH="/usr/local/lib/anaconda3/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"' >> /usr/local/lib/anaconda3/was_config
サービスを定義するファイル /etc/systemd/system/jupyter.service
を作成する.
[Unit] Description = JupyterHub [Service] EnvironmentFile=/usr/local/lib/anaconda3/was_config ExecStart=/usr/local/lib/anaconda3/bin/jupyterhub -f /usr/local/lib/anaconda3/jupyterhub_config.py --port 8000 --ip 0.0.0.0 User=root [Install] WantedBy = multi-user.target
systemtl
というコマンドを用いて自動起動の設定を行い,サービスを開始する.
systemctl enable jupyterhub systemctl start jupyterhub systemctl status jupyterhub
ユーザ追加
JupyterHubを使う際には,Ubuntu上に作成したユーザアカウントを使ってログインする必要がある.そこで,JupyterHubを利用したい人に対し,以下の手順でユーザを作成しておこう.
管理者アカウントでログインした状態で,ターミナルから以下を入力
sudo adduser <新規ユーザ名>
設定したいパスワードを入力する
そのほか,フルネームや部屋など設定が必要な項目があれば設定する.なければ全スルーでOK.
使い方
起動
ホストPCでブラウザを立ち上げる.
アドレスバーに http://<ipアドレス>:8000
と入力すると,JupyterHubのログイン画面が表示される.
各自のUbuntuアカウントを使ってログインすると,Jupyterが立ち上がる(画面はJupyterLabになっている).
Anaconda仮想環境の作成
JupyterHubにログインしてから,Terminalを起動する(直接SSH接続でもよい)
最初に以下を実行.
conda init
Anacondaの仮想環境を作る.
conda create -n <環境名>
作った環境をactivateする.
source activate <環境名>
Jupyteのカーネルに追加する(Jupyterで使えるようにする).
ipython kernel install --user --name=<環境名>
カーネルが正しく追加されたか確認する.
jupyter kernelspec list
これで,Jupyterの利用可能なkernelに作成した仮想環境が追加されているはず.
備考
JupyterLabを使いたい場合
デフォルトではJupyter Notebookが立ち上がるが,JupyterLabを利用したい場合には,先ほど生成した jupyterhub_config.py
の以下の部分を変更すればよい.
c.Spawner.default_url = '/lab'
うまくリモート接続できない時
JupyterHubで利用しているポート 8000
が解放されていない可能性がある.以下のコマンドでポートの解放を行おう.
sudo ufw allow 8000 sudo ufw reload
参考
以下の記事を参考にさせていただいた.