Windows HPC Server を使ってみる 2013/6/21 threecourse
目次 なぜ「Windows HPC Serverによる分散処理計算」か? Windows HPC Serverによる分散処理環境の構成 分散処理アプリケーションの作成 分散処理アプリケーションの流れ 分散処理アプリケーションのポイント 参考資料
なぜ「Windows HPC Serverによる 分散処理計算」か? 保険数理におけるEmbedded Value計算・リスク量計算などにおいては、大量のシナリオ・センシティビティによるプロジェクションが求められます。 1台のPCでは計算速度に限界があるので、複数台PCによる分散処理計算が必要となってきます。 複数台PCによる分散処理計算の方法の一つとして、Windows HPC Serverがあります。 その他、Hadoopなどの選択肢もあるようです。
Windows HPC Serverによる分散処理環境の構成 ヘッドノード+ノード(複数)による構成になります。 この他、ファイルを保存するファイルサーバを用意することもあります。 ヘッドノード…ジョブ/タスクの管理を行うPC ノード …計算を行うPC ノード ノード ノード ヘッドノード ノード ノード ノード
Windows HPC Serverが行うこと 具体的には、以下のようなことを行います。 タスクを各ノードに割り振る ジョブ/タスクが完了したり、失敗したときにそれを通知する ジョブ ひとかたまりの仕事。ジョブ単位でWindows HPC Serverに「投げる」ことになります。 1つのジョブは複数のタスクから構成されます。 (例:ある保険種類のプロジェクションの1000シナリオの計算) タスク ジョブを小さく分けたもの。タスク単位で各ノードPCに割り振られます。 (例:ある保険種類のプロジェクションの1000シナリオのうち、各1シナリオの計算)
Windows HPC Server 環境構築 1.Windows Azure(Microsoftのクラウドサービス)を使用する方法 Windows Azure上に、Windows HPC Serverがインストールされた状態で仮想PCを構築することができます。 以下の資料の前半部に沿うことで、Windows Azure上にWindows HPC Serverがインストール済みの環境を構築することができます。(資料のサンプルアプリケーションの代わりに、以下で説明するサンプルアプリケーションを実行できる) Getting Started with Application Deployment with the Windows Azure HPC Scheduler http://msdn.microsoft.com/en-us/library/hh560245%28VS.85%29.aspx
Windows HPC Server 環境構築(続き) 2.実PCで運用する方法 複数台PCを購入し、それらにWindows HPC Packを導入します。個人ではちょっと現実的ではないですね。。
分散処理アプリケーションの作成 サンプル分散処理アプリケーション 100行の数値をインプットとし、各行の数値の2乗平均和を取得するアプリケーションを作成します。 ジョブを「各行の数値を2乗すること×100」とし、分散処理実行させます。その後、結果を取得しクライアント側で平均をとります。 サンプル分散処理アプリケーションの構成 以下のようにプログラムを分割して構成しています。 SampleClient.exe…クライアントアプリケーション。これを起動して計算を開始します。 HPCLib.DLL …分散処理用のライブラリ HPCNode.exe …ノードから実行される実行ファイル SampleClient.exeの部分を変更することで、好きな計算を分散処理により行うことができます。
分散処理アプリケーションの作成 サンプル分散処理アプリケーションのビルド 筆者はVisual Studio 2010 Professionalで開発しましたが、2012やExpress版でも実行可能と思います。 参考資料にある以下SDKのインストールが必要となります。 HPC Pack 2008 R2 Client Utilities Redistributable Package with Service Pack 4 Microsoft HPC Pack 2008 R2 SDK with Service Pack 4
分散処理アプリケーションの流れ 準備 各ノードPCからも読み書きができる共有フォルダを作成しておきます。 計算の流れ SampleClient.exeを実行します。 共有フォルダ内に一時フォルダを作成し、必要なデータをコピーします。この中に各ノードPCから実行するためのHPCNode.exeも含めます。 Windows HPC ServerにHPCNode.exeを実行するジョブを送信します。 Windows HPC Serverから指示を受けた各ノードPCがHPCNode.exeを実行する。実行結果はファイルとして共有フォルダに保存します。 Windows HPC Serverからジョブが終了したという指示を受け取ります。 各ノードPCの実行結果を読み込み、集計して結果を出力します。 一時フォルダを削除します。 他にも、SOA(サービス志向アーキテクチャ)という方法で分散処理を行うこともできます。しかし、学習すべき事項が増えるため、今回はその方法をとっていません。
分散処理アプリケーションの流れ ヘッドノード 4.ジョブ指示 ノード 3.ジョブ送信 共有フォルダ 4.ノード計算実行 2.コピー 4.ノード計算結果保存 ノード 計算結果
分散処理アプリケーションの流れ ヘッドノード 5.ジョブ終了通知 ノード 共有フォルダ 分散処理アプリケーション 分散処理アプリケーション 7.削除 6.集計・出力 ノード 計算結果 計算結果 6.ノード計算結果の取得
分散処理アプリケーションのポイント 通常のアプリケーションでは1つのPC内で計算されるため、普通にプログラムを書くことで、メモリ内で情報を受け渡すことができます。 しかし、分散処理アプリケーションでは、別のPCで実行するため、情報を共有/受け渡すために配慮が必要となります。
分散処理アプリケーションのポイント (つづき) データの受け渡し インプットデータ・計算したデータ等の受け渡しには共有フォルダを使っています。 計算したデータの受け渡しには、「シリアライズ」というデータをファイルとして保存する機能を利用しています。 「シリアライズ」により計算結果を表すクラスをファイルに保存し、逆(デリシアライズ)によって読み込みます。
分散処理アプリケーションのポイント (つづき) ノードからの計算メソッドの実行 ノード用実行ファイルがクライアントのクラスを利用するため、普通に組むとノード用実行ファイルがクライアントに依存することになり、ライブラリとして切り出しにくくなります。 ですので、実行すべきクラス・メソッドを文字列で渡し、「リフレクション」という機能を使って実行しています。 「リフレクション」を使うと、クラスが定義された実行ファイル・ライブラリをロードし、クラス・メソッド名を文字列で指定することでメソッドを実行することができます。
参考資料 Windows HPC Serverで分散処理を行うアプリケーションを作成するのに必要なSDK Microsoft HPC Pack 2008 R2 SDK with Service Pack 4 http://www.microsoft.com/en-us/download/details.aspx?id=29992 この中にSampleもあるので参考になります。 特に、Scheduler\HPCSchedulerBasicsが一番基本になります。 HPC Pack 2008 R2 Client Utilities Redistributable Package with Service Pack 4 http://www.microsoft.com/ja-jp/download/details.aspx?id=17017
参考資料(つづき) Azureで分散処理を行うために必要なSDK Windows Azure HPC Scheduler SDK (1.7, June 2012) http://www.microsoft.com/en-us/download/details.aspx?id=28015 Windows Azure SDK for .NET - June 2012 SP1 http://www.microsoft.com/en-us/download/details.aspx?id=30651 SOAアプリケーションを作成して分散処理を行うためのドキュメント SOAアプリケーションを扱わない場合でも、Windows HPC Serverの仕組みを理解するのには役立ちます。 SOA Applications, Infrastructure and Management with Windows HPC 2008 R2 http://www.microsoft.com/en-us/download/details.aspx?id=11540
QUESTION?