(2020年5月19日 Rosetta 3.12, macOS Catalina 10.15.4でのインストール方法を追記)
(2021年2月17日 コンパイルがうまく行かない場合の修正法を追記)
Washington大学のDavid Baker研究室で精力的に開発されているタンパク質モデリングソフトウェアパッケージ Rosetta ver3.12(2020年3月9日)のダウンロードとインストール方法についてです。
非常にポテンシャルの高いソフトウェアなのですが、正直ソースコードがスパゲッティすぎて完全なメンテナンスが行き届いていないし、インストールも結構難しかったりします。ここではmacOS、Linux (CentOS 7, Ubuntu 18.04向け)にインストール方法を書いてみようと思います。
環境
マシンのOSはいずれか1つ
- macOS Big Sur 11.2.1 + Homebrewを使える状態になっている
- CentOS
- Ubuntu
macOS Big Sur, Catalina, CentOS 7.4, Ubuntu 18.04, Ubuntu 20.04で動作を確認しました。
Rosettaのソースコード(必要であればバイナリなども)をダウンロード
まずは https://www.rosettacommons.org/software/license-and-download にアクセスして、Need a License? Start Here のところをクリックすると、ライセンス発行のためのユーザー登録を促されます。
フォームを埋めてSubmitすると、すぐに書いたメールアドレスのところにダウンロードのためのユーザー名とパスワードが送られてきます。このウェブサイトにアクセスします。
そのウェブサイトにはリンクがいくつか書かれていますが、Last Numbered Releaseのところに書かれているRosetta3.12のDownload Rosetta 3.12をクリックし、Rosetta 3.12 source - as one bundle (6.1G)のところをクリックすると、 rosetta_src_3.12_bundle.tgz
というファイルのダウンロードが開始されます。ただ今となってはWeekly Releaseも割と安定している上に、最新のRosettaの機能が追加されているので、こちらの最新版をゲットする方がよいです(例えば2020.50など)。ただ、以下では3.12という表記のままで書かせていただきます。
ここでは他にもRosetta 3.12 Online User Guideへのリンクやバイナリ版も提供されています。バイナリ版を利用すれば、おそらくこの先の細かいインストール作業が全く必要ありませんが、ソースコードからのインストール方法を知っておくことはとても利用の幅が広がって良い感じなので、ぜひマスターしておきましょう。
rosetta_src_3.12_bundle.tgz
をダウンロードし終わったら、
tar zxvf rosetta_src_3.12_bundle.tgz
で解凍するとrosetta_src_2020.08.61146_bundle
というディレクトリが生成されます。この中にRosetta 3.12のすべてが詰まっています。しかし、このディレクトリ名は長ったらしい上に、バージョン名がわからないので私は嫌です。なので、私は以下の操作で、ホームディレクトリ上にRosetta3.12
という名前で置くことにします。
# rosetta_src_2020.08.61146_bundleディレクトリをホーム上のRosetta3.12というディレクトリに移す
mv rosetta_src_2020.08.61146_bundle ~/Rosetta3.12
この後、コンパイルとインストール作業を行い、プログラムを使えるようにする準備の儀式を行います。まずは次の項の「Rosettaのコンパイルについての概要」をお読みになった上で、お使いのOSに応じたコンパイルを初めてください。
Rosettaのコンパイルについての概要
流れとしては、いずれのOSにおいても、まずはふつうにコンパイル&インストール(serial版;1コアのみの計算版)を行い、次にMPIの設定を行った上でMPI版のインストール、とするとうまくいきます。
コンパイルについてはsconsを使った方法とninja
を使った方法があります。どちらも大きいプロジェクトをコンパイルするときに使うシステムです。とくにシングル版の方はninja
の方が楽で早いです。
また、Rosettaに含まれるいくつかの重要な実行プログラムは、mpiを設定した上でのインストールを行うと、その計算機が持つCPU/threads数に応じて並列計算をさせることができるようになります。これはマルチコアプロセッサが当たり前になった今の時代ではぜひ利用するべき特長なので、MPI付きのインストールを強く推奨します。
重要なこととして、macOSでMPI版をコンパイルする場合は、コンパイラにApple LLVM(/usr/bin/gcc
)を指定しない限り、確実に失敗します。さらに、このときxcodeの設定を1つ追加で入れてやる必要があります(後述)。一方でLinux OSではそんなことはなく(たぶん)、gccでもclangでもいけます。
実際のコンパイル手順
macOS (Big Sur/Catalina)へのインストール(serial版)
まずApp storeから最新版のXcodeをインストールしておきます。macOSの場合はコンパイラとしてApple LLVM(/usr/bin/gcc
の実体がこれ)を利用した方がインストールがうまくいきます。Homebrewで入れたgccでのコンパイルはうまくいかないようです(Rosetta側のソースコードの環境判定で失敗するようです)。
事前準備として、XCodeを入れたあと、ターミナルから以下のコマンドを入れておきます。
sudo xcode-select -s /Library/Developer/CommandLineTools
パスワードを求められるので入力してEnterを押す。次に、以下のコマンドで、使おうとするコンパイラがApple LLVMであることを確認しておきます。
$ /usr/bin/gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.3 (clang-1103.0.32.59)
Target: x86_64-apple-darwin19.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
それからHomebrewでninja
とcmake
もインストールしておきます。
brew install ninja cmake
また、Homebrewでインストールしたrdkit, mmtf-cpp, boostなどを入れていると自動的にそれらを優先的に使おうとした結果、Rosettaのインストールに失敗します。そこで、これらをすでにインストールしている場合、Rosettaのインストール前にこれらを一時的に無効化するために
# Homebrewですでにインストールされている場合のみ実行
brew unlink rdkit
brew unlink mmtf-cpp
brew unlink boost #boost@1.57や1.60がある場合はそれも
を実行します。
これらを確認したら、~/Rosetta3.12/main/source/
に移動し、ninja_build.py
を使ってインストールを開始します。
# ~/Rosetta3.12/main/sourceに移動
cd ~/Rosetta3.12/main/source
CC=/usr/bin/gcc CXX=/usr/bin/g++ ./ninja_build.py -remake release
MacBookだとだいたいコンパイル&インストールに60分くらいかかるような気がします。もし途中で止めちゃった場合でも、同じコマンドを打てば再開してくれます。
Rosettaのインストールがうまく終わったら、先程brew unlink
したパッケージに対して忘れずにbrew link
しておきましょう。
macOSへのインストール(OpenMPI版)
CPUのコア数分だけ同時に並列計算してくれるようにするためのインストール設定です。上記のserial版を入れておいたあと(入れなくてもいける?少なくともXcodeとsudo xcode-select -s /Library/Developer/CommandLineTools
をしておく必要はある)、以下の手順に従えばopen-mpiを使ってAbinitioRelax
などがマシンのコア数分並列化されたMPI版をインストールすることができます。
まずはopen-mpiを入れておく必要があります。これはHomebrewでも配信されているので、
brew install open-mpi
でインストールできます。インストールが終わったら、mpicc
(C用のコンパイラのmpi版)とmpicxx
(C++用のコンパイラのmpi版)コマンドが利用可能になっているはずなので確認してみる。注意点として、openmpiのコンパイラであるmpicxx
はインストール時に指定するコンパイラに直接依存する性質があります。つまり、もしgcc-5でopenmpiをインストールすると、mpicxx
はg++-5依存になります。
$ which mpicxx
/usr/local/bin/mpicxx
そして、RosettaのOpenMPI版を使うためには、このmpicxx
がApple LLVM(Apple clang version)依存になっていることを確認する必要があります。
$ mpicc --version
Apple clang version 11.0.3 (clang-1103.0.32.59)
Target: x86_64-apple-darwin19.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
この状態で、cd ~/Rosetta3.12/main/source
で移動し、
./scons.py -j8 bin mode=release extras=mpi
とすると、インストールを開始します。MPI版のインストールはninjaでは対応していないため、sconsを使った方法になります。sconsは何も設定をしないと、1プロセスしか使用しないのでインストールが激遅なのですが、-j8
とすると、ここの数字で指定した8コアで並列でインストール作業を進めてくれる。MacBook Proなどの場合は4コアCPUなので-j4
とするのが良いでしょう。これもそこそこ時間がかかります。
ちなみにもしApple LLVMでなく、gcc-5に依存したopenmpiでRosetta MPI版のコンパイルをしようとすると、macOSに限ってこんなWarningsが頻発することになります。
warning: section "__textcoal_nt" is deprecated
.section __TEXT,__textcoal_nt,coalesced,pure_instructions
^ ~~~~~~~~~~~~~
これが出ている間はまだWarningsなのでセーフですが、libcpp.dylib
のところでリンクしようとするとエラー落ちしてしまう。これを回避するためには、いろいろ調べてみたところ、上述のように結局Apple LLVMでビルドしたOpenMPIを利用するしかないようです。
CentOS 7.4へのインストール
上記macOSのやり方とほぼ同じです。Linuxの場合はコンパイラとしてgcc-5, clangどちらを選んでもたぶん問題なく動きます。
まずninja(ninja-build)
と適当なコンパイラgcc-5
かclang
をインストールします。ninja_build.py
を利用したインストール方法ではcmake
が必要になりますが、CentOS 7.4の場合はcmake3
をyum
で入れておいて、cmake
にシンボリックリンクを貼ってごまかすという手が簡単だと思います(もちろんcmakeはソースからのビルドでもOK)。
# ninja
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/n/ninja-build-1.7.2-2.el7.x86_64.rpm
rpm -Uvh epel-release*rpm
yum -y install ninja-build.x86_64
# symbolic link
ln -s /bin/ninja-build /bin/ninja
# clang
yum -y install clang clang-devel
# cmake3をyumでインストールする
yum -y install cmake3
# インストールされた/bin/cmake3につながる/bin/cmakeシンボリックリンクを作成
sudo ln -s /bin/cmake3 /bin/cmake
そしたら適当なディレクトリ(例えば/usr/local/Rosetta3.12
)にソースコードを展開し、main/source
に入って以下を実行する。
CC=/bin/clang CXX=/bin/clang++ ./ninja_build.py -remake release
環境変数CC, CXX
を付けておくとコンパイラを指定できる。こっちの方が早いようです。
mpi版も同様なので以下省略。参考までに、一番下にOpenMPIのソースからのインストール方法を載せておきます。
(そういえばclangでのOpenMPI版は当方で試していません……gcc-5.4コンパイラを使ったopenmpiならば動作保証します)
ubuntu 18.04へのインストール
大体はCentOSと一緒ですが、依存が足りなかったりclangのバージョンが違ったりします。
sudo apt install ninja-build zlib1g-dev clang-3.12 cmake build-essential
で、もしかすると build-essential
はいらないかもしれません。
あとは /path/to/Rosetta3.12/main/source
から
export CC=/usr/bin/clang-3.12
export CXX=/usr/bin/clang++-3.12
./ninja_build.py -remake release
MPI版もmacOSのときと同様です。
CentOS 8.0へのRosetta 3.12のインストール
2020年1月6日にRosetta 3.12のCentOS 8.0へのインストールを行ったときの記録です。
使ったコンパイラはClang 7.0.1, ninja 1.8.2, OpenMPI 3.1.4です。GNU Compiler 8.2.1を使おうとするとうまくコンパイルできませんでした。
# CentOS 8.0へのninjaのインストール
dnf --enablerepo=PowerTools install ninja-build
# ここでninja --versionと打ってみてバージョン情報が帰ってくることを確認する(1.8.2)
# Python 2のインストール
dnf install -y @python27
# pythonコマンドでpython2を呼び出せるようにしておく(インストール後に削除可)
ln -s /bin/python2 /bin/python
# Clang 7.0.1のインストール
dnf -y install clang
# Clang 7.0.1でOpenMPIをコンパイルしておく(下記の参考:OpenMPIのインストール方法)
# Rosetta 3.12の解凍
tar zxvf rosetta_src_3.12_bundle.tgz
# Rosettaディレクトリ内部のmain/sourceに各自で移動する
cd /path/to/Rosetta/main/source
# Rosetta 3.12のMPIなしコンパイル
# CC=/bin/clang CXX=/bin/clang++ ./ninja_build.py -remake release
# ninja-buildを使ってインストールしようとすると、Ryzen系ではハングアップすることがあるみたいなので、sconsを使ってインストールする。
## CC, CXXの値はgcc, g++でも構わない。
CC=/bin/clang CXX=/bin/clang++ ./scons.py -j16 bin mode=release
# SCONSを使ったMPIインストール。先にmpicc, mpicxxがそれぞれclang7.0.1を利用したOpenMPIになっていることを確認する
# > mpicc --version
# clang version 7.0.1 (tags/RELEASE_701/final)
# Target: x86_64-unknown-linux-gnu
# Thread model: posix
# InstalledDir: /bin
# > mpicxx --version
# clang version 7.0.1 (tags/RELEASE_701/final)
# Target: x86_64-unknown-linux-gnu
# Thread model: posix
# InstalledDir: /bin
./scons.py -j16 bin mode=release extras=mpi
参考:OpenMPIのインストール方法
OpenMPIはコンパイル時(./configure
時)に設定するコンパイラの指定(CC
, CXX
, FC
の指定)に大きく依存します。したがって、共用クラスタコンピュータのようなみんなで使うマシン上にインストールするときは、コンパイラ名を明示したインストールディレクトリ先を指定しておくと良いでしょう。
## OpenMPI 4.0.3 ##
# wgetでソースコードをダウンロードして解凍
wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.3.tar.bz2
tar jxvf openmpi-4.0.3.tar.bz2
cd openmpi-4.0.3
# ./configureはインストール予備動作。インストール先の指定(--prefix)とコンパイラの指定(CC, CXX, FC)を行う。
# /usr/local/bin/以下にあるgcc, g++, gfortran(ver 9.3.0)を使ったOpenMPIをインストールする場合は以下の例
# 使用したいコンパイラをここで指定する
./configure --prefix=${HOME}/apps/openmpi/4.0.3_gcc9.3.0 CC=/usr/local/bin/gcc CXX=/usr/local/bin/g++ FC=/usr/local/bin/gfortran
# 8コアでmakeとインストールを行う
make -j8 all ; make install
# このopenmpiを最優先で使いたいときは以下のコマンドを実行しておく。
MPIROOT=${HOME}/apps/openmpi/4.0.3_gcc9.3.0
export PATH=$MPIROOT/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPIROOT/lib
export MANPATH=$MANPATH:$MPIROOT/share/man