HPCシステムズではエンジニアを募集しています。詳しくはこちらをご覧ください。
HPCシステムズのエンジニア達による技術ブログ

Tech Blog

マシンに最適な Gaussian16 をインストールする手順

はじめに

以下では、Gaussian16 の Unix 向けバイナリ版のインストール手順を解説しています。

単に標準的な手順を知りたいだけであればGaussian社公式のインストール手順を読めば事足りるのですが、大学様の計算機センターなどで複数のバイナリをお持ちの場合に、お使いの計算機に適したバイナリを特定する方法や、そこで間違った際のエラーなど、補足情報も以下に記載しています。

計算機の性能を最大限に引き出すロジックを身に着けていただいて、ご業務の時短に活かしていただければ幸いです。

全体的に

Gaussianのインストールにあたっては、Gaussian社の公式サイトにある Installation Instructions を参照してください。そのページから、Gaussian 16 の各環境向けインストール手順や、GaussView 6 の各環境向けインストール手順を参照することができます。それこそが Gaussian社標準 のインストール手順になりますので、まずはその手順に則ってインストールを行うことが基本となります。

Gaussian, GaussView のインストールの際に詰まった場合には、こちらのページ に Gaussian社の Technical Support への問い合わせ方法が明記されていますので、それに沿ってお問い合わせいただけます(英語での問い合わせのみとなります)。

マシンに最適な Gaussian16 Unix Binary を選定する

Gaussian社公式の UNIX Binary Gaussian 16 Installation instructions に沿いながら、ポイントをかいつまんでインストール手順を記載します。ご自身で Gaussian16 Unix Binary をインストールする場合に参考になれば幸いです。

なお、以下の手順は Gaussian16 Unix Binary をインストールするための手順であって、その他の版(source code版や、Mac OSX binary版、Windows版 など)には当てはまりませんので、手順を混用なさらないようにご注意下さい。

1.まず、インストール先のマシンのOSバージョンを確認しましょう。

Gaussian16 には A.03, B.01, C.01, C.02 といった Revision(細かいバージョンのような番号) があり、Revision ごとにサポート対象と対応しているOSバージョンがこちらのPDFに列挙されています。互換性のあるOSバージョンを使っているか、確認しましょう。

Linuxでしたら次のコマンドでOSバージョンを確認できます。

$ cat /etc/os-release

2.次に、CPUのスペックを確認し、使うべき Gaussian16 バイナリを選定します。

Linuxでは、lscpu コマンド、あるいは /proc/cpuinfo を cat することでCPUのスペックを確認できます。

$ lscpu
または
$ cat /proc/cpuinfo

Intel/AMD系の昨今のCPUでは、一般に SIMD (Single Instruction Multiple Data) と称される、高速に計算を行える拡張命令を実行できるようになっています。この拡張命令セットにはいくつか種類があり、CPUの世代が新しくなるほど、より演算性能の高い拡張命令セットが搭載されています。

一方、Gaussian16 Unix Binary 版の方も、そうした拡張命令を活用できるように製造されており、対応する拡張命令セットセットごとにバイナリ(実行ファイル)が分かれて存在します。高速なものから挙げると AVX2, AVX, SSE4.2, Legacy の4種類のバイナリが存在します。つまり、具体例を挙げると、AVX2 命令を実行できるCPUならば、AVX2 のバイナリを使った方が AVX のバイナリを使うよりも速く計算を行えます

実際にバイナリ間で性能ベンチマーク比較をした結果を次表に示します。Gaussian16 に付属しているtest0397 インプット(Valinomycin 分子C54H90N6O18、RB3LYP/3-21GでのForce 計算)で経過時間(秒)を取得しました。Intel Xeon Platinum 8268  (2.9GHz, 24core) x2 CPU構成の計算機でGaussian16 Revision C.01を使用した結果です。

%NProcAVX2-enabledAVX-enabledSSE4.2-enabledLegacy
4589.9816.4916.4924.9
8320.9435.0487.8491.9
16171.2231.2259.8262.1
32107.1144.9152.5154.9

バイナリを替えただけで大きな速度差が出ていることがおわかりいただけると思います。

では、使おうとしている計算機のCPUがどの拡張命令セットにまで対応しているかを確認しましょう。lscpu コマンド や /proc/cpuinfo の cat 結果には Flags という項目があり、その中を見ることで、その CPU が対応している拡張命令セットがわかります。それに応じて、次のように見分けます。

  • avx2 が含まれていたら、そのCPUはAVX2命令に対応しているので、AVX2-enabled のGaussian16を使用できます。
  • avx が含まれていたら、そのCPUはAVX命令に対応しているので、AVX-enabled のGaussian16を使用できます。
  • sse4_2 が含まれていたら、そのCPUはSSE4.2命令に対応しているので、SSE4.2-enabled のGaussian16を使用できます。
  • avx2, avx, sse4_2 のどれも含まれていないならば、Legacy のGaussian16を使用できます。

具体例を見てみましょう。以下は Intel Xeon 6154 という Skylake 世代CPUの lscpu の結果です(一部の抜粋)。

$ lscpu
(中略)
Model name: Intel(R) Xeon(R) Gold 6154 CPU @ 3.00GHz
(中略)
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti intel_ppin ssbd mba ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts pku ospke md_clear flush_l1d

Flags: の右に(とても長いですが)avx2 が含まれています。したがって、このCPUはAVX2命令に対応しているので、AVX2-enabled のGaussian16を使用できます。

Intel/AMDのサーバー系CPUの世代と各バイナリの対応状況を一覧にすると次のようになります。

CPU世代CPU型番例AVX2-enabledAVX-enabledSSE4.2-enabledLegacy
Intel Xeon WestmereX56xx などNGNGOKOK
Intel Xeon SandyBridge ~ IvyBridgeE5-xxxx、E5-xxxx v2 などNGOKOKOK
Intel Xeon Haswell 以降E5-xxxx v3、E5-xxxx v4、Scalable Processor などOKOKOKOK
AMD EPYC Rome ~ GenoaEPYC 72xx、73xx、74xx などOKOKOKOK

※執筆時点で、Gaussian16 Unix Binary(Revision A.03 ~ C.02) には AVX-512 に対応したバイナリが存在していないため、AVX-512 の対応状況は確認不要です。

Gaussian16 Unix Binary 版のインストール

インストールしようとしているGaussian16 DVDの表面を確認して、バイナリの種類が AVX2-enabled, AVX-enabled, SSE4.2-enable, Legacy のどれであるかを確認しましょう。上で確認した、搭載CPUで利用可能な拡張命令セットのうち、最速の拡張命令セットを使ったバイナリを選べていますか?

確認できたら、https://gaussian.com/g16/g16bin_install.pdf に沿ってインストールを進めましょう。

DVD を適当なディレクトリにマウントします。ここでは例として /mnt にマウントします。

$ su -
# mount /dev/cdrom /mnt

インストール先ディレクトリを作成します。ディレクトリの場所は任意ですが、次のようにインストール先ディレクトリにavx2等の対応拡張命令セットを追記しておくと、異種CPUの混在するLAN環境で共有して使う時などに、使うべきバイナリを簡単に見分けることができて便利ですので、オススメです。以下は AVX2-enabled バイナリの場合の例です。

# /bin/csh
% setenv g16root "/usr/local/gaussian16_avx2"
% mkdir $g16root
% cd $g16root

tarファイルを解凍します。これでカレントディレクトリに g16 というディレクトリが出来ます。

% tar xvfJ /mnt/tar/*.tbJ

続いて、g16 ディレクトリおよびその中すべての所有グループを整えます。弊社では標準では所有グループとして users を使用しています。ここで設定した所有グループに属するユーザーしか Gaussian16 を使用できないことに注意しましょう。

% chgrp -R users g16

Gaussian16 のインストールコマンドを実行します。

% cd g16
% ./bsd/install

最後に、各ユーザーの環境変数を設定します。

Bashの場合)
$ vim .bashrc
export g16root="/usr/local/gaussian16_avx2"
source $g16root/g16/bsd/g16.profile

Cshの場合)
% vim .cshrc
setenv g16root "/usr/local/gaussian16_avx2"
source $g16root/g16/bsd/g16.login

Gaussian16 Unix Binary 版の実行

一般的に記述すると、次のコマンドとなります。

$ g16 input.com output.log

後ろの output.log は省略することもできます。その場合、インプットファイル名の拡張子 .com を .log に変更したファイルが出力先ファイルになります。

もし、例えば、CPU が AVX2 命令に対応していないにも関わらずAVX2-enabled の Gaussian16 バイナリを実行した場合のように、CPUで対応していない拡張命令セットを使うGaussian16バイナリを実行した場合には
Illegal instruction
というエラーメッセージを出してGaussian16が異常終了します。もしこのエラーが出た場合には、そのCPUが、Gaussian16 Unix Binaryから要求されている拡張命令セットを備えていないということを意味します。その場合は、CPUが備えている拡張命令セット用の Gaussian16 Unix Binary に変更するか、あるいは、そのバイナリで要求されている拡張命令セットを備えたCPUの計算機で実行しましょう。

おわりに

今回ご紹介した AVX2, AVX といったSIMDの拡張命令セットは、高速化に大きく寄与するため、Gaussianに限らず、さまざまな科学技術計算のソルバーで広く当たり前のように活用されています。むしろ、活用しないと話にならないと言っても過言ではありません。

余談ですが、弊社の職人芸とも言える高度な技術であるビルドにおいても、当然、これらを駆使してバイナリのチューニングを行っています。

Gaussian16 Unix Binary については、既に Gaussian社が拡張命令セットごとにバイナリを製造してくれているので、お使いの計算機のCPUに合ったバイナリを選んで使うことでその恩恵を受けることが出来ます。また、その具体的な手順を、CPUの調べ方、バイナリの選び方、インストール手順にわたって記載させていただきました。

ハードウェアからソフトウェアまで性能をしっかりと引き出せる最適化されたHPC環境をご提供し、みなさまのご業務を加速するお手伝いができれば幸いです。