Ubuntuをデータ分析用サーバー化 - JupyterHub編

f:id:petit_stella:20201123091031p:plain

研究室で余っていたLinux PC(Ubuntu)を,リモート操作可能な機械学習・データ分析用サーバーとして利用できるよう環境構築を行なった.

今回はJupyterHub編.

はじめに

JupyterHubとは?

そもそもJupyterとは,機械学習やデータ解析用のツールであり,ノートブック形式でプログラムやMarkdown形式の文章,実行結果などをまとめることができる.Pythonをはじめとして,R,Juliaといった言語で利用することが可能である.

JupyterHubは,ブラウザからアクセス可能なユーザ認証つきJupyterサーバのことを指す.

今回は,Ubuntu上にJupyterHubを導入することで,各ユーザのPCからリモート接続でJupyterを利用する環境を構築する.

想定する運用

  • Windows or Macの端末からリモートで利用する
  • 各ユーザは自分のアカウントでログインして利用する
  • 各ユーザが自由に仮想環境を作成できる

環境

準備

以下の設定はできているものとして進める.

  • ホストPCのIPアドレスを確認しておく( 10.x.x.x. みたいな )
  • ホストPCからサーバーPC(Ubuntu)へSSH接続可能である
  • サーバーPCとホストPCは同じネットワーク内にある

導入手順

ホスト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のログイン画面が表示される.

f:id:petit_stella:20201123083700p:plain:w500

各自のUbuntuアカウントを使ってログインすると,Jupyterが立ち上がる(画面はJupyterLabになっている).

f:id:petit_stella:20201123083719p:plain:w500

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

参考

以下の記事を参考にさせていただいた.

nodaki.hatenablog.com

qiita.com