HPC(high-performance computing)とPCクラスタの特長
家庭やビジネスで使用される一般用途向けPCや業務用サーバーと比べ、単位時間当たりの計算量が非常に多い高速な計算処理や環境のことをHPC(high-performance
computing)と呼びます。
膨大で複雑な処理を短時間で行うグリッドコンピューティングの一種であり主に科学計算や気象予測、学術研究などの膨大な計算リソースを必要とする用途で使用されます。
かつてのHPCは専用のプロセッサ、専用のハードウェアを用いた一つのシステム、
超高速計算や特殊用途に特化したスーパーコンピュータ(ベクトル計算機)を用いた計算処理を指しましたが、
現在はマイクロプロセッサの性能向上、並列処理技術の向上により、複数のPCをネットワークで接続し並列分散処理アーキテクチャとして計算資源を共有する、クラスタ型スーパーコンピュータが主流となりました。クラスタ型スーパーコンピュータはPCクラスタ、Beowolf型クラスタとも呼ばれ、以下のような特徴があります
特徴
主にオープンソースソフトウェア(OSS)であるUNIX/Linuxが用いられる
一般に流通している汎用的なPC部品で構成する事が可能で、柔軟性に優れ低コストである
クラスタに接続されたコンピュータはノードと呼ばれ、クラスタの処理のみに使われる
ノード間はクラスタ専用の高速ネットワークによって接続され、内部接続ネットワークはインターコネクトと呼ばれる
並列処理ライブラリとして、MPIやPVMが使用される
MPI (Message Passing Interface)
PVM (Parallel Virtual Machine)
PCクラスタは教育分野における科学研究、製造、設計、製薬等の分野における工学的利用、金融分野におけるデータ処理など、汎用的な用途で研究機関の他、一般企業でも幅広く使われています。また、近年はアクセラレータとしてGPUを使用するGPGPUなど、高速計算の種類が増えました。弊社ではこのようなGPGPUソリューション も取り扱ってます。
GPGPU(General-Purpose computing on Graphics
Processing Units)
GPUを利用した並列処理
GPU(Graphics Processing Units)は構造上、 グラフィックスパイプラインの要求を処理する為の
高い計算能力とスループットを持つSIMDタイプの高性能高並列プロセッサとしても使用出来ます。
主要なグラフィックチップメーカー
「NVIDIA」(エヌビディア)
「AMD」(アドバンスト・マイクロ・デバイセズ)
GPUは本来、画像処理を目的としリアルタイムの3Dコンピュータグラフィックスの生成に特化した並列計算機として使用されていましたが、プログラマブルシェーダーの発展と統合型シェーダーアーキテクチャによる汎用計算能力を獲得し科学技術目的の汎用計算高速化にも使用されるようになりました。
演算ユニットの最小単位はストリーミングプロセッサと呼ばれ、その単純な構造から、CPUのようにOSやアプリケーションソフトウェアの実行、周辺機器制御等の汎用処理全般を行う事は出来ません。
ただし、単純な構造のため集積度を高くすることが可能で、理論演算性能(FLOPS値)において同世代の製造プロセスにおけるCPUと比べて高い性能を持ち、電力当たりの理論演算性能(ワットパフォーマンス)もCPUと比べて高くなります。
実行する計算処理によっては多数のCPUで構築されたPCクラスタよりも、複数のGPUを用いた構成のほうが安価で効率的なシステムを構成することが期待できます。
CUDAとGPUコンピューティング
統合型シェーダーアーキテクチャの登場以降、CUDAやOpenCLのように、GPUを汎用の並列プロセッサとしてアクセス可能なプログラミングインターフェイス
(API)およびプログラミング言語拡張の標準化とサポート・普及が始まっており、C言語のようなよく使われている言語も使用可能です。
GPGPUをサポートするAPIにおいてデバイス側のカーネル記述に使われるC/C++は独自拡張が施されており、CPU向けのプログラム記述に使用される汎用C/C++とは異なります。
また、CUDAはホスト側のC/C++にも拡張されており、専用のコンパイラを使用する必要があるなどGPGPU対応アプリケーションソフトウェアを開発するためには、従来のCPU向けプログラミングとは異なる技術や知識が必要となります。
PCクラスタ
PCクラスタの構成要素
PCクラスタの構成要素は以下のようになります
PCクラスタ
管理ノード&ログインノード
通常、ログインノードを兼ねる管理ノードで計算を行う場合は各種動作が非常に重くなるので、実際の計算は行われません。 管理ノードでは、各計算ノードがアクセスする共有ディレクトリと、共有ユーザの提供をします。
共有ディレクトリは、共有ディスクを管理ノード下に物理的に置く構成(DAS)、またはネットワーク上で各計算ノードが一様にアクセスできる構成(SAN)がとられます。また、Glusterのような分散ファイルシステム構成も考えられます。
管理ノード
各計算ノードにおけるサーバー部
ユーザー共有:NISサーバ、LDAPサーバ等
ファイル共有:NFSサーバ
その他:NTPサーバ等
ジョブスケジューラにおけるサーバ、スケジューラ部
ログインノード
実際にログインを行い操作するノード 管理ノードと同じノードにする、独立させる等
計算ノード
ネットワーク
各ノードを繋ぐネットワーク
スイッチ(HUB)を介したスター型
管理用ネットワーク(NISやNFS用) 計算用ネットワーク(実計算用)でネットワークアドレスを分離して使用する事が多い
構成によりInfinibandや10Gなどの高速ネットワークを使用
OS
一般的にはLinuxが使用されます。
Linuxディストリビューションに関しては、管理上は統一させた方が好ましいため、CPUやチップセットの対応により最新構成で行う必要がある場合がありますが、主にお客様がご利用されるソフトウェア対応の為、旧バージョンで固定化、バージョンの範囲内最新というようにLinuxディストリビューションによってはバージョンの固定化も可能となります。
事前に弊社でアプリケーションの実行テストを行う事も可能ですので、お気軽にご相談ください
PCクラスタの構成例(トータル10台とした場合)
弊社のPCクラスタ構築方法は管理ノードにNFSとNISサーバーを立てます。
ユーザー管理は管理ノードのNIS、各計算ノードは管理ノードの/homeやデータ領域を共有する事で、MPI等ライブラリを用いた並列プログラムの要件である『/からのディレクトリ位置とユーザーのIDが同じであること』を容易に満たせるよう構成されます。
そこで、管理ノードに関しては各ユーザーが実際のプログラム等を置くホームディレクトリである/homeや、共有データ領域(仮に/data)をどの程度確保するかが問題となり、管理ノードの物理ディスク容量は管理ノードにDASをぶら下げる、サーバーRAIDを管理ノードで用いる等、ある程度確保した方が最善となります。
逆に各計算ノードに関してはOSがインストール可能な容量を確保できれば、ディスク容量はそれほど多くは必要としません。
但し、プログラムによっては計算ノード側にファイルを置く、計算時に共有ディレクトリ以外(例として/tmp)に一時ファイルが発生する等が考えられますので、事前のヒアリングでどの程度の領域を確保するかが
必要な項目となります。
管理ノードがない、既存のNIS、NFS環境を使用するという場合、弊社ではPCクラスタを構築できかねます。弊社サービスでは、ハードウェアを用意し、各計算ノードにOSインストール、ローカルネットワークを構築する構成のみに限られます。
管理ノード兼ログインノード ×1台
各計算ノードに対してのサーバ
ファイル共有(NFS)、ユーザー共有(NIS)等の管理要素
ジョブスケジューラにおけるサーバーとスケジューラ
サーバ + RAID 製品
計算ノード
×9台
管理ノードから割り当てられたジョブを計算させるノード
ジョブスケジューラにおけるエージェント
NVIDIA GPGPU ソリューション
AMD GPGPU ソリューション
管理ノードと計算ノードをつなげるスイッチ
ネットワークアドレスは計算部分と管理部分を物理的に分けることが望ましいです。
例
計算部分:192.168.10.x
管理部分:192.168.20.x
管理ノード(ログインノード)は外部接続用にグローバル用ポートも別途必要となります。
NFS
NFS(Network File System)とはローカルPCに接続されたストレージをネットワークを介してリモートのPCに提供する分散ファイルシステムとそのプロトコルです。
NIS(yp)
NIS (Network Information Service)とはネットワーク上のPC間でアカウントやホスト名等の情報を共有し、配布するディレクトリサービスプロトコルの一種です。 元々は電話帳を意味する「イエローページ」という名称であったためYP(Yellow Pages)とも呼ばれます。
ネットワークにおけるユーザーパスワードグループ、ホスト情報
/etc/hosts
/etc/passwd
/etc/group
/etc/shadow
...などの情報を一元管理可能
LDAP
LDAP(Lightweight Directory Access Protocol)とはディレクトリサービスプロトコルの一種です。
システムアカウント情報の一元化。
NISとの違いはデータ記憶領域が可変であること、異なる複数のネームサービスに対応、SSLに対応していること、RPCではなくTCP/IPを用いることにより広域規模に対応していることが挙げられます(NISとの共存不可)。
ジョブ管理システム
OpenPBS、Slurmなど。
ジョブスケジューラと並列処理
複数のジョブを制御するプログラム
ジョブ管理システムは複数のジョブ(プログラムやバッチ処理等)の制御、実行、終了状態の監視、報告等を行うプログラムで、主にLinuxディストリビューションで動作するように開発されています。指定した時間にプログラムを実行するような単純なもの(at,cronなど)はOS側で用意されていますが、複数のコンピュータの管理、ジョブの先行関係、例外処理の定義など、より高度な機能を含むものを指します。
並列処理においては並列に動作させたプロセスの一部が負荷の高いホストに割り当てられてしまった場合、ジョブ全体の処理に影響するためクラスタシステムのハードウェア・リソースを効率よく利用することがパフォーマンスの向上につながります。また、莫大な量の計算を要求されるクラスタシステムの性質上、大量のジョブの投入にも耐えうる堅牢性も重要になります。
保留状態のジョブを並べて待機させるための収用場所をキューと呼び、キューごとに優先度、名前、制限事項、スケジューリングポリシー等の実行条件を細かく決定することが可能で、 柔軟性に富んだシステムを構築することが出来ます。
OSSのジョブ管理システムには、多種の枝分かれ(フォーク)や開発会社の買収による非OSS化等の要因で開発がストップしているソフトウェアがいくつかあります。
また、ハードウェアとOSとの組み合わせの都合上、現在弊社ではご提供できないものもあります。それらをご希望の場合はご相談ください。
主なジョブ管理システム(OSS)
PBS
OpenPBS
PBSは1990年代初めにNASAの為にMRJ社が開発したPortable Batch Systemであり、ネットワークで繋がれた複数のプラットフォーム上で動作します。
旧OpenPBSは一時期開発がストップしていましたが、Altair Engineering社が同社のPBS Professionalをオープンソース化(旧PBS Professional Open SourceProject)し、OpenPBSとして生まれ変わりました。また、同社のサポートが受けられる商用ライセンスもあります。
Slurm Workload Manager
Slurm
SlurmはSimple Linux Utility for Resource Managementの略で、ローレンス・リバモア国立研究所と他数社によって共同開発されたフリーソフトウェアのリソースマネージャです。GPLv2ライセンスでリリースされていますが、開発者が立ち上げたschedMD社と他数社が商用サポートを提供しています。
SGE
SGEはSun Microsystems社の援助によりOSSの形態で開発されていましたが、2010年には同社のOSSのWebサイトは閉鎖されています。現在は商用版がUniva社からUniva Grid Engineとして発売されています。
OSSの派生として、リバプール大学のグループがオープンソースでの開発を継続して公開しているSon of Grid Engine があります。
LSF
LSFはLoad Sharing Facility(負荷分散機構)の略で、トロント大学のUtopia research projectに基づいたワークロード管理プログラム・ジョブスケジューラです。 2007年にGPLv2でリリースされた簡略版のLSFはOpen Lavaに引き継がれていましたが、著作権の問題でOSSの開発はストップしています。 現在は商用版がIBM社よりIBM Spectrum LSF Suitesとして発売されています。
並列コンピューティング(並列処理)
大きな問題を解いたり、大量のデータを処理する過程において、特定の処理をいくつかの独立した小さな処理に細分化し複数のCPU上でそれぞれの処理を同時に実行する事を並列コンピューティングと言います。現在のマルチコア設計のCPUにおいては並列計算に活用する事が当たり前となっています。
プログラムの配置に同一メモリを用いる並列プログラムは共有メモリ型(SMP)と呼ばれ、 スレッド並列(マルチスレッド)が用いられます。別メモリ(主記憶)を用いる並列プログラムは分散メモリ型と呼ばれ、プロセス並列(マルチプロセス)が用いられます。
さらに、上記を組み合わせたハイブリッド型も存在します。マルチプロセスとマルチスレッドは共存可能ですがプログラムは複雑化します
PCクラスタはノード毎にメモリを別々に持つため、複数のノードを使用する並列プログラムにおいてはプロセス並列が可能な仕組みを実装する必要があります。具体的にはMPIを用いて複数のCPUがバイト列メッセージを送受信する事で、協調動作を行えるようにします。
MPI
MPI (Message-Passing Interface) は、並列コンピューティングを利用する為に標準化された、プロセス間でメッセージ通信をするAPI仕様の規格の一つであり、 異なるプロセス間でデータを交換する仕組み(マルチプロセス)を提供します。
マルチスレッド並列との違いは、計算ノードをまたいだ並列を実装可能なことです。分散メモリ型並列処理の基本技術であるメッセージパッシングの世界標準規格であり、 PC クラスタの中核をなす要素の一つです。
メッセージパッシングは分散メモリ型システムの技術となりますがSMP型でも使用可能です。 MPIがサポートされているシステムは、専用の並列計算機、ワークステーション、PCと幅広く、 移植性が高い事も特徴となります。
MPI環境ではSPMD(Single Program Multiple Data)モデルでプログラムが記述されます。そのため複数の纏まったデータに対して同じプログラムを実行します。すなわち、1つの並列処理の為にはプログラムは1つしか存在しません。また、MPIを使う際は実行ファイルか全ノードで同じディレクトリ位置に置かれている必要があります。 (一般的にはNFSでファイル共有します)
MPI環境下でプログラムが実行されると指定された数のプロセスが生成され、クラスタ環境下の各ノードのCPUに分配されます。各CPUはプログラムの中で何番目のプロセスとして動作するかを基準として適宜処理され、各プロセスで互いにデータを交換しながらプログラムを実行します。
MPIの実装はフリー、ベンダー問わず数多く存在しますが、OSSでは以下のようなソフトウェアがあります。
MPICH
BSDライセンス。アルゴンヌ国立研究所がパブリックドメインソフトウェアとして初期のバージョンを開発。最も人気があるMPI実装の一つで、Intel MPI、Cray MPI、Microsoft MPI等においてベースとなっています。
Open MPI
BSDライセンス。FT-MPI、LA-MPI、LAM/MPI、PACX-MPIをベースに幾つかの他のプロジェクトの技術やリソースを組み合わせて開発されています。
ノード管理
様々な管理ツール
複数のノードからなるPCクラスタの分析、監視、制御を可能とするため様々な管理ツールが提供されています。
管理ツールの主な機能
リソース分析:ハードウェアリソース使用量(CPU、メモリ、ストレージ、ネットワーク等)を計測
サーバー監視:OS、サービス、スイッチ、ストレージ等の死活、稼働状態を監視
サーバー管理:インフラ構築(サーバー構築、プロダクトインストール、設定等)の自動化
ジョブ実行:システム運用ジョブの実行制御、サービスの起動停止等の運用作業自動化
商用製品には全ての機能が使用できるツールもありますが、OSSではリソース分析とサーバー監視が主な機能となり各ツール単体では不足する部分もあります。ただし、ツール単体としては十分な機能が提供されており、それぞれを組み合わせて使用する事も可能です。
また、OSS(GPLやMPLライセンス等)の範囲内で全ての機能が利用可能なもの、有償でサブスクリプションやサポート契約を追加購入することで機能を追加できるツールもあります。
以下は各機能を実装している主な管理ツールとなります。
OSSのためご利用OSによりサポート対象外となる場合があります。
リソース使用量分析(モニタリング)
CPU、メモリ、ストレージ、ネットワークなどのリソース使用量を計測します。
Ganglia
カリフォルニア大学による監視システムから開発されたリアルタイム監視ツール。BSDライセンス。
RHEL等のエンタープライズレベルのLinuxディストリビューションにバンドルされ、多くのノードのCPU負荷平均やネットワーク使用率のライブ統計を表示する為に使用されます。
Munin
Muninコミュニティによる開発。GPLライセンス。 リソース使用状況をモニタリングする事に特化している事が特徴です。
サーバー内システム監視
OS、サービス、スイッチ、ストレージなどの稼働状況を監視(死活管理)します。
Nagios
Ethan Galstad氏を中心に開発され、現在も保守が行われています。GPLライセンス。
監視系のソフトウェアとしては歴史が長く、プラグインが充実しており商用製品も存在します。
cacti
元々はRRDTool(データロギングツール)のフロントエンドとして開発されました。 現在はThe Cacti
Groupが開発、保守。GPLライセンス。 インストール後の基本設定のみでリソースのグラフ化を行う事が可能です。
クラスタ内コマンド自動実行
インフラ構築作業(サーバー構築、プロダクトインストール、設定など)の自動化
Serf
アメリカのHashiCorp社が開発を行っている分散型クラスタメンバシップソフトウェア。MPLライセンス。
アプリケーションインストールや更新やパッチ適用などの自動実行が可能で、同社のシステム監視ソフトウェアとしてConsulがあります。
ジョブ実行制御
システム運用ジョブの実行制御、サービスの起動停止などの運用作業自動化
OpenPBSやSlurm等のジョブスケジューラ
JobScheduler
ドイツのSOS社による開発。GPLライセンスの他、エンタープライズレベルの有償ライセンスがあります。
ジョブの中で様々なAPIが使用可能ですが、同時複数タスク実行には有償ライセンスが必要となります。
総合環境
Hinemos
IPAのOSS活用基盤整備事業の委託を受け、NTTデータ社が開発した純国産のソフトウェア。GPLライセンス。
運用目的ごとにコンピュータをグループ登録し、グループに対して操作を行うことが可能です。また、ジョブ実行機能もあります。
Zabbix
ラトビアのZabbix社による開発、保守。GPLライセンス。
エージェントを監視対象にインストールしてステータスを監視。監視方法やグラフ変更の自由度が高く、監視対象にソフトウェアをインストールせずに可用性と応答性を確認する運用方法があります。
Job
Arranger for Zabbix
大和総研ビジネス・イノベーション社が開発したZabbixのアドオン。GPLライセンス。
Zabbixにジョブ管理機能を補完し、Zabbixと連携する事で運用監視が可能です。