Wenming Ye による HPC のための Windows Azure 活用 ~ クラウドカバー Episode 67 

今回の Cloud Cover は、Wenming Ye を交えて、High Performance Computing (HPC) な目的での Windows Azure 活用についてディスカッションします。

 

Wenming は Wade と同じチームの Technical Evangelist でこれまでに HPC 系のビジネスを担当しており、ここ最近 Windows Azure のチームに加わりました。最近では Windwos Azure Training Kit の HPC 関連のコンテンツ作成など担当しています。

 

 

では、いつものようにニュースから。

The Kinectonitor

Kinect を使い、部屋に人が入ってきたときにその情報を Windows Azure Service Bus 経由で通知を行う仕組みの紹介です。

 

Web カメラではなく、Kinect を使用するポイントは、Kinect において人(スケルトン)の認識が可能な点。画像解析を独自に行わなくとも、Kinect SDK を使うことで、人の認識を行ってくれるので、無駄な通信を抑え、また応用部分に集中してシステムを組める、ってのが良いようです。

この Kinectonitor のコードは GitHub から入手できます。

 

Announcing the Enterprise Library Integration Pack for Windows Azure with Autoscaling and Transient Fault Handling

Windows Azure 上で Enterprise Library 5.0 を活用するための Integration Pack がリリースされました。ほとんどのアプリケーションブロックは Windows Azure 上でも動作させることが可能ですが、この Integration Pack では、Windows Azure の特長を活かすためのガイドおよび、Windows Azure 用の2つの新しいアプリケーションブロック Wasabi と Topaz が含まれています。

 

一つ目の Wasabi はベータリリースされていたものの正式リリース版で、Windows Azure におけるオートスケールのためのビルディングブロックです。

二つ目の Topaz は SQL Azure や Windows Azure Storage 等で発生する Transient なエラーに対して、同様のロジック、コードでリトライポリシーを設定できるようにするものです。使用イメージは以下のような感じです。

// Define your retry strategy: retry 5 times, starting 1 second apart // and adding 2 seconds to the interval each retry. var retryStrategy = new Incremental(5, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2)); // Define your retry policy using the retry strategy and the Windows Azure storage // transient fault detection strategy. var retryPolicy = new RetryPolicy<StorageTransientErrorDetectionStrategy>(retryStrategy); // Receive notifications about retries. retryPolicy.Retrying += (sender, args) => { // Log details of the retry. var msg = String.Format("Retry - Count:{0}, Delay:{1}, Exception:{2}", args.CurrentRetryCount, args.Delay, args.LastException); Trace.WriteLine(msg, "Information"); }; try { // Do some work that may result in a transient fault. retryPolicy.ExecuteAction( () => { // Call a method that uses Windows Azure storage and which may // throw a transient exception. this.queue.CreateIfNotExist(); }); } catch (Exception) { // All the retries failed. }

 

簡単で、美しいですね :-)

さらに詳しくはドキュメントを参照ください。

 

New Self-Service Publishing Wizard Eases Distribution of New Datasets on the Windows Azure Marketplace

Windows Azure の MArketplace におけるデータの販売機能が強化され、SQL Azure におけるデータを簡単に値付けし、外部に販売できるようになりました。

この強化は Publishing Portal の改善として行われており、さくさくっ、としたウィザード入力で、既存のデータを使ってビジネスを行うことが可能になっています。

価格だけでなく、トランザクションの上限や、無償トライアルの有無、販売する地域の選択等も簡単に設定できます。

image

 

Wade が Wenming に NASA より正確な天気予測売れるんじゃね?、とけしかけていますが、そのあたりのトピックは「Don’t trust the weatherman?」も参照ください。

 

さて、いよいよ本題の HPC トピック。

これまでは高価なスーパーコンピューター、たとえばクレイのような環境が必要だったのが、最近ではチープなコモディティPCを組み合わせて高度な計算が可能になってきました。

一方で、コモディティPCとはいえ、台数を集めるのは困難です。しかし、クラウドを使えば、必要なコンピューティングパワーを、必要な時にのみ利用できるので、HPC 的なコンピューターの使用法がより広がることになります。

また、HPC 的な利用法として、大量のコンピューティングと高性能なネットワークを利用して一斉に計算を行う、という使い方と、大量のコンピューティングにより個別計算を並列に行い最後にデータをまとめる、といった使い方があります。前者の場合、ネットワーク性能がボトルネックになることが多いため、専用の環境(100Gbpsなネットワークとか)で行われることが多いようですが、後者のような場合は、コモディティ化された環境で構築されているクラウドなコンピューティングにおいてフィットするシナリオといえます。

 

最初に出てきたのは、8コアの CPU を 8個搭載した(つまり64コアな)クレイによる、サイクロンな掃除機のシミュレーション。

image

 

このシミュレーションでは、複数の条件のシミュレーションが同時に走ることがあるタイプの HPC なシナリオになっています。サンプルとして、バッチとして、10個の計算を並列で行うようなバッチを用意しています。

image

 

具体的いには、10人の学生や研究者が、個別のモデルを構築し、それらをジョブとして HPC に投入してシミュレーション結果を待つ、といった用法を想定しています。

image

 

このような計算は、Windows Azure の利用パターンとして最適です。

ここからは、Windows の HPC 機能を使いながら、シナリオの解説になります。まず最初に立ち上げたので HPC の管理コンソール。

image

 

色のついた正方形が13個並んでいますが、これが計算を行うためのノードです(一つの正方形が1つのコンピューティングリソースを表しています。この画面では5つの Azure を使ったノードと、8つのクレイのノードが表示されています)。

Azure を HPC の計算ノードとして使用する場合、この管理コンソールから、Azure の計算ノードの追加(Azure インスタンスの追加の立ち上げ)が可能です。

 

ちなみに、HPC の機能ですが Windows Server 2003 でバージョン1、 Windows Server 2008 でバージョン2、そして Windows Server 2008 R2 でバージョン3、となっています。

 

さて、先ほど投入した10個の計算ですが、1コアにつき1個の計算が行われるように設定されており、4コアな Azure ノードにおいて、それぞれ2個ずつの計算が割り当てられ、シミュレーションの実行が進んでいます。

image

 

今回行っている計算は、サイクロンな掃除機の空気の動きのシミュレーション。こういったシミュレーションを通じて、よりよりデザインが計算を使って求めることができるようになります。

image

 

さて、HPCな計算の仕組みですが、まず全体をコントロールするヘッドノードが必要になります。次に実際に計算を行うワーカーノード。そして、ノード間のデータのやり取りを行うためのデータベースが必要です。

次に Wenming が紹介しているのは、これらを管理するためのアプリケーション。

この管理画面から、ヘッドノードの数や、ワーカーノード(Compute ノード)の指定等を行うことで、あらかじめ用意されている Windows Azure 用のヘッドノード、ワーカーノードのプログラムが Windows Azure 上に展開されるような仕組みになっています。

image

 

Azure に配置されている管理ポータルでは、現在行われている計算の状況等が確認できるようになっています。今回実施しているのは、流体力学のサンプルのようです。

image

 

実際に計算を行った結果は以下のような感じで確認できます。

image

 

なお、このあたりの管理機能を含めた形での HPC のサンプルとして、Windows Azure Training Kit の Demo において、HPCImageRendering のコードとドキュメントが用意されています。(Windows Phone を使ったサンプルになっています)

 

さて、HPC では典型的に 3つのプログラミング モデルに分類することができます。

  • WCF スケールアウトファームをつかって、1つのプロキシを使い、バックエンドで処理を行うモデル。
  • MPI (Message Passing Interface)。 トラディショナルな HPCで使用されているプログラミングモデル。計算を分担するコアやノードに依存関係がある計算で、ネットワーク帯域が必要となる。
  • Prametric Sweep な方法。クラウドでよくつかわれているプログラミングモデルで、基本的に依存関係のない計算を並列実行する。例えば複数の計算結果からベストなものを選ぶようなもの。

 

先ほどの計算の実行環境は、Azure ポータルから見ると以下のように、5つの計算ノードと、一つのヘッドノード、そして管理用の Web から構成されているのがわかります。

image

 

ということで、Windows Azure を使った HPC な計算に関する紹介でした。

 

さて、これらの HPC 関連の資料は、Windows Azure Traning Kit の最新版、2011年Dec 版から含まれています。具体的には Lab や Demo のフォルダに追加されていますが、実際に試すには Microsoft HPC Pack 2008 R2 Client Compinent および Windows Azure HPC Scheduler SDK などの環境が必要です。

このあたりは、Training Kit インストールの際に、Web Installer を使ってインストールすると、依存関係チェックなど良しなに計らってくれますので便利です。

下記は、HPC 系のデモ/Lab のインストール時に指摘された依存関係にあるコンポーネントのインストール状況(先にあげた二つのコンポーネントの不足を指摘されています)。

image

 

Web Installer は、Windows Azure Training Kit - December Update の "WATK-WebInstaller.exe" を選択することで立ち上げることができますので、ぜひご利用ください。

 

ということで、夢か現実化わからない感じで Tip of the Week へ!

image

 

今回の Tips は、Visual Studio を使わずに PowerShell で HPC を使う方法の紹介です。

詳しくは、Deploying an HPC Cluster using just PowerShell (Part I) に書かれています。

そして、これ以外にもこのブログ「Windows HPC survival guide」には様々な HPC な話題が載っていますので、ご興味のあるトピックがあれば、読んでみてください。

 

それでは、Enjoy!