LoginSignup
8
10

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-05-26

はじめに

第一原理電子状態計算など材料シミュレーションプログラムは、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.6

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

>vagrant plugin install vagrant-vbguest

Boxの入手

Vagrantが利用するOSのテンプレートはBoxとして配布されています。バージョンアップ後間もない最新版OSを使用するとトラブルに遭遇する可能性が高まることを承知の上で、CentOSの最新版を利用します。

>vagrant box add centos/8

VirtualBox用を選択します。
材料シミュレーションでは最新版OSを利用する利点は少ないので、CentOS7を使用するのも賢い選択です。

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

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

>mkdir PHASE-SYSTEM
>cd PHASE-SYSTEM
>vagrant init centos/8

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

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "centos/8"
# 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 base-x  # "X Window System" for CentOS7
#   yum groupinstall -y GNOME  # "GNOME Desktop" for CentOS7
    yum install -y gcc-gfortran gcc-c++
    yum install -y openmpi-devel  # "openmpi3-devel" for CentOS7
    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/openmpi/bin' >> .bashrc  # "/usr/lib64/openmpi3/bin" for CentOS7
  SHELL
end

メモリ量vb.memory(メガバイト単位)とCPU数vb.cpusは、ご利用の計算機に合わせて変更してください。
OpenMPIが/usr/lib64/openmpi/に、FFTWが/usr/lib64にインストールされます。また、OpenMPI関係のコマンドにパスが通らないので、パスに追加する記述を.bashrcに加えています。
先にインストールしたプラグインを利用して、Windowsのディレクトリ(ここではPHASE-SYSTEM)と、Linux仮想マシンの/vagrantディレクトリを共有します。

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

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

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

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

ファイル共有設定について

Box centos/8(v1905.1)は入手直後の状態ではファイル共有に失敗しました。初回起動時は上記のようにVagrantfileconfig.vm.synced_folder行をコメントアウトして、ファイル共有しないでください。
起動後にソフトウェアを追加すると、ファイル共有の準備が整います。

$ sudo yum install -y elfutils-libelf-devel

Vagrantfileconfig.vm.synced_folder行を有効にしてから再起動してください。

利用方法

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

>vagrant up

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

>vagrant status

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

>vagrant ssh

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

>vagrant ssh-config

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

>vagrant halt

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

>vagrant reload

仮想マシンを削除します。Vagrantfileは削除されませんので、vagrant upコマンドで仮想マシンが再作成されます。

>vagrant destroy

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

PHASE/0

平面波基底を採用した密度汎関数法による第一原理擬ポテンシャルバンド計算ソフトウェアです。
PHASE/0の最新版はパッチ(差分)形式で提供される場合があります。現在最新版2019.01.01は、2019.01(phase0_2019.01.tar.gz)に対するパッチ(phase0_2019.01.01.patch)が提供されています。
パッチ適用にはpatchコマンドを使います。同コマンドがない場合は、追加インストールしてください。

$ sudo yum install -y patch

WindowsのPHASE-SYSTEMディレクトリに、PHASE/0配布物(上記二つのファイル)を配置してから、仮想マシンを起動します。

>vagrant ssh
$ tar zxf /vagrant/phase0_2019.01.tar.gz
$ patch -p 0 < /vagrant/phase0_2019.01.01.patch
$ 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-6.3.2.tgz
$ cd elk-6.3.2
$ ./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 > Log

ABINIT

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

ABINITは計算結果可視化用にGraceのファイルを出力します。Graceのインストールは後述します。

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

$ tar zxf /vagrant/abinit-8.10.3.tar.gz
$ cd abinit-8.10.3
$ ./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

Graceを用意:拡張パッケージ利用

(執筆時点ではCentOS8非対応)
Graceは拡張パッケージEPELのリポジトリからインストールするのが簡単です。
仮想マシン作成時でなく、追加インストールする場合はsudoコマンドを使います。

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

Graceを用意:ソースコードから

新しいバージョンのOSでは、拡張パッケージの準備ができていない場合があります。その場合は、ソースコードからインストールします。

$ sudo yum install -y motif-devel
$ tar zxf grace-5.1.25.tar.gz
$ cd grace-5.1.25
$ ./configure
$ sudo make install

/usr/local/grace/以下にインストールされます。環境変数PATHを設定するか、コマンド実行の際にフルパスで指定してください。

$ /usr/local/grace/bin/gracebat tbase3_xo_DS2_EBANDS.agr -printfile band.eps
8
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10