Intel MIC (Xeon Phi) ドライバー(MPSS3.X)のインストール

はじめに

Intel MIC(Xeon Phi)をCentOSにインストールします。 業者さんから1枚刺しの状態で購入し、その後、自身で二枚目のMICを追加しました。 その際に、ドライバー(MPSS)のインストールおよびアップグレードを行ったのでここにメモを残します。
このメモ時点での環境。
  1. OS:CentOS6.5
  2. アップグレード前のMPSS: 2.1.6720
  3. アップグレード後のMPSS: 3.1.2
  4. アップグレード後のMPSS: 3.4(2014/11/04確認)

以下のコマンドでカーネルの確認も行っておきましょう。 MPSSは同じバージョンでもOSのバージョンごとに異なるパッケージが用意されていますので、それに合わせたものを使いましょう。
uname -a
CentOS6.4標準のkernelは 2.6.32-358.3.1.el6.x86_64でした。 (なぜこのようなことを書くかというと、インストールがうまく行かずかなり試行錯誤しました。その際に、カーネルのアップグレードなんかも行った為です。結局はkernelはひゅじゅんのままで行けたわけですが。。。) まず、最新版のMPSSを手に入れます。
URL:
http://software.intel.com/en-us/articles/intel-manycore-platform-software-stack-mpss

以前のバージョンのアンインストール

インストールしてあるバージョンの確認は以下のコマンドで行います。
sudo rpm -qa | grep -e intel-mic -e mpss
以下のコマンドでアンインストールします。
#MPSSのversionが3.Xの場合
sudo service mpss unload
cd mpss-3.X
sudo ./uninstall.sh

#MPSSのversionが2.Xの場合
sudo service mpss unload
sudo yum remove intel-mic*

最新版のインストール

以下のコマンドでファイルの解凍とインストールを行います。
#MPSS3.1.2のインストール
tar xvf mpss-3.1.2-rhel-6.4.tar
cd mpss-3.1.2
yum install *.rpm

#MPSS3.4のインストール
tar xvf mpss-3.4.tar
cd mpss-3.4
cp ./modules/*`uname -r`*.rpm .
yum install *.rpm

MICの初期化

MPSSをインストールしたらそれを今度はMICにインストールします。 まず、以下のコマンドで、MICの初期化を行います。
modprobe mic
micctrl --initdefault
再起動したらMICの状態を確認します。 以下のコマンドを入力して
micctrl -s
readyと表示されるはずです。でないときは、次のコマンドを試してみましょう
micctrl -rw
続いて、MICにドライバを書き込みます。 次のコマンドを実行しましょう。
/usr/bin/micflash -update -device all -smcbootloader
一旦再起動しましょう。
reboot now

以下はお好みで

今度は、MIC用OFEDをインストールします。 MPSSにOFEDが入っていると思うので、以下のコマンドで自分でビルドしてから インストールを行います。
cd mpss-3.1.2/src
rpmbuild --rebuild ofed-driver-3.1.2-1.fc13.src.rpm
rpm -ivh /root/rpmbuild/RPMS/x86_64/ofed*.rpm
ここまでできたらMPSSおよびOFEDサービスを再起動します。 おおよそ次のコマンドです。
service ofed-mic stop
service openibd stop
service mpss unload
service mpss start
service rdma start
service openibd start
service ofed-mic start
chkconfig mpss on
chkconfig rdma on
chkconfig openibd on
chkconfig ofed-mic on
これでトラブルが無ければインストール完了です。 ここでofed-micの起動に失敗する場合は、 /etc/hostsでmicの名前解決できていないということに遭遇したので、 これを編集して対応しましょう。 これ以外にも、結構環境依存があると思いますので、上記の方法でうまく行かないかもしれません。 私自身もかなり試行錯誤しました。 あきらめずがんばってください。

MICへのユーザーの追加

MICを利用するには、ホストOSとは別途MIC上のμOSにユーザーを追加する必要があります。 MICにユーザーとグループを追加します。
micctrl --groupadd=yourname --gid=1008
micctrl --useradd=yourname --uid=1008 --gid=1008
yournameには追加したいユーザー名を、1008のところにはIDを指定してください。 ユーザーを追加したらssh-keygenで公開鍵を作っておきましょう。 以下の設定で/homeをホストとMICで共有します。 よって、ホスト側で公開鍵を作り置いておけば、自動的にMIC側にも同じ鍵が置かれていることになります。

MICとホストOSでのファイル領域の共有

MICはファイル領域を持っていないので、ホストOSとファイル領域を共有しておきます。 また、ファイル共有しておくことで、ホスト-MIC間でへ実行ファイルやデータファイルの転送をせずに済むので楽です。 ここでは、ユーザー領域である/homeと、Intelコンパイラのインストール先である/optを共有します。 ファイル領域の共有は、/etc/exportsに以下を追加します。
/opt  *(rw,no_root_squash,async)
/home *(rw,no_root_squash,async)
そうしたら次のコマンドを実行して反映させます。
exportfs -a
ホスト側のNFSサービスを起動します。
service nfs start
chkconfig nfs on
MIC上のμOSにNFSを追加します。
micctrl --addnfs=/home --dir=/home
micctrl --addnfs=/opt --dir=/opt
続いて、MIC上のμOSが読み込むhostsファイルおよびfstabファイルを確認します。 ここに、先の/home. /optを共有できるように書き込みましょう。 MPSS2.1とMPSS3系列では場所が違うので注意してください。 以下はMPSS3系列の場合の場所です。
vi /var/mpss/mic0/etc/hosts
vi /var/mpss/mic0/etc/fstab
vi /var/mpss/mic1/etc/hosts
vi /var/mpss/mic1/etc/fstab
fstabの中は参考までに以下のような感じです。
rootfs          /               auto            defaults                1  1
proc            /proc           proc            defaults                0  0
devpts          /dev/pts        devpts          mode=0620,gid=5         0  0
ホストのIPアドレス:/home      /home   nfs             nolock          1 1
ホストのIPアドレス:/opt       /opt    nfs             nolock          1 1
下の二行が追加した項目です。自身の環境に合わせて適宜IPを記述してください。 ここまで済んだらMPSSを再起動して、設定を反映させましょう。
service mpss stop
micctrl --resetconfig
service mpss start
以上で設定は終わりです。 この記事を読まれた皆様がうまく行くことを祈ります。

謝辞

今回の設定では、MICを購入した(株)コンカレントシステムズさんからも色々と設定方法のご教授を受けました。ここに御礼申し上げます。

余談

MICは60core(240threads)もありますが、メモリは8GBしかありません。 その為、マルチスレッド動作をさせるコードの作成では、発想の転換が迫られました。 これまではスレッド数がせいぜい16とかのマシンを想定していたため、スレッド毎のコピー配列等を多用して、 スレッド間でのメモリロックを極力避けるようなアルゴリズムしていました。 しかしMICでそれをやると、240倍のバッファが必要になりメモリが足らなくなります。 MICでは、使うメモリがスレッド数に比例しない様な仕組みにしてやらねばなりません。 その為、メモリロック(#pragma omp atomic等)もパフォーマンスの悪くならないレベルで使用し、 スレッド数分用意するコピー配列などの使用を避ける必要があります。

現在は、そのあたりも克服し、MIC一枚とXeon E5-2680(8core)一枚がほぼ同じくらいの速度で回る分子動力学コード(GLIPS:配布予定)ができました。まあ、こんなもんでしょう。