先頭へ
先頭へ

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


プログラム開発環境構築

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

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

仮想計算機の用意

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

仮想マシン作成

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

作成した仮想マシンを選択して「設定」を押すと、多数の設定項目が現れます。まず、「システム」-「プロセッサー」から、CPU数を設定します。せっかくMPIをインストールするのですから、複数のCPUを仮想マシンに割り当てましょう。後から変更できるのでとりあえず「2」とします、

同じく設定画面から「ネットワーク」を選択します。最初はアダプター1のみが有効化されていると思います(割り当てはNAT)。アダプター2を有効化して、割り当てを「ホストオンリーアダプター」に設定します。それぞれ以下の役割を果たします。

ローカルオンリーアダプターの追加
ホストオンリーアダプターを選択した際に「無効な設定が見つかりました(ホストオンリーアダプターが未選択です)」となった場合は、メイン画面のファイルメニューから「環境設定」を選択し、「ネットワーク」-「ホストオンリーネットワーク」から、新しいネットワークを追加して、Windowsを再起動して下さい。

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

Linuxインストール

仮想マシン設定

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

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

ソフトウェアの選択

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

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

高性能開発環境のインストール

(本作業は省略可能です)

ここまでの手続きでオープンソースのコンパイラ(GNUコンパイラ;Fortran, C, C++)がインストールされているのですが、残念ながら、これらでコンパイルした実行形式ファイルの性能はあまり高くありません。そこで、より良い実行性能を得るためのプログラム開発環境Oracle Solaris Studioをご紹介します。「Download」から、Red Hat Linux用RPM installerを入手してください(ダウンロードは無料ですが、登録が必要です)。CentOSで動作するとは謳われていませんが、おそらく大丈夫です。

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

Solaris Studioのインストールは、ダウンロードファイルを展開して、インストーラーを実行します。

$ tar jxvf SolarisStudo12.4-linux-x86-rpm.tar.bz2
$ cd SolarisStudo12.4-linux-x86-rpm/
$ su
Password: 【パスワード】
# ./solarisstudio.sh

インストールが終了しても、そのままではライブラリが不足しているためにコンパイラを利用できませんでした。以下のコマンドを実行して、ライブラリを追加します。

# yum install ld-linux.so.2
# yum install libelf.so.1
特に指定しなければ、コンパイラは/opt/oracle/solarisstudio12.4/binにインストールされます。ログイン時に同ディレクトリが環境変数PATHに自動的に追加されるよう、.bashrcに次の一行を追加します。(引き続きMPIをインストールする場合は、コマンドとして次の行を実行して下さい。)
export PATH=/opt/oracle/solarisstudio12.4/bin:$PATH

MPIのインストール

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

$ tar jxvf openmpi-1.10.2.tar.bz2
$ cd openmpi-1.10.2
GNUコンパイラを利用する場合はインストール場所の指定のみ追加します。
$ ./configure --prefix=/opt/openmpi
Solaris Studioを利用する場合には、コンパイラ起動コマンドを追加指定します。
$ ./configure --prefix=/opt/openmpi CC=cc FC=f90 CXX=CC
その後の操作は共通です。
$ make
$ su 
Password: 【パスワード】
# make install
最後に、MPI関連コマンドのPATHをログイン時に設定するように、.bashrcに次の一行を追加します。
export PATH=/opt/openmpi/bin:$PATH
以上でMPIを含むプログラム開発環境が整いました。こちらでは利用例としてPHASEシステム研究会から配布されているPHASE/0のコンパイルとテスト計算をご紹介します。


利用中のシェルを調べる

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

ナノ材料シミュレーション お問い合わせ ナノ材料シミュレーション「PHASE/0」製品情報へ ナノ材料シミュレーション 解析のご依頼へ