先頭へ
先頭へ

技術情報:計算機使いこなしのコツ


プログラム開発環境構築

材料シミュレーションに役立つ優れたオープンソースソフトウェアが多数公開されています。これらソフトウェアの多くは、ソースコードのみが配布されていて、利用するには事前のコンパイルが必要です。特にMPI並列を利用するソフトウェアは、その実行形式ファイルがMPI実行環境に依存するため、実行形式ファイルでの配布が難しいことが、この背景にあります。そこでコンパイル(プログラム開発)環境を整えようとするのですが、科学技術計算では現在でもFortranが用いられることが多く、そのコンパイラとMPI開発環境を用意することは、不慣れな方には難しいかもしれません。

そこで、できるだけ簡単に、再配布可能なソフトウェアのみを用いて、FortranコンパイラとMPI開発環境を含む、プログラム開発環境を整える方法をご紹介します。この目的を達成するためには、WindowsではなくLinuxを利用した方が圧倒的に容易です。各ソフトウェアは、執筆時点の最新版です。

過去の情報はこちら:2016年3月

仮想計算機の用意

Linuxをインストールするためのパソコンを新たに一台用意できればそれに越したことはありませんが、それができなくても仮想化技術を用いればWindows上(Macでも良い)で動作する仮想的な計算機(仮想マシン)を実現できます。この仮想マシンには、Windows(ホストOSと呼ばれます)とは別のOS(ゲストOS)をインストールして利用します。仮想化のためのソフトウェアは複数ありますが、ここではVirtualBoxを使います。ダウンロードして、インストールして下さい。以下ではWindows 64bit版の5.2.0を使って説明します。

仮想マシン作成

インストールできたら、早速起動しましょう。メニューから「新規」を選んで、仮想マシンを新規作成します。「名前」に仮想マシンの名前を入れますが、ここでは「CentOS」として下さい。「タイプ」と「バージョン」が自動設定されます。64 bit OSが選択できない場合は、BIOSで仮想化機能が無効になっていませんか。有効にしてから再実行して下さい。「次へ」を押して先に進むと、いくつかの設定項目があります。メモリは多めに割り当てたいので、搭載されているメモリ量の半分程度を指定します(後から簡単に変更できるので適当に決めて下さい)。その他、大量のデータを扱えるようにハードディスク量を増やす以外は、デフォルトの設定で良いでしょう。ディスクは、指定した量が直ちに利用されるのではなく、必要な分だけが利用されます。上限を指定すると考えて、多めに設定することをお勧めします。

作成した仮想マシンを選択して「設定」を押すと、多数の設定項目が現れます。まず、「システム」-「プロセッサー」から、CPU数を設定します。せっかくMPIをインストールするのですから、複数のCPUを仮想マシンに割り当てましょう。後から変更できるのでとりあえず「2」とします。なお、材料シミュレーションでは一般にHyper Threadingの効果は限定的ですので、物理コア数以下にすることをお勧めします。

仮想マシンネットワーク設定 ポートフォワーディング

同じく設定画面から「ネットワーク」を選択します。アダプター1が有効化されていて、割り当てがNATであることを確認して下さい。そして「高度」の三角形をクリックすると詳細な設定が現れます。「ケーブル接続」がチェックされていることも併せて確認してください。

さらに、ホストOSからゲストOSにssh接続するために、ポート転送(フォワーディング)を利用します。「ポートフォワーディング」ボタンを押して現れるウィンドウで右図のように設定し、ルールを追加します。ホストOSの2222番ポートへの接続が、ゲストOSの22番ポートに転送されます。

次に、仮想マシンにゲストOSとして、Linuxをインストールします。

Linuxインストール

仮想マシン設定

Linuxには様々なディストリビューションが存在します。その多くは互いに良く似ているのですが微妙な差異があり、不慣れな方を混乱させます。ここでは、CentOSを利用します。Red Hat Enterprise Linux互換を目指しているディストリビューションであり、High Performance Computing (HPC)向けクラウドにも採用されています。DVDイメージ(ISOファイル)をダウンロードしてください。ここでは「CentOS-7-x86_64-DVD-1708.iso」を用います。

仮想マシンの光学ドライブは「空」になっているのでクリックして「ディスクイメージを選択」から、このISOファイルを指定します。仮想マシンを「起動」すると、CentOSのインストーラーが起動します。表示される指示に沿って操作してください。

ソフトウェアの選択

インストール途中「ソフトウェアの選択」には注意して下さい。デフォルトは「最小限のインストール」になっていますがこれはお勧めしません。GUIがあった方が便利です。GUIを含む選択肢(ベース環境)は複数ありますが「GNOME Desktop」を選びました。その上で「選択した環境のアドオン」から「開発ツール」を追加してください。またこの段階で、ネットワークを有効にしておくと良いでしょう。

インストールが終了し、仮想マシンを再起動してからライセンスに同意するとLinuxが利用できます。ネットワークが無効になっている場合は、画面右上部分を操作して、インターフェースを「接続」して下さい。

ホストOSのSSHクライアントソフトウェアでlocalhostの2222番ポートにssh接続すると、ゲストOSにログインできます。さらに、ホストOSがインターネットに接続されていればゲストOSからインターネットにつながりますが、同時にホストOS外からゲストOSに接続可能な状態です。パスワード管理など、セキュリティに配慮してご利用ください。

MPIのインストール

材料シミュレーションの実行は長時間に及ぶことが多く、ソフトウェアの多くは計算時間短縮のためにMPIを利用した並列計算に対応しています。そのようなソフトウェアをコンパイルするためには、MPI開発環境が必要であり、ここではOpen MPIを利用します。ファイルをダウンロードして展開します。

$ tar jxf openmpi-3.0.0.tar.bz2
$ cd openmpi-3.0.0

オープンソースソフトウェアをインストールする標準的な手順です。

$ ./configure
$ make
$ su
Password: 【rootパスワード】
# make install

/usr/local/以下にインストールされますので、追加の設定なく利用できます。

$ which mpirun
/usr/loca/bin/mpirun
$

FFTWのインストール

材料シミュレーションでは、Fourier変換が頻繁に利用されます。これを高速に実行するアルゴリズムはFFTとして知られており、高速実行のためのライブラリが開発されています。ここではFFTWを利用します。ファイルをダウンロードして展開します。

$ tar zxf fftw-3.3.6-pl2.tar.gz
$ cd fftw-3.3.6-pl2

インストール手順はOpenMPIと同じです。

$ ./configure
$ make
$ su
Password: 【rootパスワード】
# make install

/usr/local/以下にインストールされます。

$ ls /usr/local/include/fftw3.h
/usr/local/include/fftw3.h
$

以上でプログラム開発環境が整いました。当社ではここまで設定した仮想マシン(仮想アプライアンス, OVAファイル)を配布しています。ご希望の方はお問い合わせください。

こちらでは利用例としてPHASEシステム研究会から配布されているPHASE/0のコンパイルとテスト並列計算をご紹介します。

ここまでの手続きでオープンソースのコンパイラ(GNUコンパイラ;Fortran, C, C++)が利用可能になりましたが、これらで作成した実行形式ファイルの実行性能は高くありません。以下では引き続き、より良い実行性能を得るための、無料で入手できる高性能プログラム開発環境を二つご紹介します。

高性能開発環境:Oracle Developer Studio

一つ目はOracle Developer Studioです。「Download」から、Oracle Linux / Red Hat Linux用RPM installerを入手してください(ダウンロードは無料ですが、登録が必要です)。CentOSで動作するとは謳われていませんが、おそらく大丈夫です。

インストーラーを起動するに当たって、OracleのJava実行環境が必要です。こちらの説明に沿ってインストールして下さい。

Oracle Developer Studioのインストールは、ダウンロードファイルを展開して、インストーラーを起動します。

$ tar jvf OracleDeveloperStudo12.6-linux-x86-rpm.tar.bz2
$ cd OracleDeveloperStudo12.6-linux-x86-rpm/
$ su
Password: 【rootパスワード】
# ./developerstudio.sh
特に指定しなければ、コンパイラは/opt/oracle/developerstudio12.6/binにインストールされます。ログイン時に同ディレクトリが環境変数PATHに自動的に追加されるよう、.bashrcに次の一行を追加します。
export PATH=/opt/oracle/debeloperstudio12.6/bin:$PATH

高性能開発環境:PGI Community Edition

二つ目はPGI Community Editionです。日本語の詳しい説明がありますので、よく読んでインストールして下さい。MPI開発環境も含めてインストールできます。


利用中のシェルを調べる

Linuxでは「シェル(shell)」と呼ばれるプログラムを通してコマンドを与え、様々な処理を行います。代表的なシェルとして、bash, tcsh, zshなどがあります。利用中のシェルは、以下のコマンドで知ることができます。

$ echo $0

この時、シェル名の前に「-」が表示されれば、それがログインシェルです。例えば-bashと表示されれば、bashがログインシェルです。


ドットファイルの読み込み

Linuxではログイン時に、ホームディレクトリの名前が「.」で始まるファイル(ドットファイルと呼ばれます)を読み込んで各種設定を行います。いつも使う項目が自動的に設定されると便利なのはもちろんのこと、並列計算(MPI)ではプログラムが自動的の他の計算機に接続してプログラムを起動します。自動的に接続したときにもプログラム起動のための適切な設定がなされている必要がありますので、ドットファイルでの設定が必須です。ドットファイルの具体的ファイル名は、ログインシェルにより異なります。

(詳細を省略しました。さらに詳しく知りたい方はmanを参照するなど調べてください。)


公開鍵認証について

計算機にログインする際には、古くからユーザー名とパスワードを利用した認証(パスワード認証)が使われてきましたが、現在ではその安全性が十分でないと考えられることが多く、特にインターネットを介した接続には、安全性の高い公開鍵認証を利用することが一般的になっています。

公開鍵認証では公開鍵と秘密鍵のペアを自分で作成します。秘密鍵は絶対に他人に教えてはいけません。ログイン元となる(手元にある)計算機に安全に保管してください。ログイン先の計算機管理者にも教えません。この点が「ログイン先の管理者から通知されるユーザー名とパスワードを使ってログインする」というパスワード認証の最初の手順と根本的に異なります。一方、公開鍵はその名の通り外部に晒しても問題にはなりません。ログイン先の計算機に配置する必要がありますので、管理者にお願いするなどしましょう。電子メールで送付しても安全性は損なわれません。

ここでは、PuTTY(Windows用)とOpenSSH (主にLinux用)をそれぞれ使って、公開鍵/秘密鍵を作成します。PuTTYとOpenSSHを併用する場合には、両者の鍵の「ファイルフォーマット」が異なることに注意が必要です。ほとんどの場合、ログイン先ではLinux(OpenSSH)が動いているでしょうから、それに必要なフォーマット変換についても併せて説明します。

PuTTYで鍵作成

PuTTY Key Generator Generating Generated

OpenSSHで鍵生成

以下のようにssh-keygenコマンドを実行します。【Enter】ではEnterキーを、【パスフレーズ】ではパスフレーズを入力します。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/asms/.ssh/id_rsa): 【Enter】
Created directory '/home/asms/.ssh'.
Enter passphrase (empty for no passphrase): 【パスフレーズ】
Enter same passphrase again: 【パスフレーズ】
Your identification has been saved in /home/asms/.ssh/id_rsa.
Your public key has been saved in /home/asms/.ssh/id_rsa.pub.
The key fingerprint is:
(以下略)
$

ホームディレクトリ下の.sshディレクトリに秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が生成されます。さらに、秘密鍵をPuTTYで利用する場合には、以下の手順で変換します。

sshポートフォワード

関連する話題としてsshポートフォワード機能を紹介します。遠隔地の計算サーバーを利用することを想定して、下図のネットワーク構成を考えます。ログインサーバーへの接続はインターネットを介するので公開鍵認証を使い、ログインサーバーからリモート計算機へは、安全な組織内ネットワークのみを利用するので、パスワード認証で接続します。

リモート計算サーバーを利用する場合 ローカル
計算機
ログイン
サーバー
リモート
計算機
パスワード認証 パスワード認証× 公開鍵認証+ポートフォワード

リモート計算機と通信するアプリケーションソフトウェアの中には、安全なネットワーク内での利用を前提としているために公開鍵認証をサポートしておらず、パスワード認証のみ利用可能なものがあります。その場合でも、sshポートフォワードを利用して公開鍵認証で安全な通信経路を確保すると、ローカル計算機で動作するアプリケーションソフトウェアがその経路を利用して、リモート計算機に接続できることがあります。

ポートフォワード設定

ポートフォワードは、ローカル計算機からログインサーバーへの接続にオプションを追加して設定します。OpenSSHでは例えば以下のコマンドを実行します。

$ ssh loginserver -L 10022:remotehost:22 -N -f

PuTTYでは右図のように設定します。いずれの場合も、ローカル計算機の10022番ポートが、リモート計算機の22番ポート(sshの既定値)につながります。すなわち、アプリケーションプログラムがローカル計算機の10022番ポートにssh接続すると、(ログインサーバーを自動的に経由して)リモート計算機にssh接続することになり、あたかもリモート計算機にパスワード認証でログインしているかのように振る舞います。

なお、セキュリティポリシーは所属組織により区々であり、技術的に可能なこと全ての実行が許可されているとは限りません。どのような利用方法が許可されているのかご確認のうえ、セキュリティに配慮してご利用ください。


PHASE/0製品版のご利用にあたりご不明な点や、解析、カスタマイズのご依頼・ご相談などにつきましてはお問い合せください。

ナノ材料シミュレーション お問い合わせ ナノ材料シミュレーション 解析のご依頼へ