世界のスーパーコンピュータとそれを動かす人々


1月 23, 2015

Univa Grid Engineにコプロセッサを組み込む

HPCwire Japan

Tiffany Trader

1年程前にOracleからこのソフトウェアに関連するソースコード、著作権および商標権を買い取り、商業的にサポートされているGrid Engineの唯一の御用達となったUnivaは近頃、NVIDIA GPUやIntel Xeon PhiのようなコプロセッサをUniva Grid Engine計算クラスタに組み込み、利用する方法についてのwebinarを開催した。Grid Engine 8.2の9月のリリースと様々なワークロードへのアクセラレータやコプロセッサの採用の増加傾向の中で、Grid Engineの環境の中にこれらの部分を最適に利用する方法を見るにはタイムリーであった。

セッションは、SunおよびOracleで技術を提供し、現在はUniva Gird EngineチームのメンバーであるシニアソフトウェアエンジニアのDaniel Gruberにより行われた。このDRMAA2ワーキンググループメンバーの専門の中には、コア/メモリ結合、RSMAP、Intel Xeon Phiサポート、cgroups、Cray XC30サポート、そしてHP CPUへの組み込みが含まれている。

「コプロセッサは計算クラスタに不可欠な部分であり、それゆえに、これらの追加のリソースを管理する際には特別な注意を払う必要があります。」とGruberは説明する。「最も広く利用されているコプロセッサはNVIDIA KeplerのようなGPUとIntel Xeon Phiのカードです。両者は完全に異なるアーキテクチャでメリット、デメリットがあります。また共通の基本的なものも持っています。」

「現世代はPCI Expressカードで取り付けられます。これらは排他的と非排他的モードで利用可能です。電力を食いますし熱も発生しますので、クラスタスケジューラが最適な利用方法とリソースへのアクセスを管理する必要があり、電力と温度の制約に対処できなければならないのです。」

「演算集約型アプリケーションを高速化するコプロセッサのアプローチは、浮動小数点演算、グラフィックス、信号処理、文字列処理のほか暗号化に依存しているワークロードで依然として勢いを増しています。特定のワークロードの型を高速化する能力によって、現在のTOP500リストの最高速のHPCクラスタの多くにコプロセッサは採用されています。これらはまた非常にエネルギー効率が高くいのです。」とGruberは語っている。「2014年6月のGreen500リストを見て頂くと、最初の17システムはGPUまたはIntel Xeon Phiを使っており、これは最近のGreen500リストでもあまり変わっていません。」と彼は付け加えた。

サンプルコードを含んだスライドを使って、GruberはUniva Grid Engine環境にコプロセッサやリソースを設定する方法を説明して行く。議題には、異なる型のリソースを設定する方法、ジョブの投入・監視方法、利用状況メトリックでの作業、NUMAマシン用の設定や混成したワークロードの最適化までカバーされている。

運用中のUnivaクラスタでのコプロセッサとリソースの設定から始まり、Gruberは、最初のステップは、コンプレックス設定としても知られているリソース設定の中に、リソースを宣言することによってGrid Engineに新しいリソースを認識させることであると語っている。このコンプレックス設定をインタラクティブに実行するために、ユーザはqconf –mc(Grid EngineのadminかGrid Engineのadminホストのrootである必要がある)を実行することができる。これは現在のリソース設定をviエディタでオープンする。

このスクリーンショットでは、最初の数行で異なるタイプを見る事ができる:

20141210-F1-Univa-coprocessors-configuration-of-resources

Gruberは、RSMAP(リソースマップ)タイプが何故コプロセッサの役に立つか説明している。「ホスト上に複数のGPUを搭載している際に衝突を防止します。これはコプロセッサ番号のようなジョブのリソース・インスタンスへのマッピンを提供します。INTリソースを使うと単純な制限しか設定できませんが、RSMAPを使うと制限と各インスタンスの識別子を設定できるのです。そのため、単に数の制限で制御するのでなく、スケジューラがこれらの識別子をジョブに割り付けて使用中と印をつけることができるようになるのです。このマッピングはユーザがqstat –jで見る事ができますし、$SGE_HGR_GPU=idのプリフィクスで環境変数も見る事ができます。」

また、ホスト毎のリソース設定で、ジョブの実際のスロットリクエストからGPUのリクエストを分離することができる。

Gruberは、リソース設定における「consumable」の設定次第で、リソースリクエストは並列ジョブに掛け合わせられると説明している。

Grid Engineに新しいコプロセッサリソースを認識させた後は、ユーザはGrid Engineに対しいくつの新しいタイプのリソースがホストに接続されているか教える必要があると、Gruberは語っている。これは実行設定の中で行われる。

「これでUniva Grid Engineにコプロセッサを認識させました。次は使う事です。」と付け加える。

ジョブを投入するには、ユーザは-lスイッチに続くリソース名とリソース量またはリソースの値を使ってリソースをリクエストしなければならない。-lスイッチを使ったリソースリクエストは-softキーワードを付ける事が出来る。これは、スケジューラはリソースリクエストを満たそうとするが現在のクラスタの状況では不可能な場合、ジョブは指定されたリソース無しでも進行することができるということだ。これは文字列リソースにおいて理にかなっており、例えばコプロセッサの特定のバージョンモデルを使ってホストを試験するような時にプログラムがより良く動作するような場合だ。ConsumableとRSMAPはソフトとしては利用できず、ハードリソースとしてリクエストする必要がある。リクエストタイプは-hardパラメーターで変更することができる。

並列ジョブは並列環境をリクエストする必要があり、またジョブアレイはコプロセッサを使う事も可能だ。ジョブアレイは、タスクとしては異なる同じジョブの単なる複数のインスタンスであるとGruberは言う。多くの場合、ジョブは各タスク毎に異なるデータセットにアクセスするためにタスクIDを使用している。

さてジョブはホスト上の正しいコプロセッサに向かったので、次のステップはジョブとリソースの利用状況の監視だ。ホスト上に1台以上のコプロセッサ搭載している場合、コプロセッサの状態における情報を取得し処理することに関心が出てくる、とGruberは説明する。出てくるのは、演算ホストからの任意の負荷の値を計測およびレポートしたものの拡張だ。この拡張は負荷センサーをインストールすることで行われる。負荷センターは外部スクリプトもしくはバイナリで、ホストデーモンの実行で自動的に起動・停止する。これらはアプリケーションの標準入力と標準出力チャネルから送られる非常にシンプルなプロトコルに沿っている。負荷センサーは、どんなスクリプトやプログラミング言語でも記述可能で、実行イベントに報告される負荷の値を取得するために、任意のコードが実行できるように有効にする。系差奥されるリソースはUniva Grid Engineが既知であるという要件があり、リソースもしくはcomplex設定で事前に定義されていなければならないということだ。

システムにリソースを追加するには、Univaはこのタスクを単純化するスクリプトを提供している。ユーザはこのスクリプトを実行する際には正しいパーミッションを持っている事が必要で、また必要なコマンドを実行するにはadminユーザであることが必要だ。また、最初にホスト上にダイアログスイッチとダイアログユーティリティを搭載しておう必要がある。このプロセスはスライドで見るようにPhiとGPUでは少々異なる。

20141210-F1-Univa-coprocessors-installing-load-sensors-Phi

 

20141210-F1-Univa-coprocessors-installing-load-sensors-GPU

セッションの最後の部分はIntel Xeon Phi用のプラットフォーム固有の設定と、NUMAマシンと混成ワークロードの最適化方法をカバーしている。「RSMAPリソースタイプを使うと、ジョブをリソースインスタンスに配列できるだけでなく、リソースにコアやソケットを割り付けることができるようになります。」とGruberは指摘している。リソースインスタンスの演算ノードトポロジーへの配列は、リソースインスタンスが受け入れられたジョブで利用できるコアを記述した文字列である、トポロジーマスクを使って行われる。

このシニアソフトウェアエンジニアは、コプロセッサと非コプロセッサジョブを同じマシン上でcgroupsを使ってワークロードを隔離することで、混成ワークロードを最適化する方法についても説明している。「ワークロードの混成は、継続的なホスト毎のコア数の増大と共に重要になってきています。」とGruberは見ている。「コプロセッサのジョブ専用にGrid Engineを設定できたとしても、全てのCPUコアを満たす程にはCPU側ではほとんどスケールしません。それゆえ、計算資源を有効に利用するためには、計算マシン上に混成したジョブを許可することが最善です。」

全てのスライドとコードを含んだフルビデオプレゼンテーションはここからダウンロードできる。