Edited at

仮想Linux環境構築(材料シミュレーション向け)


はじめに

第一原理電子状態計算など材料シミュレーションプログラムは、Linux環境で動作させることを前提に開発されている場合が多いようです。一方、シミュレーションを専門としない材料研究者は、(会社のパソコンで)Windowsを利用していることが多いです。大規模計算にはLinuxクラスタ計算機の利用をお勧めしますが、とっかかりにWindows計算機が利用できれば、材料シミュレーション人口の増加につながることが期待できます。その際Windowsネイティブ環境を利用するよりも、仮想Linux環境を用いる方が簡単ですし、将来の大規模計算に向けた準備になると思います。

仮想Linux環境を実現するためのソフトウェアは広く公開されていますが、環境構築は面倒です。過去にVirtualBoxを利用して、仮想マシンのディスクイメージを配布したことがありますが、OSやライブラリのバージョンアップに逐一対応するのが面倒でした。ここでは面倒な仮想マシンの配布をVagrantに担当してもらいます。VagrantとVirtualBoxは、WindowsとLinuxの間のSSH接続やファイル共有まで提供してくれるので、これら以外の追加ソフトウェアは不要です。


計算環境構築

Windowsで動作するLinux仮想マシンに、Fortranを含む開発環境と、材料シミュレーションで良く用いられるライブラリであるMPIとFFTW、計算結果のグラフ描画用にGnuplotをインストールします。

Windows 10 64bit版を利用し、ハードウェアの仮想化支援機能(Intel VT / AMD-V; BIOSで確認)が有効になっていることを前提とします。


VirtualBoxとVagrantのインストール

公式サイトからWindows 64bit版インストーラーをダウンロードします。Windowsのアプリケーションソフトウェアですので、インストーラーの指示に従って、普通にインストールして下さい。

VirtualBox

Vagrant

インストール後、コマンドプロンプトを起動して、Vagrantが利用可能であることを確かめます。

>vagrant --version

Vagrant 2.2.4

ファイル共有(等)のためにプラグインをインストールします。

>vagrant plugin install vagrant-vbguest


Boxの入手

Vagrantが利用するOSのテンプレートはBoxとして配布されています。CentOSの最新版を利用します。

>vagrant box add centos/7

VirtualBox用を選択します。


仮想マシン作成とライブラリ類インストール

コマンドプロンプトから操作します。仮想マシンごとに、ディレクトリ(フォルダ)を作ります。

>mkdir PHASE-SYSTEM

>cd PHASE-SYSTEM
>vagrant init centos/7

Vagrantfileが作成されますが、そのままでは特別な設定はしてくれません。仮想マシン作成時にライブラリや追加プログラムをインストールするように、このファイルを修正します。


Vagrantfile

Vagrant.configure("2") do |config|

config.vm.box = "centos/7"
config.vm.synced_folder ".", "/vagrant", type: "virtualbox"

config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = "2"
end

# SHELL
config.vm.provision "shell", inline: <<-SHELL
# yum groupinstall -y "X Window System"
yum install -y gcc-gfortran gcc-c++
yum install -y openmpi3-devel
yum install -y fftw-static
yum install -y gnuplot
# yum install -y epel-release
# yum install -y --enablerepo=epel grace
echo 'PATH=
$PATH:/usr/lib64/openmpi3/bin' >> .bashrc
SHELL
end


メモリ量vb.memory(メガバイト単位)とCPU数vb.cpusは、ご利用の計算機に合わせて変更してください。

OpenMPIが/usr/lib64/openmpi3/に、FFTWが/usr/lib64にインストールされます。また、OpenMPI関係のコマンドにパスが通らないので、パスに追加する記述を.bashrcに加えています。

先にインストールしたプラグインを利用して、Windowsのディレクトリ(ここではPHASE-SYSTEM)と、Linux仮想マシンの/vagrantディレクトリを共有します。

X Window Systemを利用する場合は、"X Window System"行のコメントを外します(先頭の#を削除)。X Window Systemの代わりにGNOME Desktopを指定すると、たくさんのソフトウェアが追加されます。X Serverは別に用意してください。

grace epel-releaseについては後述のABINITの項を参照してください。

仮想マシンの準備ができました。以上の操作は、次回以降必要ありません。

このように作成した仮想マシンのディスクサイズは4GBに設定されています。大規模電子状態計算を実行するには、容量不足です。そこで計算データを/vagrantディレクトリに格納することを提案します。このディレクトリの実体は直接Windowsのファイルシステムにあるので、仮想ディスクの容量制限を受けずに利用できます。ただしWindowsファイルシステムですので、ファイル名の大文字小文字の区別ができないなどの理由で問題が生じることがあります。例えば下記手順でのコンパイルに失敗することがあります。計算データの格納に限定すると、問題が生じにくいと思います。


利用方法

仮想マシンを起動します。

>vagrant up

仮想マシンを状態を確認します。

>vagrant status

仮想マシンにログインします。コマンドプロンプトに戻るためには、exitコマンドを実行して下さい。

>vagrant ssh

他のソフトウェアを使って仮想マシンにログインする際に必要な情報を表示します。ホスト名127.0.0.1、ポート番号(最初に起動した仮想マシンでは2222、二つ目以降は別の数字)、ユーザー名vagrantの他に、秘密鍵ファイルprivate_keyへのパスを読み取ります。パスワードは使いません。

>vagrant ssh-config

仮想マシンを停止させます。

>vagrant halt


アプリケーションソフトウェア導入


PHASE/0

平面波基底を採用した密度汎関数法による第一原理擬ポテンシャルバンド計算ソフトウェアです。

WindowsのPHASE-SYSTEMディレクトリに、PHASE/0のソースコードを配置してから、仮想マシンを起動します。

>vagrant ssh

$ tar zxf /vagrant/phase0_2019.01.tar.gz
$ cd phase0_2019.01
$ ./install.sh

選択肢はGNU Linux (EM64T/AMD64) GNU Compiler collection (gfortran) MPI parallel Open MPI Netlib BLAS/LAPACK FFTW3 libraryを選びます。FFTWライブラリのインストール場所は、/usr/lib64です。

コンパイルが終わったら、テスト計算を実行しましょう。

$ cd samples/Si8

$ mpiexec -n 2 ../../bin/phase ne=1 nk=2


Elk

第一原理全電子計算ソフトウェアです(FP-LAPW法)。


libxc

Elk等の第一原理計算ソフトウェアと組み合わせて、様々な交換相関エネルギー汎関数を使うためのライブラリです。

$ tar zxf /vagrant/libxc-4.3.4.tar.gz

$ cd libxc-4.3.4
$ ./configure
$ make

Elkのコンパイルに必要なファイルは、src/.libsの下にあるlibxc.alibxcf90.aです。


Elk

$ tar zxf /vagrant/elk-5.2.14.tgz

$ cd elk-5.2.14
$ ./setup

コンパイラを選択するように促されるので2番のGNU Fortran (gfortran) with OpenMPを選びます。

続けてmake.incを編集します。

MPI並列に対応させます。

#SRC_MPI = mpi_stub.f90

F90 = mpif90
F77 = mpif90
SRC_MPI =

libxcにも対応させます。

#SRC_libxc = libxcifc_stub.f90

LIB_libxc = libxcf90.a libxc.a
SRC_libxc = libxc_funcs.f90 libxc.f90 libxcifc.f90

libxcをコンパイルして作成したlibxc.alibxcf90.aを、srcにコピーしてからmakeを実行します。

$ cp ../libxc-4.3.4/src/.libs/libxc.a src/

$ cp ../libxc-4.3.4/src/.libs/libxcf90.a src/
$ make

テスト計算を実行します。

$ cd examples/basic/Si

$ export OMP_NUM_THREADS=1
$ mpiexec -n 2 ../../../src/elk < elk.in > Log


ABINIT

PHASE/0と同種の、平面波基底を採用した密度汎関数法による第一原理擬ポテンシャルバンド計算ソフトウェアです。

ABINITは計算結果可視化用にgraceのファイルを出力します。graceは拡張パッケージEPELのリポジトリからインストールします。

仮想マシン設定時でなく、追加インストールする場合はsudoコマンドを使います。

$ sudo yum install -y epel-release

$ sudo yum install -y --enablerepo=epel grace

Elkと同様にlibxcに対応していますが、個別にコンパイルしたlibxcではなく、特別なバージョンを利用します。configure時にソースコードをダウンロードしますので、ネットワーク接続が必要です。

$ tar zxf /vagrant/abinit-8.10.2.tar.gz

$ cd abinit-8.10.2
$ ./configure FC=mpif90 CC=mpicc --enable-mpi --with-dft-flavor=libxc
$ make

tests/tutorial/Input/tbase3_5がシリコンのバンド構造図の例題です。

$ cd tests/tutorial/Input

$ mkdir work
$ cd work
$ sed -e "s/_1/_5/" ../tbase3_x.files > file_names.data
$ mpiexec -n 2 ../../../../src/98_main/abinit < file_names.data > Log
$ gracebat tbase3_xo_DS2_EBANDS.agr -printfile band.eps

band.epsがバンド構造図です。GNOME Desktopをインストールしていれば、evinceコマンドで表示できます。

$ evince band.eps