期待のネット新技術

InfiniBandで高性能を実現するMPIの仕様策定と、その実装「MPICH」

【InfiniBandの現在】

 「InfiniBandの現在」では、規格としての歴史と現状、今後の動向をまとめて紹介している。大半の読者にとっては「InfiniBandって何?」というところだろうが、僚誌クラウドWatchをご覧になっておられる読者の中には「何で今さら」という方も居られるかもしれない。

 そう、InfiniBandという規格は、1999年に作業が始まり、2000年に最初の規格策定が行われたという「えらく古い」規格なのである。

HPC向けアプリ開発の研究者フォーラムがメーリングリストで仕様を固めた「MPI」

 「MPI」とMessage Passing Interfaceの略で、仕様を決めているのは「MPI Forum」である。MPI Forumはほかの業界団体と異なり、まず最初にユーザーが集まってスタートしたという、ちょっと珍しいものだ。1991年に、やはりHPC向けのアプリケーションを開発していた研究者が集まり、メモリ分散型システムにおけるメッセージ通信について小規模なディスカッションを行っていた。

 ディスカッションと言っても、その場所がオーストリア山荘のレストランだったそうだから、最初は食事の際の世間話あたりからスタートしたのかもしれない。もっとも、すぐにディスカッションのレベルでは済まなくなり、1992年4月には分散型メモリシステムにおけるメッセージ交換手法に関するワークショップが、米ライス大のCRPC(Center for Research on Parallel Computing)がスポンサーとなり、バージニア州ウィリアムズバーグで開催されている。

 ここで、そのメッセージ交換手法に関するワーキンググループが形成され、その後活発に活動(6週間ごとにミーティングが行われたそうだ)。1992年11月には最初のドラフトがリリースされ、最終的なドラフトは1993年11月に公開された。これに対して受け付けたパブリックコメントを反映したものが、1994年6月に「MPI 1.0」としてリリースされている。

 この後も、MPI Forumは引き続き仕様の充実や新機能の追加、エラッタの削除などの作業を行っており、最新版は2015年6月にリリースされたVersion 3.1となる。ただ、2018年にはDraft Specificationもリリースされているので、次期バージョン(おそらく4.0になるだろう)に向け、現在も作業が継続されている。

 余談になるが、このMPI Forumは企業からの寄付などは受けておらず、通常の業界団体だと必ず求められる会員になるための費用も存在しない。ではどうやって運営しているのかというと、DAPRA(米国防高等研究計画局)、NSF(アメリカ国立科学財団)、NSF傘下のSTCs(Science and Technology Centers)、ESPRIT(欧州情報技術研究開発戦略計画)のP6643ことPPPE(P6643:Portable Parallel Programming Environment) Projectなどのほか、テネシー大学も活動資金を提供している。

 そもそも、MPI Forumを立ち上げたのは主に研究者だったというあたりが、こうした傾向を決定付けたようだ。ここでいう研究者というのは、必ずしもコンピューター業界とは限らない。物理や化学といった、いわゆる自然科学分野では、コンピューターを利用してシミュレーションを行うことで、理論の検証や観測結果の整合性の確認を行うことが非常に多い。HPCは、まさにこうした目的で大学や研究所などにおいて多用されていた。

 こうしたさまざまな分野の研究者が、自分たちが必要なものだからこそMPIの仕様を策定した、という経緯もあり、議論は、ときどきは物理的なミーティングも持たれたものの、主に公開されているメーリングリストをベースとして進められた。

ほかのライブラリの仕様やベンダー独自の実装を取り込んで拡張

 このように、ほかの標準化規格とは違った生い立ちもあり、MPIの仕様の変遷自体もやや特異だ。最初にMPI 1.0のドラフトが出た1992年後半の段階では、P4/PVM/PARMACS/Chameleon/TCGMSG/CMMD/etc……など、さまざまな分散型メッセージ交換用のライブラリが利用されていた。

 ちなみにP4というのは、MPIが出る前に利用されていた分散型メッセージ通信の方式で、もともとはSun Microsystemsのワークステーション上で動作していたもの。その後Cray X-MP/Y-MP、Sequent Balance 21000/Symmetry、Encore Multimax、Alliance FX/8、Butterfly RC2000、Apollo DN-10000、SGI Iris 4D/380など、さまざまなマシンに移植されて利用されていた。ほかのライブラリも状況は似たようなもので、MPIはこうしたライブラリの機能を(全部ではなく部分的に)盛り込んだ仕様となった。

 MPI 1.0がリリースされた後には、多くのベンダーが自社でこれをライブラリとして提供し始めた。各ベンダーではよかれと考えたのだろうが、独自にMPIの拡張を行った例が少なくなく、そうなると、当然さまざまな方言が生まれることになる、

 面白いのは、MPI Forumではこうした方言のうち、優れた実装と判断したものを次バージョンで取り込むという、非常に柔軟な態度で対応したことだ。実際、MPI 1.0のリリース後にIBM/Intel/nCUBEなどの独自MPIの仕様が取り込まれている。MPI 1.xは、2008年5月にリリースされた「MPI 1.3」が最後になるが、14年もの間、このやり方で対応が進められた。

リモートマシンの管理機能を盛り込んだ「MPI 2.x」が併存、2012年の「MPI 3.0」で両者を統合

 余談になるが、MPI 1.xと並行して、MPI 2.xの標準化も進行していた。最初のリリースである「MPI 2.0」は1997年7月に、続いて2.1が2008年9月に、2.2が2009年9月にそれぞれリリースされている。

 こちらには、MPI 1.xとは異なる目的があった。MPI 1.xは静的なメッセージの受け渡しをメインにしたもので、複数のマシン上でプログラムが起動していて、MPI経由でメッセージが来るのをずっと待機して待っている、というモデルと考えればいい。

 これに対してMPI 2.xは、相手のマシンで、動的にプロセスを生成(要するにプログラムを起動)したりメモリを管理したりなど、リモートマシンの管理機能を大幅に盛り込んだものとなっている。MPI 2.xは、こうした管理機能の拡張が中心で、それ以外は全部先送りにしたようで、最終リリースのMPI 2.2でも、MPI 1.3の完全な上位互換とはなっていなかったらしい。2012年9月にリリースされたMPI 3.0では、これらが全て統合され、2015年6月にリリースされたMPI 3.1が、現時点での最終バージョンとなる。

IntelのMPIライブラリもベースとした「MPICH/VNI」、InfiniBandで高性能を実現

 さて、話を1990年代に戻す。MPIの仕様がリリースされると、HPC向けシステムを提供しているベンダーは、ユーザーから「MPI対応のライブラリが欲しい」とのリクエストを当然受けることになる。これに向けて各社とも、自社環境向けのMPIライブラリを提供していた。Intelも当然自社で提供しており、当時のIntelのMPIライブラリは、MPICHと呼ばれるものをベースとしていた。

 これは米ANL(アルゴンヌ国立研究所)が基本となる実装を行った上で公開したもので、最初のバージョンはMPI 1.1に準拠したものだった。このANL由来のMPICHは、以下のような構造になっており、ネットワークカードや共有メモリといった特定のハードウェアを念頭に置いているため性能が出にくいという欠点があった。

とはいえ、最初にインプリメントしたANLでは、そうしたニーズがなかったわけで、欠点というより追加のニーズが出てきたというべきだろう。出典は「IDF Spring 2002」のセッション"Message Passing Interface Implementation for InfiniBand Architecture"のスライド

 これをカバーするべく、米NCSA(国立スーパーコンピュータ応用研究所)が、MPICH向けにVNI(Virtual Machine Interface)という実装をインプリメントしたのが以下の図となる。

VNIそのものは、複数のハードウェアやOSに対応するように作られており、Intelではこれをx86向けに最適化していた

 このMPICH/VNIを利用すると、InfiniBandで高い性能が出せる(以下左)というのがIntelによるメッセージで、実際転送の所要時間(Round Trip Time)を比較すると、InfiniBandが最も高速というか、低レイテンシだったとされる(以下右)。

MPICH/VNIを利用すると、従来のMPICHに比べてアプリケーションによっては15~20%高速(つまりそれだけオーバーヘッドが少ない)な上、InfiniBandをMPICH/VNIに対応させる作業は1日未満とされた
ピンクがMPICH/VNIにInfiniBandを組み合わせたパターンで、Round Trip Timeが最も小さい。それはともかく、最も大きいのがギガビットではなく100BASE-Tというあたりが時代を感じさせる

Intelの撤退後もInfiniBand接続システムがスーパーコンピューターランキングに登場

 こうした取り組みは、幸いにもInfiniBandをIntelが取り止めた後も続いていた。先週も少し触れたが、HPC向けのシステムを構築する場合のサーバー間接続として、当時はInfiniBandしかなかったというのが実情で、加えて言えばHPCのシステムをIntelが直接受注したケースはそう多くなく、大抵はシステムビルダー(Crayなどがこの代表だが、ほかにもさまざまなベンダーが手掛けた)がシステムの設計を行っていた。

 こうしたビルダーからみると、サーバーこそXeonベースのものでありながらも、Interconnectはさまざまなものから選ぶことができた。少し後になるが、2003年11月にSNLは、スーパーコンピューターのランキングである「TOP500」の111位に、Catalystというマシンを滑り込ませている。

 このマシンは、256コアのPentium 4 XeonをInfiniBandで接続した構成だったが、翌2004年になると、いくつかの組織がXeon+InfiniBandという構成で導入したシステムが、ほかにも100位台へとランキングされている。例えば159位はHPEが上海大学に導入したシステム、160位はIBMがミシシッピ州立大にIBMが入れたMarverickで、いずれもInfiniBandベースだった。

 こうしたニーズがあるため、MPI向けではInfiniBandのサポートが欠かせなかった、というべきだろう。まだ当時は、QuadricsやMyrinetを利用した構成の方が圧倒的多数だったが、ここからゆっくりとシェアを増やし始めることになっていく。

大原 雄介

フリーのテクニカルライター。CPUやメモリ、チップセットから通信関係、OS、データベース、医療関係まで得意分野は多岐に渡る。ホームページはhttp://www.yusuke-ohara.com/