AWSにjupyter notebookを構築してリモートで使用する
AWSにjupyter notebookを構築してリモートで使用する:
自宅のPCがメモリ8GiBしかないため、32GiB環境を手に入れたいと思い、AWS上にLinuxインスタンスを立てようと思います。Linux上でjupyter notebookを起動し、リモートでブラウザからアクセスしてjupyterを使用します。
サービスからEC2を選択し、インスタンスを作成します。
作成するインスタンスは下記のとおりです。
セキュリティグループのインバウンド設定は下記のとおりです。
セキュリティグループのアウトバウンド設定は下記のとおりです。
sshクライアントはTeratermを使用しました。インストール方法と接続方法はこちらの手順通りに行いました。
ログイン後、rootユーザに切り替えます。以降の操作は管理者として実行します。
AWSの初期設定では、sshが鍵を使用した認証になっています。複数のクライアントからアクセスする場合は鍵を配布するのが大変なので、パスワード認証のほうが楽だと思います。
パスワード認証への変更の仕方はこちらの手順で実施しました。
タイムゾーンを日本に設定します。設定の仕方はこちらの手順で実施しました。
Anacondaのインストール方法はこちらを参考にしました。
自宅PCでAnacondaのサイトから64-Bit (x86) Installer (652.5 MB)をダウンロードします。構築時はPython 3.7 versionでした。
WinSCPを用いて、作成したLinuxインスタンスにインストーラを移動します。
WinSCPのインストールはこちらが参考になります。
WinSCPの鍵認証でAWSインスタンスにアクセスするにはこちらが参考になります。
インスタンスかに直接ダウンロードもできます。wgetをインストールします。
サイトからanacondaをダウンロードします。
こちらを参考にしました。
下記コマンドを実行し、インストールします。途中でインストールのパスが聞かれます。今回は
Anacondaインストール過程で、zipを解凍できない時があります。そのときはbunzip2をインストールします。
インストール後は下記コマンドでパスを通しました。
ここで、
下記コマンドで仮想環境を作成します。
仮想環境についてはこちらが参考になります。
notebookやデータを保管するディレクトリを作成します。
仮想環境をアクティブ化します。
jupyterの設定を行います。こちらを参考にしました。
jupyterのログインパスワードを設定します。
最後に表示された
次にサーバに設定する鍵を生成します。
jupyter notebookのコンフィグを設定します。
下記コマンドでjupyterを起動します。
自宅のPCのブラウザでサーバにアクセスすると、パスワード入力を求められるので、ログインします。
jupyterを止めるときは下記コマンドでプロセスIDを探し、
上記の設定だとサーバを起動するたびにjupyterを手動で起動する必要があります。そこでサーバ起動と同時に自動でjupyterが起動するようにします。
こちらを参考にしました。
起動スクリプトを作成します。
起動スクリプトを編集します。
ファイルの権限を変更します。
CentOS7以降だと起動しない場合があります(参考)。実行権限を付与します。
root権限で
ブラウザでサーバにアクセスし、jupyterのlogin画面が出たら成功です。
ここまでサーバを構築出来たら、サーバのイメージを作成します。そして作成されたAMIを元に好きなスペックでサーバを立て直します。私はC5.4xlargeインスタンス(メモリ32GiB、ストレージ100GiB)で作成しなおしました。1時間約80円です。まあまあします。
データの移動などのために、
次のコマンドで元に戻りました。
AWSにjupyterを構築しました。噂ではGCPのほうがコストが安くなるとかで、そちらも試してみたいです。
はじめに
自宅のPCがメモリ8GiBしかないため、32GiB環境を手に入れたいと思い、AWS上にLinuxインスタンスを立てようと思います。Linux上でjupyter notebookを起動し、リモートでブラウザからアクセスしてjupyterを使用します。
環境
- AWSアカウントは持っている前提とします
手順
AWSインスタンス作成
サービスからEC2を選択し、インスタンスを作成します。作成するインスタンスは下記のとおりです。
No. | ステップ | 選択 |
---|---|---|
1 | Amazon マシンイメージ (AMI) | Amazon Linux 2 AMI (HVM), SSD Volume Type |
2 | インスタンスタイプの選択 | t2.micro (可変 ECU, 1 vCPU, 2.5 GHz, Intel Xeon Family, 1 GiB メモリ, EBS のみ) |
3 | インスタンスの詳細の設定 | デフォルトのまま変更なし |
4 | ストレージの追加 | 30GiB |
5 | タグの追加 | 追加しない |
6 | セキュリティグループの設定 | ※下記参照 |
セキュリティグループのアウトバウンド設定は下記のとおりです。
サーバへの接続
sshクライアントはTeratermを使用しました。インストール方法と接続方法はこちらの手順通りに行いました。ログイン後、rootユーザに切り替えます。以降の操作は管理者として実行します。
$ sudo su -
パスワード認証への変更の仕方はこちらの手順で実施しました。
タイムゾーンを日本に設定します。設定の仕方はこちらの手順で実施しました。
Anacondaのインストール
Anacondaのインストール方法はこちらを参考にしました。自宅PCでAnacondaのサイトから64-Bit (x86) Installer (652.5 MB)をダウンロードします。構築時はPython 3.7 versionでした。
WinSCPを用いて、作成したLinuxインスタンスにインストーラを移動します。
WinSCPのインストールはこちらが参考になります。
WinSCPの鍵認証でAWSインスタンスにアクセスするにはこちらが参考になります。
インスタンスかに直接ダウンロードもできます。wgetをインストールします。
$ yum install wget
$ wget https://repo.continuum.io/archive/Anaconda3-2018.12-Linux-x86_64.sh
下記コマンドを実行し、インストールします。途中でインストールのパスが聞かれます。今回は
/root/anaconda3/
としました。$ sh Anaconda3-2018.12-Linux-x86_64.sh
$ yum install bzip2
$ export PATH=/root/anaconda3/bin:$PATH
/root/anaconda3
の部分はインストール先のパスです。
仮想環境作成
下記コマンドで仮想環境を作成します。conda create -n py37 python=3.7.1 anaconda
anaconda
オプションでパッケージ全部入りのpython環境をつくれます。仮想環境についてはこちらが参考になります。
jupyter notebook設定
notebookやデータを保管するディレクトリを作成します。$ cd ~ # rootで操作しているので/rootに移動します $ mkdir work $ chmod 777 work
$ source activate py37
jupyterのログインパスワードを設定します。
$ ipython In [1]: from notebook.auth import passwd In [2]: passwd() Enter password: Verify password: Out[3]: 'sha1:...' # 暗号化された文字列をコピーしておく
'sha1:...'
の部分を控えておきます。次にサーバに設定する鍵を生成します。
$ cd ~ # rootで操作しているので/rootに移動します $ mkdir .jupyter $ cd .jupyter $ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem
$ vi /root/.jupyter/jupyter_notebook_config.py c = get_config() c.NotebookApp.ip='0.0.0.0' # 任意のipアドレスからアクセス可 c.NotebookApp.password = 'sha1:...' # コピーしておいた文字列 c.NotebookApp.open_browser=False # jupyter起動時にブラウザはを自動で開かない c.NotebookApp.port=適当なポート番号 # サーバーのportで今回は8888 c.NotebookApp.certfile = u'/root/.jupyter/mycert.pem' # サーバ証明書 c.NotebookApp.keyfile = u'/root/.jupyter/mykey.key' # 秘密鍵 c.NotebookApp.notebook_dir = '/root/work' # jupyterのWebUIから見えるファイル構造のルート
$ jupyter notebook --ip='0.0.0.0' --allow-root &
jupyterを止めるときは下記コマンドでプロセスIDを探し、
$ ps aux | grep jupyter
kill
コマンドでプロセスを終了します。$ kill ここにプロセスID
jupyter自動起動
上記の設定だとサーバを起動するたびにjupyterを手動で起動する必要があります。そこでサーバ起動と同時に自動でjupyterが起動するようにします。こちらを参考にしました。
起動スクリプトを作成します。
$ touch ~/start_jupyter.sh
$ vi ~/start_jupyter.sh /root/anaconda3/envs/py37/bin/jupyter notebook --ip='0.0.0.0' --allow-root &
$ chmod 777 start_jupyter.sh
$ chmod u+x /etc/rc.d/rc.local
shutdown -r now
でEC2を再起動します。ブラウザでサーバにアクセスし、jupyterのlogin画面が出たら成功です。
AMIからサーバを再作成
ここまでサーバを構築出来たら、サーバのイメージを作成します。そして作成されたAMIを元に好きなスペックでサーバを立て直します。私はC5.4xlargeインスタンス(メモリ32GiB、ストレージ100GiB)で作成しなおしました。1時間約80円です。まあまあします。
おまけ
データの移動などのために、ec2-user
のディレクトリの権限を開放しておくと便利だと思い、chmod 755 ec2-user
をしたら、外部からsshで接続できなくなりました。次のコマンドで元に戻りました。
$ chmod 755 ec2-user
コメント
コメントを投稿