Help us understand the problem. What is going on with this article?

タンパク質モデリングソフトウェアパッケージRosetta 3.12のインストール方法 for macOS, Linux

(2020年5月19日 Rosetta 3.12, macOS Catalina 10.15.4でのインストール方法を追記)

Washington大学のDavid Baker研究室で精力的に開発されているタンパク質モデリングソフトウェアパッケージ Rosetta ver3.12(2020年3月9日)のダウンロードとインストール方法についてです。

非常にポテンシャルの高いソフトウェアなのですが、正直ソースコードがスパゲッティすぎて完全なメンテナンスが行き届いていないし、インストールも結構難しかったりします。ここではmacOS、Linux (CentOS 7, Ubuntu 18.04向け)にインストール方法を書いてみようと思います。

環境

マシンのOSはいずれか1つ
* macOS Catalina 10.15.4(これ以前は未検証) + Homebrewを使える状態になっている
* CentOS
* Ubuntu

macOS Catalina 10.15.4, CentOS 7.4, Ubuntu 17.10, Ubuntu 18.04で動作を確認しました。

Rosettaのソースコード(必要であればバイナリなども)をダウンロード

まずは https://www.rosettacommons.org/software/license-and-download にアクセスして、Need a License? Start Here のところをクリックすると、ライセンス発行のためのユーザー登録を促されます。
フォームを埋めてSubmitすると、すぐに書いたメールアドレスのところにダウンロードのためのユーザー名とパスワードが送られてきます。このウェブサイトにアクセスします。

そのウェブサイトにはリンクがいくつか書かれていますが、 Rosetta 3.12 source - as one bundle (6.1G)のところをクリックすると、 rosetta_src_3.12_bundle.tgz というファイルのダウンロードが開始されます。ここでは他にも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 (Catalina 10.15.4)へのインストール(serial版)

まずApp storeからmacOS Catalinaに2020年5月19日の最新版の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でninjacmakeもインストールしておきます。

brew install ninja cmake

これらを確認したら、~/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だとだいたいコンパイル&インストールに90分くらいかかるような気がします。もし途中で止めちゃった場合でも、同じコマンドを打てば再開してくれます。

macOS (Catalina 10.15.4)へのインストール(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-5clangをインストールします。ninja_build.pyを利用したインストール方法ではcmakeが必要になりますが、CentOS 7.4の場合はcmake3yumで入れておいて、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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away