(2021.6.19 修正)
修正前:
conda install -c rdkit rdkit
修正後:
conda install -c conda-forge rdkit
(手順変更に関する詳しい説明は、本文内にあります。)
Amazon Web Service (AWS) のAmazon Linux 2 AMIを用いた分子研究用環境の構築手順を紹介します。AMIは、Amazon Machine Imageの略で、クラウドのサーバーを借りる際にサーバーのOS+αとして使用するものです。Amazon Linux 2 AMIは、AWS用にカスタムされたLinuxで、セッションマネージャーを利用したセキュリティレベルの高い接続や、ストレージサービスS3の利用が簡単にできます。Amazon Linux 2はRedHat系のLinuxデストリビューションです。AWSでは、多くのAMIが用意されています。 RedHatやUbuntuのAMIも利用可能です。LinuxだけでなくWindowsサーバーのAMIもあります。
ここでは、Anaconda、RDkit、NGLview、PyMOLを使えるように設定します。デスクトップ環境には、MATEを使用しています。MATEはGNOME2をベースに作られたデスクトップ環境です。
ここで紹介する環境には、MolDesk、myPresto Portal、JChemPaint、AmberTools20、gromacs2020.02がインストールできることも確認しています。
AWSのコンソールにサインインする-> EC2 -> インスタンスの作成
ステップ 1: Amazon マシンイメージ (AMI)
Amazon Linux 2 AMI (HVM), SSD Volume Typeを選択。
ステップ 2: インスタンスタイプの選択
t3a.xlargeを選択 (仮想コア数4、メモリ16GBのもの)
ディスプレイを使用する場合には、少しメモリに余裕があった方がいいだろう。
2020/8/18現在、アジアパシフィック(東京)リージョンのt3a.xlargeの料金は、0.1958USD/時間である。
1時間20円で計算すると、1日480円、1ヶ月は約15,000円の計算になる。使用しない時にサーバーを停止しておけばコストを節約できる。
ステップ 3: インスタンスの詳細の設定
(変更なし)
ステップ 4: ストレージの追加
ルートボリュームのサイズを30Gに設定
(最初は必要最低限で確保して、必要に応じて拡張するとよい。大きく確保したものを、小さくすることはできない。)
ステップ 5: タグの追加
タグの追加ボタンを押して、
Name, Amazon_Linux2_MATE
を設定する。Nameのタグをつけておくとインスタンスのリストで、インスタンスを区別しやすくなる。
ステップ 6: セキュリティグループの設定
セキュリティグループ名を次のものに設定する。
Amazon_Linux2_MATE-sg
(標準でSSH接続が可能な状態になっているので、そこは変更しない。)
後で、セキュリティグループの設定を変更する場合に、名前が付いていると分かりやすい。セッションマネージャーの設定をすれば、SSH接続で使用するポートを閉じても、サーバに接続できる。
ステップ 7: インスタンス作成の確認
"起動"ボタンを押すー>鍵ファイルを設定-> "インスタンス の作成"ボタンを押す
クライアントPCからサーバーへの接続方法は、AWSマネージコンソールで、EC2->実行中のインスタンスでインスタンスのリスト画面を出し、インスタンスを選択後に、接続ボタンをクリックする。次のようなダイアログが出る。このダイアログの指示に従って操作をするとサーバーに接続できる。
以下は、MacOSXやLinux(WindowsのWSLを含む)のターミナルから接続する場合について説明する。
鍵ファイルを作業するディレクトリに移動した後で、まず、鍵ファイルのモードを次のコマンドで変更する。
chmod 400 {鍵ファイル名}
その後に、次のコマンドで、サーバーにアクセスする。
ssh -i {鍵ファイル名} ec2-user@{サーバーURL}
このコマンドは、上のダイアログに表示されているので、コピー&ペーストして実行するとよい。
ホームディレクトリで以下のコマンドを実行する。
sudo yum update
amazon-linux-extras list
sudo amazon-linux-extras install mate-desktop1.x
sudo amazon-linux-extras install epel
sudo yum install tigervnc-server
sudo yum install chromium
2つ目のamazon-linux-extras listは、単に表示しているだけなので、実行しなくてもよい。このコマンドで、amazon-linux-extrasでインストールできるパッケージを確認できる。最後のコマンドでは、ブラウザ(Chromium)をインストールしている。
次に、vnc接続のパスワードを設定する。
vncpasswd
以下の入力項目が出る。
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
最後の質問は、表示専用で接続するためのパスワードで、ここではnを入力する。
次に、.vnc/xstartupに、ディスプレイ作成時に開始されるセッションプログラムを設定する。以下に、emacsをインストールして、ファイルを作成する方法を示す。viを使用する人も多いかもしれない。
sudo yum install emacs
emacs .vnc/xstartup
以下の内容に編集する
#!/bin/sh
exec mate-session &
作成したファイルに、次のコマンドで実行権限を与える。
chmod +x .vnc/xstartup
ここで一旦ログアウトする。
exit
クライアントPCから次のコマンドで再接続する。-Lオプションを使用して、クライアントPCの5901番ポートを通して、サーバーの5901番ポートに接続できるようにする。これは、VNC接続にサーバーの5901番ポートを使用するためである。
ssh -i {鍵ファイル名} ec2-user@{サーバーURL} -L 5901:localhost:5901
ログイン直後に表示されるメッセージにアップデートプログラムがあると表示された場合には再度アップデートする。
sudo yum update
クライアントPCの言語設定がログイン時にサーバーに引き継がれることがある。
ログイン後の言語設定(環境変数LANG)がどのようになっているかは次のコマンドで確認できる。
env | grep LANG
例えば、以下のような表示が出る。日本語、もしくは、英語になっていることが多いだろう。
LANG=ja_JP.UTF-8
LANG=en_US.UTF-8
LANG=ja_JP.UTF-8になっている場合に、日本語の環境設定をしておかないと、デスクトップの一部の表示が文字化けする。
日本語の環境設定をする場合には以下のコマンドを実行して、日本語入力用プログラムと日本語フォントをインストールする。
sudo yum install ibus-kkc
sudo yum install google-noto-sans-japanese-fonts
.bashrcを編集する。
emacs .bashrc
末尾に以下を追加する。
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus
ibus-daemon -drx
編集後に、編集した内容を次のコマンドで反映させる。
source .bashrc
ディスプレイの言語を切り替えるには、後述するディスプレイの作成前(vncserver :1を実行する前)に、
export LANG=en_US.UTF-8
もしくは、
export LANG=ja_JP.UTF-8
のコマンドを実行する。
次のコマンドでディスプレイを作成する。(1番ディスプレイを作成する場合)
vncserver :1
次のコマンドでディスプレイを確認できる。
vncserver -list
(参考)ディスプレイの削除には、次のコマンドを使用する。
vncserver -kill :1
ここでは1番ディスプレイの作成、削除の例を挙げたが、他の番号でディスプレイを作成することができる。同時に複数のディスプレイの作成も可能。VNC接続時のポート番号は、5900+(ディスプレイ番号)となる。1番ディスプレイの接続用ポートの番号は5901番となる。
1番ディスプレイが作成されていれば、サーバーの5901番ポートに接続することで、リモートデスクトップ接続を開始する。上述の手順で、2回目にSSH接続をした際に、-Lオプションを指定して、クライアントPCの5901番ポート経由で、サーバーの5901番ポートに接続できるようになっている。つまり、ここでは、サーバーにリモートデスクトップ接続をするには、クライアントPCの5901番ポートに接続すればよい。
VNC接続では通信が暗号化されないので、暗号化されているSSHでの通信を利用して、VNC接続をすることにする。sshコマンドでの接続時に-Lオプションを使用すると、SSHで使うポート(22番ポート)を経由して、ローカルホスト(クライアントPC)の5901番ポートとサーバーの5901番ポートを接続できる。この方法を使用すると、サーバーの5901番ポートを閉じた状態でVNC接続ができる。
MacOSXの場合には、Finderを起動後に、メニューバーから"移動"->"サーバーへ接続"を選択後に出てくるダイアログに、次の情報を入力すると接続用のダイアログが現れる。
vnc://localhost:5901
接続開始時に、vncpasswdで設定したパスワードを入力する。
Windowsの場合には、VNC接続用のプログラムをインストールする必要がある。
次の図は、日本語の環境設定済みの状態で、LANG=ja_JP.UTF-8が設定されている状態で、ディスプレイを作成してからVNC接続した際の画面。
次の図は、LANG=en_US.UTF-8が設定されている状態でディスプレイを作成後にVNC接続した際の画面。
次のコマンドで、Anacondaをインストールする。上の手順で、リモートデスクトップ接続した場合には、サーバーのデスクトップ環境と、ターミナルの両方で接続している。以下の作業は、最初に接続したターミナルで作業した方が作業が簡単かもしれない。
wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
bash Anaconda3-2020.02-Linux-x86_64.sh
このコマンド実行後に、ライセンスの確認と承諾を行う。ENTERキーを押して、ライセンスについての文章をスクロールさせていくと、次のメッセージが出る。
Do you accept the license terms? [yes|no]
承諾する場合にはyesと入力する。
Anaconda3 will now be installed into this location:
/home/ec2-user/anaconda3
- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below
標準のインストール先(~/anaconda3/)にインストールする場合には、そのままENTERキーを押す。
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
ここではyesを入力する。yesを入力すると、インストーラープログラムがAnaconda3を初期化する。また、~/.bashrcに、anacondaの設定が追加される。
インストールが終了したら、ここで、次のコマンドを実行します。これで、~/.bashrcに追加された設定が有効になる。
source .bashrc
このコマンドを実行すると、Anacondaのbase環境に入る。base環境に入るとコマンドプロンプトの行の先頭に(base)が表示されるようになる。
次のコマンドを使用すると、ログイン時、もしくは、シェルの起動時にbase環境に入らないようになる。ここでは、そうした設定にしておく。
conda config --set auto_activate_base false
次のコマンドで一旦base環境から抜ける。
conda deactivate
再度、anacondaのbase環境に入るには次のコマンドを実行する。
conda activate base
ここまでの操作で、Jupyter Notebookを使用できる。(分子研究用のモジュールはまだ使用できない。)
リモートデスクトップ接続したウィンドウで、MATE端末を起動する。MATE端末は、デスクトップ画面左上の"アプリケーション"->"システムツール"を選択後に出てくるメニューから起動する。
MATE端末で以下のコマンドを入力するとJupyter Notebookを起動できる。
conda activate base
jupyter notebook
New -> Python3を選択することで、次の図のようにPythonの命令を実行できる画面になる。
次に、分子研究用のモジュール(RDkitとNGLview)をインストールするが、その前に、base環境から、molenvという名前で別の環境を作成しておく。ここでは、pythonのバージョンは3.6を指定している。
conda create -n molenv python=3.6 anaconda
conda activate molenv
conda install -c conda-forge rdkit
conda install -c conda-forge nglview
jupyter-nbextension enable nglview --py --sys-prefix
conda deactivate
(補足)
2021.6.19に、rdkitのインストール時に使用するチャンネルをrdkitからconda-forgeに変更した。
この記事を最初に書いた時には、rdkitチャンネルからインストールしたrdkitでも問題なかったが、2021.6.19時点では、rdkitのチャンネルからインストールしたrdkitは、import時に次のエラーが発生した。
rdkitチャンネルからインストールしたrdkitでも、次のコマンドを実行すると正常に動作した。
conda install libboost=1.65.1
エラーメッセージに、libboost_python3.so.1.65.1が無いと出ているので、バージョンを指定してlibboostをインストールするとエラーは発生しなくなった。
conda-forgeからインストールしたrdkitはimport時にエラーが発生しなかった。確認したところ、インストール時のチャンネルが、rdkitとconda-forgeとで、インストールされるrdkitのバージョンが異なっていた。
以下の環境設定手順では、PyMOLを2つの異なる方法でインストールする。それぞれの方法でインストールしたPyMOLは、バージョンが異なっている。Pythonの実行環境は、多くのモジュールを利用し、モジュールの多くが別のモジュールを利用している。それぞれのモジュールが、利用しているモジュールの特定のバージョンに依存している場合があり、使用するモジュールの組み合わせによっては、正常に動作しなくなることがある。そのため、既存の環境を拡張する場合には、既存の環境を別名で複製して、複製した環境を拡張した方がよい。ここでは、molenv環境を、それぞれコピーしてpymolenv1とpymolenv2の2つを作成し、それぞれに異なる手順でPyMOLをインストールする。
conda create -n pymolenv1 --clone molenv
conda create -n pymolenv2 --clone molenv
ここでは、githubからソースコードを取得して、サーバーでビルドしてインストールする方法について紹介する。
conda activate pymolenv1
conda install -c conda-forge pmw
conda install -c conda-forge mmtf-python
sudo yum install gcc gcc-c++ python3-devel python3-tkinter
sudo yum install glew-devel libpng-devel freetype-devel
sudo yum install libxml2-devel glm-devel netcdf-devel git
git clone https://github.com/schrodinger/pymol-open-source.git
cd pymol-open-source/
python setup.py build
python setup.py install
conda deactivate
ここでは、ビルド済みのPyMOLを、インターネット経由でsamoturkチャンネルからcondaコマンドでインストールする方法を紹介する。ビルド済みpymolの実行時に、pmwとlibgluのライブラリを使用するので、それも合わせてインストールする。
conda activate pymolenv2
conda install -c samoturk pymol
conda install -c conda-forge pmw
conda install -c anaconda libglu
conda deactivate
リモートデスクトップ接続したウィンドウで、MATE端末を起動する。MATE端末は、デスクトップ画面左上の"アプリケーション"->"システムツール"を選択後に出てくるメニューから起動する。
MATE端末で以下のコマンドを入力するとJupyter Notebookを起動できる。
conda activate pymolenv1
jupyter notebook
以下のサンプルコードをコピ-&ペーストで貼り付けると、実行テストを容易に行える。
RDkitのサンプルコード
from rdkit import Chem
from rdkit.Chem import Draw
mol=Chem.MolFromSmiles('CCC(CC)O[C@@H]1C=C(C[C@@H]([C@H]1NC(=O)C)N)C(=O)OCC')
Draw.MolToImage(mol)
NGLviewのサンプルコード
import nglview
view=nglview.show_pdbid('4hP0')
view
PyMOLのサンプルコード
from pymol import cmd
cmd.fragment('ala')
cmd.orient()
cmd.png('/tmp/foo.png', dpi=0.0, ray=1)
from IPython.display import Image
Image(filename='/tmp/foo.png')
MATE端末を起動後に、次のコマンドを実行するとPyMOLを起動できる。
conda activate pymolenv1
pymol
pymolenv2をアクティベートした後でpymolコマンドを実行すると別のバージョンのPyMOLを実行できる。2つの端末を起動して、それぞれの端末で、pymolenv1とpymolenv2をアクティベートして、pymolを実行すると、バージョンが異なるPyMOLを同時に起動することができる。
クラウドのサーバーは使用しない時には、こまめに停止しておいた方がよい。インスタンス(サーバー)を起動している時間の分だけ料金が発生するので、起動したままの状態で長い時間放置すると予想外の出費をするはめになることがあるので、注意が必要である。
インスタンスを停止させていても、ディスク(上記設定では30GBのディスク、EBS)の料金が発生するので、使わないサーバーは終了(削除)した方がよい。ディスクの料金は、インスタンスの料金よりも小さな金額であることが多いが、ディスクを確保した状態で長い期間放置すると累積の請求金額が比較的大きくなることがある。インスタンス終了後時に、ディスクが削除されるか、削除されないかは、インスタンス作成の"ステップ4:ストレージの追加"で設定する。標準設定で、終了時に削除のチェックが付いている場合と付いていない場合があるので注意が必要である。
クライアントPCのVisual Studio codeからサーバーにアクセスできるように設定する。
(参考URL) https://qiita.com/takao-takass/items/9f81d5095924280966ae
Amazon S3 (Amazon Simple Strage Service)をサーバーから利用できるようにする。
Amazon S3のページ: https://aws.amazon.com/jp/s3/
セッションマネージャーを設定して、サーバーにセッションマネージャーで接続できるようにする。
セッションマネージャーを設定すると、ブラウザのAWSコンソールからサーバーに鍵ファイルなしで接続できる。
(参考URL) https://masakimisawa.com/ssm-ec2-ssh/
サーバーのセキュリティグループの設定を変更して22番ポートを閉じる。
ファイルの転送は、S3を経由して行うこともできるが、クライアントPCにいくつか専用ソフトウェアをインストールして設定すれば、22番ポートを閉じたサーバーに、ssh, scpを使った接続が可能になる。
(参考URL)https://dev.classmethod.jp/articles/session-manager-launches-tunneling-support-for-ssh-and-scp/