• ライフサイエンス分野の研究をIT技術で支援します

    このページでは、AWSで借りたCentOS7のクラウドサーバーにおいて、RDkit、NGLview、PyMOLを、Jupyter Notebookから使える環境設定方法について紹介します。バージョンが異なる2つのPyMOLを、異なる方法でインストールして同時に実行できるようにもしています。

    インストールするプログラム等

    • Anaconda3(python, jupyter, pandas, numpy, scipy, matplotlib, seaborn等を含む)
    • RDkit
    • NGLview
    • PyMOL

    AWSでインスタンス の作成

    今回は、AWSのクラウドサーバーを使いました。該当のクラウドサーバーは以下の手順で用意しました。AWSのコンソールにサインインして、EC2のサービス画面に行き、インスタンスの起動ボタンをクリックすると、ステップ1からステップ7の設定をして新しいインスタンスを作成できます。
    ステップ 1: Amazon マシンイメージ (AMI)
    AWS Maketplaceを選択し、検索窓に"centos7"を入力して検索すると、関連するマシンイメージがリストアップされます。
    ここでは、Centos.orgの"CentOS 7 (x86_64) - with Updates HVM"を選択します。

    ステップ 2: インスタンスタイプの選択
    ここでは、リモートデスクトップ接続を行うため、メモリに少し余裕があった方がいいので、メモリ16GBのt3.xlarge(仮想コア数は4)を選択します。
    (2020/6/1現在、東京リージョンのt3.xlargeのインスタンス 利用料金は0.2176USD/時間です。)

    ステップ 3: インスタンスの詳細の設定
    (変更なし)

    ステップ 4: ストレージの追加
    標準設定ではストレージのサイズは8GBとなっています。Anacondaのインストールに少しディスク容量を使用するので、少し大きくします。ここでは30Gに変更します。最初から100GB以上にすると不必要な費用がかかることになるかもしれません。
    (ストレージサイズは後で大きくすることができます。大きく確保したものを、小さくすることはできません。そのため、最初は必要最低限で確保して、必要に応じて拡張するといいでしょう。)
    "終了時に削除"の項目にチェックをいれておくと、インスタンス終了時にストレージも削除されます。Marketplaceのマシンイメージは、標準で、この項目のチェックがOFFになっているようですが、AWSが提供するマシンイメージは、標準でこの項目がONになっています。AWSが提供するマシンイメージをよく利用している人は、このチェックをONにしていないと、終了時にストレージが削除されていないことに気づかないかもしれません(私は、しばらく気づいていませんでした)。


    ステップ 5: タグの追加
    ダグの追加ボタンを押して、キー(左の枠)にName, 値(右の枠)に今回借りるクラウドサーバーの名前(ここではCentOS7_MolEnv)を入れておくといいでしょう。後でも設定できますが、Nameを設定しておくと、複数のインスタンスを区別しやすくなります。

    ステップ 6: セキュリティグループの設定
    (変更なし)


    ステップ 7: インスタンス作成の確認
    "起動"ボタンを押すと、鍵ファイル作成のダイアログが出ます。
    ここでは、"新しいキーペアを作成する"を選択し、キーペア名を"CentOS7_MolEnv"としています。
    "キーペアのダウンロード"をクリックすると、鍵ファイルがダウンロードされます。
    "インスタンスの作成"ボタンは、"キーペアのダウンロード"をクリック後にクリックすることができます。

    EC2のインスタンスリストで、作成したインスタンスを選択して、"接続”ボタンをクリックすると、接続に必要な情報を表示するダイアログが出ます。そこに、鍵ファイルのモード変更の指示と、ログイン用のコマンドについての説明があります。

    chmod 400 {key filename}
    ssh -i {key filename} {user name}@{server address}

    接続ボタンをクリックして出てくる接続情報には、{user name}は、rootとなっていると思いますが、実際には、rootのままではログインできません。
    rootでログインすると、メッセージが出て他の{user name}にするように指示が出ます。
    {user name}をcentosにするように指示が出ると思います。

    OSのアップデート

    クラウドサーバーの準備が整ったら、まず最初に、OSのアップデートを行います。
    クライアントPCで以下のコマンドで実行して、クラウドサーバーにログインします。

    ssh -i {key filename} {user name}@{server address}

    {key file}には、鍵ファイルの名前を指定します。鍵ファイルがカレントディレクトリ以外に存在している場合には、ファイル名の前にパスを記述します。{user name}には、ユーザー名を指定します。AWSで上記手順でCentOS7のイメージを指定した場合には、ユーザー名がcentosとなっていると思います。

    以下のコマンドで、OSのアップデートと再起動を行います。yumの実行時には、本当にインストールするかを確認するメッセージが出ます。一応、少し見てから、yキーを押すと良いでしょう。

    sudo yum update
    sudo reboot

    最後のコマンドで接続が切れます。

    リモートデスクトップ接続の設定

    上の手順で接続が切れているので、再ログインして作業を続けます。
    次のコマンドで再ログインします。

    ssh -i {key filename} {user name}@{IP address}

    次のコマンドで、GNOMEデスクトップをインストールします。

    sudo yum groupinstall "GNOME Desktop"

    このコマンドは少し時間がかかります。

    (参考)次のコマンドでインストールされているプログラム(yumの管理下のもの)を確認できます。

    yum list installed

    GNOMEデスクトップをインストール後には、wget等がインストール済みであることが確認できます。

    次にリモートデスクトップ接続(より正確にはVNC接続)のサーバープログラムをインストールします。

    sudo yum install tigervnc-server

    インストール後に、次のコマンドでディスプレイを作成します。ここではディスプレイの解像度を1440x900に設定しています。

    vncserver -geometry 1440x900

    最初にディスプレイを作成する際には、VNC接続のパスワードを設定します。
    次のメッセージが出てくるのでパスワードを設定します。このパスワードは、クライアントPCからVNC接続をする際に入力するものです。

    You will require a password to access your desktops.
    
    Password:
    Verify:
    Would you like to enter a view-only password (y/n)? n

    最後の質問の答えはnでよいと思います。
    (参考)次のコマンドで作成されたディスプレイを確認できます。

    vncserver -list

    (参考)次のコマンドでディスプレイを削除できます。

    vncserver -kill :ディスプレイ番号
    例: vncserver -kill :1

    (参考)ディスプレイ番号を指定してディスプレイを作成するには次のコマンドを使用します。

    vncserver :ディスプレイ番号
    例: vncserver :1

    ディスプレイを作成すると、ディスプレイ番号に5900を足した数のポート番号で、VNC接続できるようになります。例えば、ディスプレイ番号が1番のディスプレイには5901番ポートでアクセスできます。後述しますが、ポート開放の設定は少し面倒な設定が必要で、通信も暗号化されないので、SSHの機能を使用して、5901番ポートにアクセスするようにします。

    Anaconda3のインストールと環境設定

    ここでは、Pythonの環境設定をするために、Anacondaをインストールします。Anacondaをインストールすると、Pythonでよく使われるモジュールがインストールされます。
    次のコマンドでAnacondaのインストールプログラムを入手します。

    wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh

    ファイルが入手できない場合には、Anacondaのwebページ( https://www.anaconda.com )にアクセスして、インストールプログラムのURLを確認するといいでしょう。
    次のコマンドでAnacondaのインストールを行います。

    bash Anaconda3-2020.02-Linux-x86_64.sh

    最初に、ライセンスアグリーメントの確認と承諾を行います。

    In order to continue the installation process, please review the license agreement.
    Please, press ENTER to continue

    ENTERを押して、画面をスクロールさせてライセンスアグリーメント全文を読みます。

    Do you accept the license terms? [yes|no]

    ライセンスアグリーメントを承諾する場合には、この質問にyesを入力します。

    Anaconda3 will now be installed into this location:
    /home/centos/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を初期化します。yesを選択すると~/.bashrcに、anacondaの設定が追加されます。
    インストールが終了したら、ここで、次のコマンドを実行します。これで、~/.bashrcに追加された設定が有効になります。

    source .bashrc

    (参考)次のコマンドを実行すると、現在の環境にインストールされているモジュールを確認できます。

    conda list

    以下に示すモジュール等がインストールされていることを確認でるはずです。

    python3.7, pip, jupyter, pandas, numpy, sympy, scipy
    matplotlib, seaborn, scikit-image, scikit-learn, pillow

    conda listのリストが長くて探したいモジュールを見つけることが困難な場合にはgrepコマンドを組み合わせて使用して、grepコマンドで指定した文字列を含む行のみを表示するようにすると良いでしょう。

    例:
    conda list | grep numpy

    このコマンドは、conda listの出力の中からnumpyの文字列を含む行のみを表示します。

    ここまでの手順を実行すると、次回ログイン時、もしくは、新しいシェルの起動時にanacondaのbase環境に自動的に入ります(コマンドプロンプトの先頭に(base)が表示されるようになります)。base環境をよく利用する場合には、このままの設定で良いと思いますが、リモートデスクトップ接続の際に使用するコマンド(vncserver :1)がbase環境では正常に動作しないため、ここでは、次のコマンドで、ログイン時、もしくは、シェル起動時にanacondaのbase環境に自動的に入らないようにします。

    conda config --set auto_activate_base false

    (参考)base環境から抜けるためには次のコマンドを実行します。

    conda deactivate

    (参考) base環境に再度入る場合には次のコマンドを実行します。

    conda activate

    新しいPython環境の作成

    Anacondaインストール後には、base環境が利用できるようになっています。Pythonでは、多くのモジュールを利用するため、モジュールが依存している別のモジュールのバージョンの違いによってコンフリクトが発生することがあります。例えば、モジュールAがモジュールCのバージョン1に依存していて、モジュールBがモジュールCのバージョン2に依存しているといった状況では、モジュールAとモジュールBは同時に利用できないといったことが発生すると考えられます。場合によってはモジュールBの古いバージョンなら、モジュールCのバージョン1でも動作するかもしれません。pythonのバージョンや、モジュール導入時のコマンド(pip, conda)の使い方等によって、用意した環境で目的のプログラムが正常に動作しないことがあります。そのために、1つの環境に、いろいろなモジュールを導入するのではなく、複数の環境を用意して、そこに問題が発生しない組み合わせのモジュール(のバージョン)を導入して、用途によって環境を切り替えて使用するとよいでしょう。

    次のコマンドで、base環境とは別の環境(分子研究用の環境(molenv))を作成します。

    conda create -n molenv python=3.6 anaconda

    python=X.Xは、pythonのバージョンを指定するためのものです。ここでは、3.6を指定しています。使用するモジュール、ソースコードによっては、特定のバージョンのPythonでしか正常に動作しないことがあるので、用途に応じてpythonのバージョンを指定します。
    ここでコマンドの引数にanacondaを指定しておくと、base環境に含まれるモジュールを新しい環境にインストールすることができます。

    (参考)利用可能な環境は次のコマンドで確認できます。

    conda env list

    RDkitとNGLviewのインストール

    まず、次のコマンドで、新しく作成した環境(molenv)に入ります。

    conda activate molenv

    以下のコマンドでRDkitとNGLviewをインストールします。

    conda install -c conda-forge rdkit
    conda install -c conda-forge nglview
    jupyter-nbextension enable nglview --py --sys-prefix

    環境のクローン作成

    ここでは、ここまでの環境をこのまま残して、これまでの環境のクローンを別に2つ作成し、そのそれぞれに、異なる方法でPyMOLをインストールすることにします。
    次のコマンドで、pymolenv1, pymolenv2を作成します。

    conda create -n pymolenv1 --clone molenv
    conda create -n pymolenv2 --clone molenv

    Pythonの環境は、比較的壊れやすいので、新しいモジュールをインストールする前には、環境のクローンを作成しておくとよいでしょう。

    PyMOLのインストール1

    pymolenv1の環境には、githubで公開されているpymolをインストールします。

    conda activate pymolenv1
    conda install -c conda-forge pmw
    conda install -c conda-forge mmtf-python
    
    sudo yum install epel-release
    sudo yum install gcc gcc-c++ python-devel python3-devel python3-tkinter
    sudo yum install glew-devel libpng-devel freetype-devel
    sudo yum install libxml2-devel glm-devel netcdf-devel
    sudo yum install git
    
    git clone https://github.com/schrodinger/pymol-open-source.git
    cd pymol-open-source/
    python setup.py build
    python setup.py install --prefix=/home/centos/anaconda3/envs/pymolenv1

    PyMOLのインストール2

    pymolenv2の環境には、samoturkのチャンネルからconda installのコマンドでインストールできるPyMOLをインストールします。こちらは、少しバージョンが古いです。この方法は、管理者権限がなくてもインストール可能なのがいいところです。

    conda activate pymolenv2
    conda install -c samoturk pymol
    conda install -c conda-forge pmw
    conda install -c anaconda libglu

    クライアントPCからのリモートデスクトップ接続

    準備

    リモートデスクトップ接続をする前に、一旦、クラウドサーバーからログアウトして、特別なオプションを追加して再ログインします。
    まず、次のコマンドでログアウトします。

    exit

    次のコマンドで、再ログインします。

    ssh -i {key filename} {user name}@{IP address} -L 5901:localhost:5901

    ここで使用している-Lオプションは、クラウドサーバーの5901番ポートをクライアントPCの5901番ポートに接続するためのものです。実際には、SSHで使用する22番ポートのみを使用しています。この方法を使わない場合には、クラウドサーバーの5901番ポートを解放する必要があります。また、解放したとしても、途中の通信を暗号化することができません。そのため、SSHを利用して、5901番ポートにアクセスしています。

    MacOSXからの接続

    MacOXからは、Finderを起動→メニューバーの"移動"→サーバーへ接続、出てきたダイアログに

    vnc://localhost:5901

    を入力して、OKボタンを押します。パスワード入力のダイアログが出てきたら、上で設定したパスワードを入力します。

    Windowsからの接続

    Windowsから接続する場合には、UltraVNCをインストールするとVNC接続が可能です。(UltraVNC ViewerのみをインストールすればVNC接続が可能です。)

    Jupyter Notebookの起動

    リモートデスクトップ接続したデスクトップ上で、端末を起動します。端末の起動は、デスクトップの背景のどこかで右クリックして出てきたメニューから"端末を開く"をクリックするといいでしょう。クライアントPCの設定等の違いにより、GUIの言語が異なっていることがあります。起動した端末で以下のコマンドを実行すると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)

    NGLvewのサンプルプログラム

    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')

    GUIでのPyMOLの起動

    端末を新しく開いて、次の2つのコマンドを実行するとpymolenv1のPyMOLを起動できます。

    conda activate pymolenv1
    pymol

    別の端末を新しく開いて、次の2つのコマンドを実行するとpymolenv2のPyMOLを起動できます。

    conda activate pymolenv2
    pymol

    2つの端末を使用すると、2つのPyMOLを同時に起動することができます。