高性能Linuxクラスタリング、第1回:クラスタリングの基本

Linuxクラスター技術によるハイ・パフォーマンス・コンピューティングの基本概念の紹介

ハイ・パフォーマンス・コンピューティング(HPC)が容易になりました。その2つの理由は、オープン・ソース・ソフトウェア概念の採用とクラスタリング技術の導入および改善です。この2回シリーズの最初の記事では、使用可能なクラスターのタイプ、それらのクラスターの用途、クラスターがHPCで一般的になった理由、HPCの基本、およびHPCにおけるLinux®の役割について述べます。

Aditya Narayan, Founder, QCD Microsystems

Aditya Narayan photoAditya Narayanは、Indian Institute of Technology, Kanpurにて物理学で学位と修士号を取得しており、QCD Microsystemsを設立しました。WindowsやLinuxの内部構造やWebSphere、またJ2EEや .NETなどのエンタープライズ・プラットフォームなどに精通しており、大部分の時間をニューヨークで過ごしています。



2005年 9月 27日

Linuxクラスタリングは、最近、多くの業界で人気があります。クラスタリング技術の進歩とオープン・ソース・ソフトウェアの普及により、従来の高性能マシンの数分の一のコストでスーパーコンピューターを作成できるようになりました。

この2回シリーズの記事では、Linuxクラスター技術によるハイ・パフォーマンス・コンピューティング(HPC)の概念を紹介し、クラスターのセットアップ方法と並列プログラムの作成方法を示します。この第1回では、クラスターのさまざまなタイプ、クラスターの用途、HPCの基本、Linuxの役割、クラスタリング技術の成長の理由について述べます。第2回では、並列アルゴリズム、並列プログラムの作成方法、クラスターのセットアップ方法、およびクラスターのベンチマーキングを取り上げます。

HPCアーキテクチャーのタイプ

HPCシステムの大半は、並列処理の概念を用いています。HPC向けの多くのソフトウェア・プラットフォームがありますが、まずはハードウェアから見てみましょう。

HPCハードウェアは、次の3つのカテゴリーに分類されます。

  • 対称型マルチプロセッサー(SMP)
  • ベクトル・プロセッサー
  • クラスター

対称型マルチプロセッサー(SMP)

SMPはHPCアーキテクチャーの1種類であり、複数のプロセッサーが同じメモリーを共有します。(クラスターには大規模並列プロセッサー(MPP)と呼ばれるものもありますが、これらは同じメモリーを共有しません。MPPについては、後で詳しく述べます。)SMPは一般に、MPPより高価であり、拡張性がありません。

ベクトル・プロセッサー

ベクトル・プロセッサーでは、CPUは配列すなわちベクトルをうまく処理するように最適化されています。そのため、このように呼ばれます。ベクトル・プロセッサー・システムは高い性能を実現し、1980年代と1990年代前半には主要なHPCアーキテクチャーでしたが、近年ではクラスターの方がはるかに人気があります。

クラスター

クラスターは、最近のHPCハードウェアの主流となっています。クラスターは、一群のMPPです。クラスター内のプロセッサーは一般にノードと呼ばれ、独自のCPU、メモリー、オペレーティング・システム、およびI/Oサブシステムを持ち、他のノードと通信することができます。最近では、クラスターのノードとして、Linuxやその他のオープン・ソース・ソフトウェアを実行しているコモディティー・ワークステーションを使用するのが一般的です。

これらのHPCハードウェアのタイプの違いについては、後で説明しますが、まずはクラスタリングから始めましょう。


クラスタリングの定義

「クラスター」という用語は、文脈によって意味が違ってきます。この記事では、次の3種類のクラスターに焦点を合わせます。

  • フェイルオーバー・クラスター
  • ロードバランシング・クラスター
  • ハイパフォーマンス・クラスター

フェイルオーバー・クラスター

最も単純なフェイルオーバー・クラスターは、2つのノードで構成されます。1つはアクティブであり、もう1つはスタンバイですが、常にアクティブ・ノードを監視しています。アクティブ・ノードがダウンすると、スタンバイ・ノードが引き継いで、ミッションクリティカルなシステムの機能の続行を可能にします。

ロードバランシング・クラスター

ロードバランシング・クラスターは一般に、負荷の高いWebサイトに使用され、複数のノードが同じサイトをホストし、Webページに対するリクエストは負荷の低いノードへ動的に回されます。

ハイパフォーマンス・クラスター

ハイパフォーマンス・クラスターは、時間のかかる計算のための並列プログラムの実行に使用され、科学界にとって特に重要な意味を持っています。一般に、通常のハードウェアでは途方もない時間がかかるシミュレーションや、その他のCPUに負荷のかかるプログラムを実行します。

図1に基本的なクラスターを示します。このシリーズの第2回では、このようなクラスターを作成する方法と、クラスター用プログラムの作成方法を述べます。

図1. 基本的なクラスター
図1. 基本的なクラスター

グリッド・コンピューティングは広義の用語であり、一般に、疎結合されたシステム間のコラボレーションによるサービス指向アーキテクチャー(SOA)を指します。クラスター・ベースのHPCはグリッド・コンピューティングの特殊例であり、ノードが密結合されています。成功したグリッド・コンピューティングのプロジェクトとして有名なSETI@home(Search for Extraterrestrial Intelligence program:地球外知性探査計画)では、百万台のホームPCのアイドル状態のCPUサイクルを、スクリーン・セーバーを通じて使用して、電波望遠鏡のデータを分析しました。同様に成功したプロジェクトとしては、タンパク質の折り畳みを計算するFolding@Homeがあります。


ハイパフォーマンス・クラスターの一般的用途

ほぼすべての産業が高速な処理パワーを必要としています。より安価でより高速なコンピューターが利用できるようになるにつれて、より多くの企業がテクノロジーの恩恵を受けることに関心を持つようになっています。コンピューターの処理パワーのニーズには上限がありません。パワーが急増しても、常に需要が供給をはるかに上回ります。

ライフ・サイエンス研究

タンパク質分子は、柔軟性のある長い鎖であり、事実上無限の数の3D形状を取ることができます。実際に、溶液に入れると、すばやく「折り畳んで」、本来の状態になります。誤った折り畳みが、アルツハイマーなど、さまざまな病気の原因であると考えられています。したがって、タンパク質折り畳みの研究は基本的に重要だと言えます。

科学者がタンパク質折り畳みを理解するための試みのひとつが、コンピューターによるシミュレーションです。事実、折り畳みはすばやく行われますが(100万分の1秒ほど)、非常に複雑なので、通常のコンピューターでシミュレーションすると数十年かかってしまいます。この重点分野は、他にも同じような分野が数多くある業界の中の小さな分野にすぎませんが、非常に多くの計算パワーを必要とします。

この業界のその他の重点分野としては、薬剤モデリング、外科手術のバーチャル・トレーニング、症状と診断の視覚化、診療記録データベース、ヒトゲノム・プロジェクトなどがあります。

石油およびガス探査

地震記録は、地球内部と海底の特性に関する詳細な情報を伝えます。このデータを分析することが、石油やその他の資源の発見に役立ちます。ごく狭い地域を再構築するだけでも、数テラバイトのデータが必要です。この分析には明らかに大量の計算パワーが必要です。この分野では、計算パワーに対する需要が非常に大きいので、この作業のためにスーパーコンピューティング・リソースがリースされることがあります。

地震予知システムの設計や、セキュリティ目的のマルチスペクトル衛星画像システムの設計など、その他の地質学研究も同様の計算パワーを必要とします。

図形描画

航空機エンジンの設計など、エンジニアリングにおける高解像度のインタラクティブ・グラフィックスの操作は、莫大な量のデータが必要なため、パフォーマンスとスケーラビリティの点で常に大きな課題でした。クラスター・ベースの技法が、この分野で役に立っています。ディスプレイ画面にペイントするタスクをクラスターの各ノードに分割します。各ノードはグラフィックス・ハードウェアを使用して、画面の担当部分の描画を行い、ピクセル情報をマスター・ノードに送ります。マスター・ノードがそれらの情報をまとめて、画面に表示する画像を組み立てます。

これらの業界の例は、氷山の一角に過ぎません。天体物理学のシミュレーション、気象シミュレーション、工学設計、金融モデリング、ポートフォリオ・シミュレーション、映画の特殊効果など、他にも多くのアプリケーションが膨大な計算リソースを必要としています。今後も、ますます多くのパワーが求められることでしょう。


HPCを変えたLinuxとクラスター

クラスター・ベースのコンピューティング以前、典型的なスーパーコンピューターはベクトル・プロセッサーであり、専用のハードウェアとソフトウェアを使用するために、百万ドル以上するのが一般的でした。

Linuxやその他の無償で入手できるオープン・ソース・ソフトウェア・コンポーネントをクラスタリングやコモディティー・ハードウェアの改良に使用できるようになり、状況は一変しました。パワフルなクラスターを、ごくわずかな予算で構築できるようになり、必要に応じてノードを追加できるようになりました。

GNU/Linuxオペレーティング・システム(Linux)が、大規模クラスターの採用に拍車をかけました。Linuxは多種多様なハードウェアで動作し、高品質なコンパイラーや並列ファイルシステム、MPI実装など、Linux用のソフトウェアを無償で入手できます。また、Linuxでは、ユーザーは作業負荷に応じてカーネルをカスタマイズすることができます。Linuxは、HPCクラスターの構築に適したプラットフォームとして認められています。


ハードウェアの理解:ベクトル対クラスター

HPCハードウェアを理解するには、ベクトル・コンピューティングのパラダイムとクラスターのパラダイムを比較するとよいでしょう。これらは競合する技術です(ベクトル・スーパーコンピューターであるEarth Simulatorは、今でも最速のスーパーコンピューターのトップ10に含まれています)。

基本的に、ベクトル・プロセッサーもスカラー・プロセッサーも、クロックに基づいて命令を実行します。両者の違いは、ベクトル・プロセッサーがベクトルに関する計算(行列乗算など)を並列実行できる点にあります。これは、ハイ・パフォーマンス・コンピューティングでは一般的なことです。これを説明するために、2つのdouble型配列aとbを使い、x[i]=a[i]+b[i]となるような3番目の配列xを作成したいとします。

加算や乗算のような浮動小数点演算は、次のようにいくつかのステップで行われます。

  • 指数を調整する
  • 仮数を加える
  • 丸め誤差など、結果をチェックする

ベクトル・プロセッサーは、パイプライン技法を使用して、これらの内部ステップを並列化します。図2に示されているように、浮動小数点の加算に6つのステップがあるとします(IEEE算術演算ハードウェアのように)。

図2. IEEE算術演算ハードウェアによる6ステップのパイプライン
図2. IEEE算術演算ハードウェアによる6ステップのパイプライン

ベクトル・プロセッサーは、この6つのステップを並行して行います。第4段階でi番目の配列要素が加算される場合、ベクトル・プロセッサーは(i+1)番目の要素の第3段階、(i+2)番目の要素の第2段階を実行します。ご覧のように、6ステップの浮動小数点加算の場合、特定の時点ですべての段階がアクティブなので(図2の赤い部分)、スピードアップ率はほぼ6倍です(最初と最後では、6段階すべてがアクティブなわけではありません)。大きな利点は、並列処理は裏で行われるので、プログラムで明示的にコード化する必要がないことです。

ほとんどの部分について、6つのステップすべてを並行して実行できるので、約6倍のパフォーマンスとなります。矢印は、i番目の配列指数の演算を示しています。

ベクトル処理に比べると、クラスター・ベースの計算は基本的に異なるアプローチで行われます。特別に最適化されたベクトル・ハードウェアを使用する代わりに、標準的なスカラー・プロセッサーを使用しますが、使用するプロセッサー数が多く、複数の計算を並行して実行します。

クラスターには、次のような特徴があります。

  • クラスターは、コモディティー・ハードウェアを使用して構築され、ベクトル・プロセッサーの数分の1のコストで済みます。多くの場合、価格は10分の1以下です。
  • クラスターは通信にメッセージ受け渡しパラダイムを使用し、分散したハードウェアを利用するにはプログラムを明示的にコード化する必要があります。
  • クラスターでは、必要に応じてクラスターにノードを追加することができます。
  • オープン・ソース・ソフトウェア・コンポーネントとLinuxのおかげで、ソフトウェア・コストを削減できます。
  • クラスターは、はるかに少ない保守コストで済みます(設置面積が少なく、電力消費が少なく、冷却の必要性が少ない)。

並列プログラミングとアムダールの法則

クラスターでは、ソフトウェアとハードウェアが一致協力して高性能を達成します。プログラムは基盤ハードウェアを利用するように明示的に作成されなければならず、クラスターに適応していない既存の非並列プログラムは書き直す必要があります。

並列プログラムは、一度に多くのことをします。どのくらいのことをするかは、当面の問題によって決まります。プログラムの合計所要時間の1/Nが並列化できない部分だとすると、残り(1-1/N)は並列化可能な部分です(図3)。

図3. アムダールの法則の図
図3. アムダールの法則の図

理論的には、無限数のハードウェアを並列部分の実行に適用すればゼロ時間で済みますが、逐次部分に改善は見られません。結果として、せいぜい、元の時間の1/Nでプログラムを実行できるだけであり、それ以上速くすることはできません。並列プログラミングでは、この事実は一般にアムダールの法則と呼ばれています。

アムダールの法則は、1個のシリアル・プロセッサーだけを使用するのに対して、並列プロセッサーを使用して問題を解く場合のスピードアップを支配します。スピードアップは、(1個のプロセッサーで)プログラムを逐次実行するのに要する時間を(複数のプロセッサーで)並列実行するのに要する時間で割った値として定義されます。

     T(1)
S = ------
     T(j)

T(j)は、j個のプロセッサーを使用してプログラムを実行するのに要する時間です。

図3のように、十分な数のノードを並列処理に使用すれば、Tparをゼロに近づけることができますが、Tseqは変わりません。並列化しても、せいぜい、元の1+Tpar/Tseq倍までしか速くできません。

並列プログラムを作成する作業は容易ではなく、N倍も時間がかかることがあります。しかし、予想外の展開が待っています。通常、問題が大きいほど、よりパワフルなコンピューターを使用しようとしますし、コードの逐次処理部分の所要時間の割合は、問題の規模が大きくなるほど小さくなります(使用可能なリソースを最大限に利用するために、プログラムに手を加えて、並列化可能部分を増やそうとするので)。したがって、Nの値は自動的に大きくなります。(アムダールの法則の再評価については、この記事の末尾にある「参考文献」を参照してください。)


並列プログラミングのアプローチ

並列プログラミングの2つのアプローチを見てみましょう。すなわち、分散メモリー・アプローチと共有メモリー・アプローチです。

分散メモリー・アプローチ

ここではマスター・スレーブ・モデルを考えるとわかりやすいでしょう。

  • マスター・ノードは、複数のスレーブ・ノードに作業を分割します。
  • スレーブ・ノードは、それぞれのタスクをこなします。
  • スレーブ・ノードは、必要な場合には、互いに通信します。
  • スレーブ・ノードは結果をマスターに返します。
  • マスター・ノードは結果を集めて、さらに作業を分散します。

このアプローチでの明らかな実際問題は、分散メモリー編成にあります。各ノードは自分のメモリーにしかアクセスできないので、データ構造を複製する必要があり、他のノードがアクセスしようとした場合には、ネットワーク経由で送信する必要があり、ネットワーク・オーバーヘッドが生じます。効果的な分散メモリー・プログラムを作成するためには、この欠点とマスター・スレーブ・モデルを念頭に置いて作業する必要があります。

共有メモリー・アプローチ

共有メモリー・アプローチでは、すべてのプロセッサーがメモリーを共有します(SMPなど)。このアプローチには、分散メモリー・アプローチのような問題はありません。また、このようなシステムのプログラミングは容易です。すべてのプロセッサーがすべてのデータを使用でき、逐次プログラミングとほぼ同じだからです。これらのシステムで大きな問題となるのは、スケーラビリティです。すなわち、プロセッサーの追加が容易ではありません。

並列プログラミングは(どのプログラミングでも同様ですが)、科学であると同時にアートであり、常に大幅な設計改良と性能強化の余地があります。並列プログラミングは、コンピューティングの中で特別な地位を占めています。このシリーズの第2回では、並列プログラミングのプラットフォームと例について述べます。


ファイル入出力がボトルネックになるとき

一部のアプリケーションは、ディスクに大量のデータを頻繁に読み書きする必要があり、しばしば、計算の中で最も遅いステップになります。より高速なハード・ドライブがあればよいのですが、十分に高速でない場合もあります。

Linuxクラスターで一般的なように、物理ディスク・パーティションがすべてのノード間で共有されていた場合(たとえば、NFSを使用して)、問題は特に明白になります。このような場合は、並列ファイルシステムが便利です。

並列ファイルシステムは、ファイル内のデータを、クラスターの複数のノード(I/Oノードといいます)に接続された複数のディスクに分散します。プログラムがファイルを読み取るときには、そのファイルの複数の部分が複数のディスクから並行して読み取られます。これにより、特定のディスク・コントローラーの負荷が軽減されて、より多くの要求を処理できるようになります。(PVFSは、オープン・ソースの並列ファイルシステムの好例です。標準的なIDEハード・ディスクを使用したLinuxクラスターで1GBsec以上のディスク・パフォーマンスが達成されています。)

PVFSは、Linuxカーネル・モジュールとして入手可能であり、Linuxカーネルに組み込まれることもあります。基本概念は単純です(図4)。

  • メタデータ・サーバーは、ファイルのどの部分がどこにあるかという情報を格納します。
  • 複数のI/Oノードがファイルの各部分を格納します(ext3のような通常の基盤ファイルシステムをPVFSで使用できます)。
図4. PVFSの仕組み
図4. PVFSの仕組み

クラスター内の計算ノードがこの並列ファイルシステム内のファイルにアクセスするときには、次のようなステップを踏みます。

  • 通常通りにファイルを要求すると、要求は基盤PVFSファイルシステムに送られます。
  • PVFSは要求をメタデータ・サーバーに送ります(図4のステップ1と2)。メタデータ・サーバーは、どのI/Oノードにファイルがあるかを要求側ノードに知らせます。
  • この情報に基づいて、計算ノードは関係するすべてのI/Oノードと直接通信して、ファイルのすべての部分を入手します(ステップ3)。

このすべては、呼び出し側アプリケーションには透過的です。すべてのI/Oノードへの要求、ファイルの内容の順序付けなど、下層で行われる複雑な処理はPVFSが行います。

PVFSの利点は、通常のファイルシステム用のバイナリーをそのまま実行できることです。これは、並列プログラミングの世界では例外的なことです。(その他の並列ファイルシステムについては、「参考文献」を参照してください。)

参考文献

学ぶために

  • Building a Linux HPC Cluster with xCAT(IBM Redbook, 2002年9月)は、システム・アーキテクトやエンジニアのために、基本的なクラスター技術や用語、またLinuxによるハイパフォーマンス・コンピューティング(HPC)クラスターのインストール方法について解説しています。
  • Linux HPC Cluster Installation(IBM Redbook, 2001年6月)は、インストールや管理用のxCAT (xCluster Administration Tools) に焦点を当てています。
  • Building an HPC Cluster with Linux, pSeries, Myrinet, and Various Open Source Software」(IBM Redpaper, 2004年7月)は、pSeriesノードやMyrinetインターコネクトの集合を、Linuxによるクラスター化環境の中で真のHPC実稼働ワークロードを実行できる状態にまで持って行くための方法を解説しています。
  • coLinuxとopenMosixで異機種混合のクラスターを構成する」(developerWorks, 2005年2月)は、異機種混合、あるいは混成によるLinux HPCクラスターを構築する方法を解説しています。
  • Linux Clustering with CSM and GPFS(IBM Redbook, 2004年1月)は、LinuxクラスターのためのCSM(Cluster System Management)とGPFS(General Parallel Filesystem)に焦点を当てています。
  • SETI Projectのサイトを見て、SETI@homeについて学んでください。
  • タンパク質折り畳みに関して詳しくは、Folding@Home Projectを見てください。 タンパク質折り畳みについての入門が説明されています。
  • IBMのDeep Computing Capacity on Demandについて学んでください。これは石油化学などの産業用に、計算負荷の重いタスクを処理するために設計されたコンピューティング・センターです。
  • John L. Gustafsonが、アムダールの法則(Amdhal's Law)の再評価を行っています。
  • PVFSを利用して、ごく普通のIDEディスクで毎秒ギガバイト・レベルのI/Oスループットを実現する方法を学んでください。
  • 5回シリーズの記事、「Build a digital animation system」(developerWorks, 2005年7月)は、プロフェッショナルなアニメーション・システムを実行するために、HPCクラスターを構成する方法を解説しています。
  • developerWorksのLinuxゾーンには、Linux開発者のための資料が他にも豊富に用意されています。
  • Gridコンピューティングに関して学ぶために、New to Grid computingを読んでください。また、developerWorksのGridゾーンも調べてください。

製品や技術を入手するために

  • Parallel Virtual Filesystemをダウンロードしてください。
  • 皆さんの次期Linux開発プロジェクトを、IBM trial softwareを使って構築してください。developerWorksから直接ダウンロードすることができます。

議論するために

  • developerWorks blogsに参加して、developerWorksのコミュニティーに加わってください。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=226932
ArticleTitle=高性能Linuxクラスタリング、第1回:クラスタリングの基本
publish-date=09272005