大規模可視化対応PCクラスタ(VCC)

システム概要

大規模可視化対応PCクラスタ(VCC : PC Cluster for large-scale Visualization)は、総計69ノードが相互接続されたクラスタシステムです。66ノードはIntel Xeon E5-2670v2プロセッサ2基、64GBの主記憶容量を搭載しており、残り3ノードはIntel Xeon E5-2690v4 プロセッサ2基、64GBの主記憶容量を搭載しております。これら69ノードを、InfiniBand FDRでノード間接続し、クラスタを形成します。

 

また、本システムでは、システムハードウェア仮想化技術ExpEtherを導入しており、各ノードと、GPU資源、SSD、ディスクが接続された拡張I/Oノードを20GbpsのExpEtherネットワークで接続します。このノードと拡張I/Oノードの接続組み合わせを変更することで、利用者の利用要求に応じた大規模計算機システムを再構成することができる点を最大の特徴としています。

 

なお、本センターでは、2PBのディスクをNEC独自開発のNEC Scalable Technology File System (ScaTeFS) と呼ばれる高速・分散並列ファイルシステムで管理し、VCCを含む本センターの大規模計算機システムからアクセス可能な構成としています。

 

[注意!!] 本システムは、大規模可視化システムとの連動や、可視化用途にしか利用できないというわけではありません。シミュレーションや大規模計算用途にもご利用いただけます。

 

【TIPS】ScaTeFS
ScaTeFSは、複数のI/Oサーバにメタデータおよびデータを均等に分散させることで、高速な並列I/Oと大量のファイル操作に強いファイルシステムを実現するだけでなく、単一障害点の排除と自動リカバリによる高い耐障害性とデータ保護も同時に実現した高信頼性を確立したファイルシステムです。
【TIPS】システムハードウェア仮想化技術 ExpEther

ExpEtherは、イーサネット(Ethernet)上でPCI Expressを仮想化する技術です。これにより、通常の計算機内の内部バスを、イーサネット上にスケールアップすることが可能となります。

 

ノード性能

各ノードは、200GFlopsの演算性能を有するIntel Xeon E5-2670v2プロセッサ2基、64GBの主記憶容量を搭載しています。Intel Xeon E5-2670v2プロセッサは、その動作周波数は2.5GHz、内部に10コアを搭載しており、プロセッサ単体の演算性能は200GFlopsです。そのため、ノード単体では合計20コア、ノード単体の演算性能は400GFlopsとなります。

 

ノード間の通信は、InfiniBand FDRで接続され、双方向56Gbpsの最大転送容量を提供します。

1ノード(VCC)
プロセッサ(コア)数 2(20)個
主記憶容量 64GB
ディスク容量 1TB
演算性能 400GFlops

2017年4月追記
構成の異なる3ノードを増設しました。(以下、増設ノードという)

増設ノードは、Intel Xeon E5-2690v4 プロセッサ2基、64GBの主記憶容量を搭載しています。Intel Xeon E5-2690v4プロセッサは、その動作周波数は3.5GHz(ターボブースト使用)、内部に14コアを搭載しており、プロセッサ単体の演算性能は784GFlopsです。そのため、ノード単体では合計28コア、ノード単体の演算性能は1568GFlopsとなります。

1ノード(VCC増設分)
プロセッサ(コア)数 2(28)個
主記憶容量 64GB
ディスク容量 1TB
演算性能 1568GFlops

 

システム性能

大規模可視化対応PCクラスタ(VCC)は、総計69ノードから構成されます。そのため、システム全体の理論性能値は下記のように導かれます。

大規模可視化対応PCクラスタ(VCC)
プロセッサ(コア)数 138(1404)個
主記憶容量 4.278TB
ディスク容量 62TB
演算性能 31.104TFlops

また、VCCは、各ノードに対して、システムハードウェア仮想化技術ExpEtherを用いることで、ユーザのニーズに応じて、下記の再構成可能資源を割り付けることができます。現在、再構成可能資源として提供している資源は下記の通りです。現在、再構成可能資源として提供している資源は下記の通りです。

 

【TIPS】再構成可能資源を割り付けでの注意事項

1ノードに対してすべての再構成可能資源を割り付けることができるわけではなく、1ノードあたりに割り付けることのできる最大資源数が限られています。しかし、SSDとGPUといった再構成可能資源を組み合わせて割り付けることが可能です。

 

ご興味・関心のある方は下記までお問い合わせください。

 

system at cmc.osaka-u.ac.jp

 

再構成可能資源 資源数 性能値
GPU:Nvidia Tesla K20 59枚 69.03TFlops
SSD:ioDrive2(365GB) 4枚 1.46TB
Storage:PCIe SAS (36TB) 9枚 324 TB

 

ソフトウェア

本センターのVCCには、オペレーティングシステムとしてCent OS 6.4が採用されています。そのため、日常的にLinux系OS上でプログラム開発をされている方にとっては、利用、プログラムの移植・開発が非常に容易なシステムとなっています。

 

現在、本システムで利用できるソフトウェアとして下記を提供しています。

ソフトウェア
Intel C/C++/Fortran Compiler
Intel MPI
Intel MKL(BLAS、LAPACKをはじめとする密線形台数、スパース線形代数、統計関数、ScaLAPACK、クラスター FFT、高速フーリエ変換 (FFT)、最適化された LINPACK ベンチマーク、ベクトル・マス・ライブラリー)
AVS/Express PCE
AVS/Express MPE (Ver.8.1)
Gaussian09
GROMACS
OpenFOAM
LAMMPS
プログラミング言語
C/C++(Intel Compiler/GNU Compiler)
FORTRAN(Intel Compiler/GNU Compiler)
Python
Octave
Julia

なお、VCCへのジョブ管理には、Job ManipulatorとNQSIIを中核とした統合スケジューラを採用しています。スケジューラについては下記をご参照ください。


スケジューラについて

 

 

VCCでの性能チューニング

VCC上で性能チューニングを行う方法には、大別して、ノード内並列(共有メモリ並列)、ノード間並列(分散メモリ並列処理)の2種類があります。前者のノード内並列処理は、VCCのノード内に搭載された20個のCPUコアで計算負荷を分散する方法です。後者のノード間並列処理は、VCCの複数のノードに計算負荷を分散する方法です。

 

VCCで最大限の性能を引き出すためには、ノード内並列とノード間並列を併用する必要があります。VCCでは特に1ノードあたりに搭載されたコア数が多いため、主記憶容量64GBの範囲で計算が可能な場合には、ノード内並列で20コアを最大限に分散並列化が効果的ともいえます。

 

さらに、VCCでは再構成可能資源としてGPUやSSDが準備されていますので、GPUを用いた高速化を行ったり、SSDを用いてローカルディスクへのI/Oを高速化するなどの工夫によって、さらにチューニングを進めることもできます。

 

    ノード内並列(共有メモリ並列処理)

    この方法の特徴は、スカラ型CPU20コアが主記憶64GBのメモリ空間を”共有”することにあります。一般的に、分散並列計算においては、分散メモリ型のほうがプログラミング、チューニングが容易といわれています。VCCにおいても、この一般論があてはまり、ノード間並列よりもノード内並列のほうが容易であると言えます。

     

    VCCでのノード内並列は、「OpenMP」、「スレッド」といった方法が代表的です。なお、一般的には、ノード間並列処理で用いられる「MPI」をノード内並列で用いることもできます。

     

    【TIPS】OpenMPによる共有並列化

    OpenMPは共有メモリ並列プログラミングのための標準API(Application Programming Interface)です。文字通り、OpenMPは、共有メモリ型の計算機を対象としています。例えば、以下のように、ソースコードにコンパイラに対する指示行(Compiler Directive)を挿入してコンパイルするだけで、マルチスレッド実 行する実行モジュールが自動的に生成されるため、初学者が比較的簡単に着手できる分散並列化手法です。Fortran、CあるいはC++で利用できます。

     

    例1              
    #pragma omp parallel
     {
    #pragma omp for
      for(i =1; i < 1000; i=i+1)  x[i] = y[i] + z[i];  }

    例2
    !$omp parallel
    !$omp do
      do i=1, 1000
        x(i) = y(i) + z(i)
        enddo
    !$omp enddo
    !$omp end parallel

    OpenMPについては、書籍、インターネットから多くの情報を取得できますの で、より詳細な利用方法については、参考にされるとよいでしょう。

    【TIPS】スレッドによる分散並列化

    スレッド(thread)は軽量プロセスとよばれる、プロセスよりも細かい処理の単位です。プロセス単位でCPU利用を制御するよりもスレッド単位でCPU利用を制御するほうが、それらを実行するための情報の切り替えが高速に行われるため、計算処理が高速になることがあります。

     

    ただし、VCCでスレッドを利用する際は、スケジューラにジョブを投入する際に、

    #PBS -l cpunum_job=20

    として、ノード内のCPUコアをすべて利用する宣言を行わなければなりません。

     

    ノード間並列(分散メモリ並列処理)

    この方法の特徴は、異なるノードの主記憶を利用する計算方法であるため、同一のメモリ空間を共有せず、分散配置された複数鵜の独立したメモリ空間を利用することにあります。このことが、分散メモリ並列処理が共有メモリ並列処理よりも難しい要因となっています。

     

    VCCでのノード間並列は、「MPI(Message Passing Interface)」を利用する方法が代表的です。

     

    【TIPS】MPIによる分散並列化

    Message Passing Interfaceはメッセージパッシング方式に基づく分散並列プ ゴラミングのためのライブラリ、API(Application Programming Interface)を規 定しています。MPIでは、分散メモリ並列処理環境上で発生しうるMPIプロセス間の通信パターンを想定し、あるプロセスがあるプロセスと通信をおこなう1対1通 信(例えば、MPI_Send, MPI_Recvなど。)、複数のプロセスが同時に関係した通信をおこなう集合通信(例えば、MPI_Bcast, MPI_Reduceなど。)に関する、直感的で分かりやすいAPIを提供します。MPIによる分散並列化では、開発者が複数のMPIプロセス間でのデータ移動、計算負荷分散を考慮しつつ、ソースコードを作成しなければならないため、初学者にはすこし敷居が高い分散並列化手法です。 しかし、計算機システムのハードウェアアーキテクチャや特性を理解してコー ディングを行うことができる中・上級者になれば、HPFよりも高性能なソースコードを開発することができるようになるでしょう。なお、今日では、MPIは事 実上標準(de facto standard)になっており、数多くの分散並列化を行うシミュレーションや解析処理で用いられています。また、今日の計算機アーキテクチャが”クラスタ化”していることも背景にありますので、MPIは習得しておくのがよいでしょう。

     

    GPUを用いた高速化

    VCCには、Nvidia Tesla K20というGPUが59枚再構成可能資源として準備されています。このGPUを、例えば、VCCを構成する4ノードに2個ずつ割り付け、8個のGPUを用いたアクセラレーションを行うことも可能です。本センターのGPUでの開発環境としては、CUDA(Compute Unified Device Architecture)が準備されています。

     

    【TIPS】CUDAによる分散並列化
    CUDA(Compute Unified Device Architecture)は、NVIDIA社が提供するGPUコンピューティングのための統合開発環境で、C言語ベースのライブラリ、コンパイラ、デバッガなどが提供されています。そのため、C言語経験者には比較的容易にGPUを利用したプログラミングに着手することができます。

     

    関心の有る方は、こちらより情報が取得できます。